implement BandMatrix::evalTo (thus avoid infinite recursion when assigning a BandMatrix to a Matrix)

This commit is contained in:
Benoit Jacob 2010-01-07 22:08:18 -05:00
parent 44ed79fc3c
commit 0fb0307377

View File

@ -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)); return Block<DataType,1,Dynamic>(m_data, supers()-i, std::max(0,i), 1, diagonalLength(i));
} }
template<typename Dest> 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 toDenseMatrix() const
{ {
DenseMatrixType res(rows(),cols()); DenseMatrixType res(rows(),cols());
res.setZero(); evalTo(res);
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);
return res; return res;
} }