From 0fb0307377ad03803feff05c23ce9fc9bc1aa85c Mon Sep 17 00:00:00 2001 From: Benoit Jacob Date: Thu, 7 Jan 2010 22:08:18 -0500 Subject: [PATCH] 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(-) 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)); } + template inline void evalTo(Dest& dst) const + { + dst.resize(rows(),cols()); + dst.setZero(); + dst.diagonal() = diagonal(); + for (int i=1; i<=supers();++i) + dst.diagonal(i) = diagonal(i); + for (int i=1; i<=subs();++i) + dst.diagonal(-i) = diagonal(-i); + } + DenseMatrixType toDenseMatrix() const { DenseMatrixType res(rows(),cols()); - res.setZero(); - res.diagonal() = diagonal(); - for (int i=1; i<=supers();++i) - res.diagonal(i) = diagonal(i); - for (int i=1; i<=subs();++i) - res.diagonal(-i) = diagonal(-i); + evalTo(res); return res; }