fix compilation adding a makeconst helper struct

This commit is contained in:
Gael Guennebaud 2009-11-07 09:07:23 +01:00
parent 5dc02fe5e9
commit aa0974286f
4 changed files with 25 additions and 18 deletions

View File

@ -93,7 +93,7 @@ public:
? ( int(MayUnrollCompletely) && int(DstIsAligned) ? int(CompleteUnrolling) : int(NoUnrolling) ) ? ( int(MayUnrollCompletely) && int(DstIsAligned) ? int(CompleteUnrolling) : int(NoUnrolling) )
: int(NoUnrolling) : int(NoUnrolling)
}; };
static void debug() static void debug()
{ {
EIGEN_DEBUG_VAR(DstIsAligned) EIGEN_DEBUG_VAR(DstIsAligned)

View File

@ -350,7 +350,7 @@ struct ei_scalar_multiple_op {
EIGEN_STRONG_INLINE Scalar operator() (const Scalar& a) const { return a * m_other; } EIGEN_STRONG_INLINE Scalar operator() (const Scalar& a) const { return a * m_other; }
EIGEN_STRONG_INLINE const PacketScalar packetOp(const PacketScalar& a) const EIGEN_STRONG_INLINE const PacketScalar packetOp(const PacketScalar& a) const
{ return ei_pmul(a, ei_pset1(m_other)); } { return ei_pmul(a, ei_pset1(m_other)); }
const typename NumTraits<Scalar>::Nested m_other; typename ei_makeconst<typename NumTraits<Scalar>::Nested>::type m_other;
private: private:
ei_scalar_multiple_op& operator=(const ei_scalar_multiple_op&); ei_scalar_multiple_op& operator=(const ei_scalar_multiple_op&);
}; };
@ -364,7 +364,7 @@ struct ei_scalar_multiple2_op {
EIGEN_STRONG_INLINE ei_scalar_multiple2_op(const ei_scalar_multiple2_op& other) : m_other(other.m_other) { } EIGEN_STRONG_INLINE ei_scalar_multiple2_op(const ei_scalar_multiple2_op& other) : m_other(other.m_other) { }
EIGEN_STRONG_INLINE ei_scalar_multiple2_op(const Scalar2& other) : m_other(other) { } EIGEN_STRONG_INLINE ei_scalar_multiple2_op(const Scalar2& other) : m_other(other) { }
EIGEN_STRONG_INLINE result_type operator() (const Scalar1& a) const { return a * m_other; } EIGEN_STRONG_INLINE result_type operator() (const Scalar1& a) const { return a * m_other; }
const typename NumTraits<Scalar2>::Nested m_other; typename ei_makeconst<typename NumTraits<Scalar2>::Nested>::type m_other;
}; };
template<typename Scalar1,typename Scalar2> template<typename Scalar1,typename Scalar2>
struct ei_functor_traits<ei_scalar_multiple2_op<Scalar1,Scalar2> > struct ei_functor_traits<ei_scalar_multiple2_op<Scalar1,Scalar2> >
@ -393,7 +393,7 @@ struct ei_scalar_quotient1_impl<Scalar,false> {
EIGEN_STRONG_INLINE ei_scalar_quotient1_impl(const ei_scalar_quotient1_impl& other) : m_other(other.m_other) { } EIGEN_STRONG_INLINE ei_scalar_quotient1_impl(const ei_scalar_quotient1_impl& other) : m_other(other.m_other) { }
EIGEN_STRONG_INLINE ei_scalar_quotient1_impl(const Scalar& other) : m_other(other) {} EIGEN_STRONG_INLINE ei_scalar_quotient1_impl(const Scalar& other) : m_other(other) {}
EIGEN_STRONG_INLINE Scalar operator() (const Scalar& a) const { return a / m_other; } EIGEN_STRONG_INLINE Scalar operator() (const Scalar& a) const { return a / m_other; }
const typename NumTraits<Scalar>::Nested m_other; typename ei_makeconst<typename NumTraits<Scalar>::Nested>::type m_other;
}; };
template<typename Scalar> template<typename Scalar>
struct ei_functor_traits<ei_scalar_quotient1_impl<Scalar,false> > struct ei_functor_traits<ei_scalar_quotient1_impl<Scalar,false> >

