add a generic mechanism to copy a special matrix to a dense matrix so that

we don't need to add other specialization of MatrixBase::operator=, Matrix::=,
and Matrix::Matrix(...)
This commit is contained in:
Gael Guennebaud
2009-07-07 09:05:20 +02:00
parent 1aea45335f
commit 544888e342
6 changed files with 54 additions and 113 deletions

View File

@@ -50,6 +50,8 @@ class DiagonalBase : public MultiplierBase<Derived>
#endif // not EIGEN_PARSED_BY_DOXYGEN
DenseMatrixType toDenseMatrix() const { return derived(); }
template<typename DenseDerived>
void evalToDense(MatrixBase<DenseDerived> &other) const;
inline const DiagonalVectorType& diagonal() const { return derived().diagonal(); }
inline DiagonalVectorType& diagonal() { return derived().diagonal(); }
@@ -63,12 +65,11 @@ class DiagonalBase : public MultiplierBase<Derived>
};
template<typename Derived>
template<typename DiagonalDerived>
Derived& MatrixBase<Derived>::operator=(const DiagonalBase<DiagonalDerived> &other)
template<typename DenseDerived>
void DiagonalBase<Derived>::evalToDense(MatrixBase<DenseDerived> &other) const
{
setZero();
diagonal() = other.diagonal();
return derived();
other.setZero();
other.diagonal() = diagonal();
}
/** \class DiagonalMatrix