aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen/src/Core/BandMatrix.h
diff options
context:
space:
mode:
authorGravatar Benoit Jacob <jacob.benoit.1@gmail.com>2010-01-07 22:08:18 -0500
committerGravatar Benoit Jacob <jacob.benoit.1@gmail.com>2010-01-07 22:08:18 -0500
commit0fb0307377ad03803feff05c23ce9fc9bc1aa85c (patch)
treefd25576fc392e99241fe143875b9a22457591979 /Eigen/src/Core/BandMatrix.h
parent44ed79fc3c4ae0826bcd36164601194d12e32f29 (diff)
implement BandMatrix::evalTo (thus avoid infinite recursion when assigning a BandMatrix to a Matrix)
Diffstat (limited to 'Eigen/src/Core/BandMatrix.h')
-rw-r--r--Eigen/src/Core/BandMatrix.h18
1 files 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<BandMatrix<_Scalar,Rows,Cols,Supers,Subs
return Block<DataType,1,Dynamic>(m_data, supers()-i, std::max(0,i), 1, diagonalLength(i));
}
- DenseMatrixType toDenseMatrix() const
+ template<typename Dest> 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;
}