diff options
author | Gael Guennebaud <g.gael@free.fr> | 2013-12-13 18:06:58 +0100 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2013-12-13 18:06:58 +0100 |
commit | e94fe4cc3e371f37b39f7b5f824cd3acc74af823 (patch) | |
tree | 362223c40e489233f11a13b2a859212822c4bb49 /Eigen/src/Core | |
parent | 2ca0ccd2f2a88e7bae3c502ec2082178506a3d81 (diff) |
fix resizing in noalias for blocks, and make -=/+= use evaluators
Diffstat (limited to 'Eigen/src/Core')
-rw-r--r-- | Eigen/src/Core/CwiseBinaryOp.h | 8 | ||||
-rw-r--r-- | Eigen/src/Core/NoAlias.h | 2 |
2 files changed, 9 insertions, 1 deletions
diff --git a/Eigen/src/Core/CwiseBinaryOp.h b/Eigen/src/Core/CwiseBinaryOp.h index e20daacc8..5624a4718 100644 --- a/Eigen/src/Core/CwiseBinaryOp.h +++ b/Eigen/src/Core/CwiseBinaryOp.h @@ -213,8 +213,12 @@ template<typename OtherDerived> EIGEN_STRONG_INLINE Derived & MatrixBase<Derived>::operator-=(const MatrixBase<OtherDerived> &other) { +#ifdef EIGEN_TEST_EVALUATORS + call_assignment(derived(), other.derived(), internal::sub_assign_op<Scalar>()); +#else SelfCwiseBinaryOp<internal::scalar_difference_op<Scalar>, Derived, OtherDerived> tmp(derived()); tmp = other.derived(); +#endif return derived(); } @@ -227,8 +231,12 @@ template<typename OtherDerived> EIGEN_STRONG_INLINE Derived & MatrixBase<Derived>::operator+=(const MatrixBase<OtherDerived>& other) { +#ifdef EIGEN_TEST_EVALUATORS + call_assignment(derived(), other.derived(), internal::add_assign_op<Scalar>()); +#else SelfCwiseBinaryOp<internal::scalar_sum_op<Scalar>, Derived, OtherDerived> tmp(derived()); tmp = other.derived(); +#endif return derived(); } diff --git a/Eigen/src/Core/NoAlias.h b/Eigen/src/Core/NoAlias.h index 3c9c951f0..412e37258 100644 --- a/Eigen/src/Core/NoAlias.h +++ b/Eigen/src/Core/NoAlias.h @@ -41,7 +41,7 @@ class NoAlias EIGEN_STRONG_INLINE ExpressionType& operator=(const StorageBase<OtherDerived>& other) { // TODO either call resize here or call "call_assignment" through m_expression.lazyAssign() ?? - m_expression.resizeLike(other.derived()); + m_expression.resize(other.derived().rows(), other.derived().cols()); call_assignment(*this, other.derived(), internal::assign_op<Scalar>()); return m_expression; } |