some cleanup

This commit is contained in:
Benoit Jacob 2007-09-09 09:03:42 +00:00
parent 1dab53d300
commit 3b727ef939
3 changed files with 13 additions and 12 deletions

View File

@ -25,7 +25,6 @@ int main(int, char **)
m2.block(2,3,2,3) = m - m;
cout << "Now the 4x4 matrix m2 is:" << endl << m2 << endl;
// here we don't need to use .xpr() because we only need read access.
cout << "The central 2x2 block of m2 is:" << endl << m2.block(1,2,1,2) << endl;
cout << "Row 0 of m2, written as a column vector, is:" << endl << m2.row(0) << endl;
cout << "Column 1 of m2 is:" << endl << m2.col(1) << endl;

View File

@ -247,6 +247,11 @@ template<typename Derived> class MatrixAlias
m_aliased.xpr() = m_tmp;
}
Ref ref()
{
return Ref(*this);
}
Xpr xpr()
{
return Xpr(ref());
@ -270,11 +275,6 @@ template<typename Derived> class MatrixAlias
return m_tmp.write(row, col);
}
Ref ref()
{
return Ref(*this);
}
MatrixXpr<MatrixRow<Xpr> > row(int i) { return xpr().row(i); };
MatrixXpr<MatrixCol<Xpr> > col(int i) { return xpr().col(i); };
MatrixXpr<MatrixMinor<Xpr> > minor(int row, int col) { return xpr().minor(row, col); };
@ -285,21 +285,21 @@ template<typename Derived> class MatrixAlias
}
template<typename XprContent>
void operator=(const MatrixXpr<XprContent> &xpr)
void operator=(const MatrixXpr<XprContent> &other)
{
ref().xpr() = xpr;
xpr() = other;
}
template<typename XprContent>
void operator+=(const MatrixXpr<XprContent> &xpr)
void operator+=(const MatrixXpr<XprContent> &other)
{
ref().xpr() += xpr;
xpr() += other;
}
template<typename XprContent>
void operator-=(const MatrixXpr<XprContent> &xpr)
void operator-=(const MatrixXpr<XprContent> &other)
{
ref().xpr() -= xpr;
xpr() -= other;
}
protected:

View File

@ -70,6 +70,8 @@ template<typename Content> class MatrixXpr
return *this;
}
//special case of the above template operator=. Strangely, g++ 4.1 failed to use
//that template when OtherContent == Content
MatrixXpr& operator=(const MatrixXpr& other)
{
assert(rows() == other.rows() && cols() == other.cols());