mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-07-21 20:34:28 +08:00
fix compilation adding a makeconst helper struct
This commit is contained in:
parent
5dc02fe5e9
commit
aa0974286f
@ -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)
|
||||||
|
@ -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> >
|
||||||
|
@ -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; }
|
||||||
};
|
};
|
||||||
|
@ -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.
|
||||||
*/
|
*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user