diff options
Diffstat (limited to 'unsupported/Eigen/AlignedVector3')
-rw-r--r-- | unsupported/Eigen/AlignedVector3 | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/unsupported/Eigen/AlignedVector3 b/unsupported/Eigen/AlignedVector3 index 7b45e6cce..cd5f49edb 100644 --- a/unsupported/Eigen/AlignedVector3 +++ b/unsupported/Eigen/AlignedVector3 @@ -57,6 +57,9 @@ template<typename _Scalar> class AlignedVector3 inline Index rows() const { return 3; } inline Index cols() const { return 1; } + + Scalar* data() { return m_coeffs.data(); } + const Scalar* data() const { return m_coeffs.data(); } inline const Scalar& coeff(Index row, Index col) const { return m_coeffs.coeff(row, col); } @@ -183,6 +186,29 @@ template<typename _Scalar> class AlignedVector3 } }; +namespace internal { + +template<typename Scalar> +struct evaluator<AlignedVector3<Scalar> > + : evaluator<Map<const Matrix<Scalar,3,1>,Aligned> >::type +{ + typedef AlignedVector3<Scalar> XprType; + typedef Map<const Matrix<Scalar,3,1>,Aligned> MapType; + typedef typename evaluator<MapType>::type Base; + + typedef evaluator type; + typedef evaluator nestedType; + + evaluator(const XprType &m) : Base(MapType(m.data())), m_map(m.data()) + { + ::new (static_cast<Base*>(this)) Base(m_map); + } + + const MapType m_map; +}; + +} + //@} } |