aboutsummaryrefslogtreecommitdiffhomepage
path: root/unsupported/Eigen/AlignedVector3
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2014-09-18 17:30:21 +0200
committerGravatar Gael Guennebaud <g.gael@free.fr>2014-09-18 17:30:21 +0200
commit060e835ee9f7a3abb9ff3d9f2522027bf2f98efe (patch)
tree9c69a941bd5316ad1d552b7b0e52a0ee5decd639 /unsupported/Eigen/AlignedVector3
parent0ca43f7e9a654e32da0066163a8656415961e266 (diff)
Add evaluator for the experimental AlignedVector3
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;
+};
+
+}
+
//@}
}