diff options
author | Gael Guennebaud <g.gael@free.fr> | 2016-12-14 17:03:13 +0100 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2016-12-14 17:03:13 +0100 |
commit | 98d74582751f65af99f94e9234b0817fa79f7fb9 (patch) | |
tree | 4eb26dd1cb5de71641816e074e7176e3fc5f80c1 /Eigen/src/SparseCore | |
parent | c817ce3ba3f5fcc9cc52e761df2b4f4d20b0d336 (diff) |
bug #1359: fix sparse /=scalar and *=scalar implementation.
InnerIterators must be obtained from an evaluator.
Diffstat (limited to 'Eigen/src/SparseCore')
-rw-r--r-- | Eigen/src/SparseCore/SparseCwiseUnaryOp.h | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/Eigen/src/SparseCore/SparseCwiseUnaryOp.h b/Eigen/src/SparseCore/SparseCwiseUnaryOp.h index 28f221437..ea7973790 100644 --- a/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +++ b/Eigen/src/SparseCore/SparseCwiseUnaryOp.h @@ -123,8 +123,10 @@ template<typename Derived> EIGEN_STRONG_INLINE Derived& SparseMatrixBase<Derived>::operator*=(const Scalar& other) { + typedef typename internal::evaluator<Derived>::InnerIterator EvalIterator; + internal::evaluator<Derived> thisEval(derived()); for (Index j=0; j<outerSize(); ++j) - for (typename Derived::InnerIterator i(derived(),j); i; ++i) + for (EvalIterator i(thisEval,j); i; ++i) i.valueRef() *= other; return derived(); } @@ -133,8 +135,10 @@ template<typename Derived> EIGEN_STRONG_INLINE Derived& SparseMatrixBase<Derived>::operator/=(const Scalar& other) { + typedef typename internal::evaluator<Derived>::InnerIterator EvalIterator; + internal::evaluator<Derived> thisEval(derived()); for (Index j=0; j<outerSize(); ++j) - for (typename Derived::InnerIterator i(derived(),j); i; ++i) + for (EvalIterator i(thisEval,j); i; ++i) i.valueRef() /= other; return derived(); } |