View File

@ -83,7 +83,7 @@ inline void* ei_aligned_malloc(size_t size)
ei_assert(false && "heap allocation is forbidden (EIGEN_NO_MALLOC is defined)"); ei_assert(false && "heap allocation is forbidden (EIGEN_NO_MALLOC is defined)");
#endif #endif
void *result; void *result;
#if !EIGEN_ALIGN #if !EIGEN_ALIGN
result = malloc(size); result = malloc(size);
#elif EIGEN_MALLOC_ALREADY_ALIGNED #elif EIGEN_MALLOC_ALREADY_ALIGNED
@ -97,7 +97,7 @@ inline void* ei_aligned_malloc(size_t size)
#else #else
result = ei_handmade_aligned_malloc(size); result = ei_handmade_aligned_malloc(size);
#endif #endif
#ifdef EIGEN_EXCEPTIONS #ifdef EIGEN_EXCEPTIONS
if(result == 0) if(result == 0)
throw std::bad_alloc(); throw std::bad_alloc();
@ -324,34 +324,34 @@ public:
typedef aligned_allocator<U> other; typedef aligned_allocator<U> other;
}; };
pointer address( reference value ) const pointer address( reference value ) const
{ {
return &value; return &value;
} }
const_pointer address( const_reference value ) const const_pointer address( const_reference value ) const
{ {
return &value; return &value;
} }
aligned_allocator() throw() aligned_allocator() throw()
{ {
} }
aligned_allocator( const aligned_allocator& ) throw() aligned_allocator( const aligned_allocator& ) throw()
{ {
} }
template<class U> template<class U>
aligned_allocator( const aligned_allocator<U>& ) throw() aligned_allocator( const aligned_allocator<U>& ) throw()
{ {
} }
~aligned_allocator() throw() ~aligned_allocator() throw()
{ {
} }
size_type max_size() const throw() size_type max_size() const throw()
{ {
return std::numeric_limits<size_type>::max(); return std::numeric_limits<size_type>::max();
} }
@ -362,24 +362,24 @@ public:
return static_cast<pointer>( ei_aligned_malloc( num * sizeof(T) ) ); return static_cast<pointer>( ei_aligned_malloc( num * sizeof(T) ) );
} }
void construct( pointer p, const T& value ) void construct( pointer p, const T& value )
{ {
::new( p ) T( value ); ::new( p ) T( value );
} }
void destroy( pointer p ) void destroy( pointer p )
{ {
p->~T(); p->~T();
} }
void deallocate( pointer p, size_type /*num*/ ) void deallocate( pointer p, size_type /*num*/ )
{ {
ei_aligned_free( p ); ei_aligned_free( p );
} }
bool operator!=(const aligned_allocator<T>& other) const bool operator!=(const aligned_allocator<T>& other) const
{ return false; } { return false; }
bool operator==(const aligned_allocator<T>& other) const bool operator==(const aligned_allocator<T>& other) const
{ return true; } { return true; }
}; };

View File

@ -64,6 +64,13 @@ template<typename T> struct ei_cleantype<T&> { typedef typename ei_cleant
template<typename T> struct ei_cleantype<const T*> { typedef typename ei_cleantype<T>::type type; }; template<typename T> struct ei_cleantype<const T*> { typedef typename ei_cleantype<T>::type type; };
template<typename T> struct ei_cleantype<T*> { typedef typename ei_cleantype<T>::type type; }; template<typename T> struct ei_cleantype<T*> { typedef typename ei_cleantype<T>::type type; };
template<typename T> struct ei_makeconst { typedef const T type; };
template<typename T> struct ei_makeconst<const T> { typedef const T type; };
template<typename T> struct ei_makeconst<T&> { typedef const T& type; };
template<typename T> struct ei_makeconst<const T&> { typedef const T& type; };
template<typename T> struct ei_makeconst<T*> { typedef const T* type; };
template<typename T> struct ei_makeconst<const T*> { typedef const T* type; };
/** \internal Allows to enable/disable an overload /** \internal Allows to enable/disable an overload
* according to a compile time condition. * according to a compile time condition.
*/ */