aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen/src/Core/Map.h
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2015-06-12 11:25:57 +0200
committerGravatar Gael Guennebaud <g.gael@free.fr>2015-06-12 11:25:57 +0200
commit91b64a9c65cac7d967c9be8f8cade068ed421877 (patch)
tree15e59b1a37343acfc71b3aeb9d1f32d3d67fff82 /Eigen/src/Core/Map.h
parent84d103bee88d8a3ba7ccdeecb296ebae6c6920ff (diff)
Relax aligned-on-scalar assert as in the 3.2 branch
Diffstat (limited to 'Eigen/src/Core/Map.h')
-rw-r--r--Eigen/src/Core/Map.h15
1 files changed, 15 insertions, 0 deletions
diff --git a/Eigen/src/Core/Map.h b/Eigen/src/Core/Map.h
index 6b2b3ade4..ce431edc8 100644
--- a/Eigen/src/Core/Map.h
+++ b/Eigen/src/Core/Map.h
@@ -124,6 +124,7 @@ template<typename PlainObjectType, int MapOptions, typename StrideType> class Ma
: Base(cast_to_pointer_type(dataPtr)), m_stride(stride)
{
PlainObjectType::Base::_check_template_params();
+ checkPointer(dataPtr);
}
/** Constructor in the dynamic-size vector case.
@@ -137,6 +138,7 @@ template<typename PlainObjectType, int MapOptions, typename StrideType> class Ma
: Base(cast_to_pointer_type(dataPtr), size), m_stride(stride)
{
PlainObjectType::Base::_check_template_params();
+ checkPointer(dataPtr);
}
/** Constructor in the dynamic-size matrix case.
@@ -151,11 +153,24 @@ template<typename PlainObjectType, int MapOptions, typename StrideType> class Ma
: Base(cast_to_pointer_type(dataPtr), rows, cols), m_stride(stride)
{
PlainObjectType::Base::_check_template_params();
+ checkPointer(dataPtr);
}
EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Map)
protected:
+
+ static void checkPointer(const Scalar* dataPtr)
+ {
+ enum {
+ MightTryToAlignOnScalar = internal::packet_traits<Scalar>::AlignedOnScalar
+ && bool(internal::traits<Map>::Flags&PacketAccessBit)
+ && internal::is_lvalue<Map>::value
+ };
+ eigen_assert(EIGEN_IMPLIES(bool(MightTryToAlignOnScalar), (size_t(dataPtr) % sizeof(Scalar)) == 0)
+ && "input pointer is not aligned on scalar boundary, e.g., use \"EIGEN_ALIGN8 T ptr[N];\" for double or complex<float>");
+ }
+
StrideType m_stride;
};