Fix inner-stride of AlignedVector3

This commit is contained in:
Gael Guennebaud 2014-09-18 22:46:46 +02:00
parent 2ae20d558b
commit e70506dd8f
2 changed files with 9 additions and 11 deletions

View File

@ -60,6 +60,7 @@ template<typename _Scalar> class AlignedVector3
Scalar* data() { return m_coeffs.data(); } Scalar* data() { return m_coeffs.data(); }
const Scalar* data() const { return m_coeffs.data(); } const Scalar* data() const { return m_coeffs.data(); }
Index innerStride() const { return 1; }
inline const Scalar& coeff(Index row, Index col) const inline const Scalar& coeff(Index row, Index col) const
{ return m_coeffs.coeff(row, col); } { return m_coeffs.coeff(row, col); }
@ -184,27 +185,24 @@ template<typename _Scalar> class AlignedVector3
{ {
return m_coeffs.template head<3>().isApprox(other,eps); return m_coeffs.template head<3>().isApprox(other,eps);
} }
CoeffType& coeffs() { return m_coeffs; }
const CoeffType& coeffs() const { return m_coeffs; }
}; };
namespace internal { namespace internal {
template<typename Scalar> template<typename Scalar>
struct evaluator<AlignedVector3<Scalar> > struct evaluator<AlignedVector3<Scalar> >
: evaluator<Map<const Matrix<Scalar,3,1>,Aligned> >::type : evaluator<Matrix<Scalar,4,1> >::type
{ {
typedef AlignedVector3<Scalar> XprType; typedef AlignedVector3<Scalar> XprType;
typedef Map<const Matrix<Scalar,3,1>,Aligned> MapType; typedef typename evaluator<Matrix<Scalar,4,1> >::type Base;
typedef typename evaluator<MapType>::type Base;
typedef evaluator type; typedef evaluator type;
typedef evaluator nestedType; typedef evaluator nestedType;
evaluator(const XprType &m) : Base(MapType(m.data())), m_map(m.data()) evaluator(const XprType &m) : Base(m.coeffs()) {}
{
::new (static_cast<Base*>(this)) Base(m_map);
}
const MapType m_map;
}; };
} }

View File

@ -29,8 +29,8 @@ endif(ADOLC_FOUND)
ei_add_test(NonLinearOptimization) ei_add_test(NonLinearOptimization)
ei_add_test(NumericalDiff) ei_add_test(NumericalDiff)
# TODO ei_add_test(autodiff_scalar) ei_add_test(autodiff_scalar)
# TODO ei_add_test(autodiff) ei_add_test(autodiff)
if (NOT CMAKE_CXX_COMPILER MATCHES "clang\\+\\+$") if (NOT CMAKE_CXX_COMPILER MATCHES "clang\\+\\+$")
ei_add_test(BVH) ei_add_test(BVH)