aboutsummaryrefslogtreecommitdiffhomepage
path: root/unsupported/Eigen/AlignedVector3
diff options
context:
space:
mode:
Diffstat (limited to 'unsupported/Eigen/AlignedVector3')
-rw-r--r--unsupported/Eigen/AlignedVector326
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;
+};
+
+}
+
//@}
}