From 0fb0307377ad03803feff05c23ce9fc9bc1aa85c Mon Sep 17 00:00:00 2001 From: Benoit Jacob Date: Thu, 7 Jan 2010 22:08:18 -0500 Subject: implement BandMatrix::evalTo (thus avoid infinite recursion when assigning a BandMatrix to a Matrix) --- Eigen/src/Core/BandMatrix.h | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'Eigen/src/Core/BandMatrix.h') diff --git a/Eigen/src/Core/BandMatrix.h b/Eigen/src/Core/BandMatrix.h index 7943e6280..67684eca3 100644 --- a/Eigen/src/Core/BandMatrix.h +++ b/Eigen/src/Core/BandMatrix.h @@ -171,15 +171,21 @@ class BandMatrix : public AnyMatrixBase(m_data, supers()-i, std::max(0,i), 1, diagonalLength(i)); } - DenseMatrixType toDenseMatrix() const + template inline void evalTo(Dest& dst) const { - DenseMatrixType res(rows(),cols()); - res.setZero(); - res.diagonal() = diagonal(); + dst.resize(rows(),cols()); + dst.setZero(); + dst.diagonal() = diagonal(); for (int i=1; i<=supers();++i) - res.diagonal(i) = diagonal(i); + dst.diagonal(i) = diagonal(i); for (int i=1; i<=subs();++i) - res.diagonal(-i) = diagonal(-i); + dst.diagonal(-i) = diagonal(-i); + } + + DenseMatrixType toDenseMatrix() const + { + DenseMatrixType res(rows(),cols()); + evalTo(res); return res; } -- cgit v1.2.3