* Draft of a eigenvalues solver

(does not support complex and does not re-use the QR decomposition)

* Rewrite the cache friendly product to have only one instance per scalar type !
  This significantly speeds up compilation time and reduces executable size.
  The current drawback is that some trivial expressions might be
  evaluated like conjugate or negate.

* Renamed "cache optimal" to "cache friendly"

* Added the ability to directly access matrix data of some expressions via:
  - the stride()/_stride() methods
  - DirectAccessBit flag (replace ReferencableBit)
This commit is contained in:
Gael Guennebaud
2008-05-12 10:23:09 +00:00
parent dca416cace
commit 45cda6704a
15 changed files with 1286 additions and 364 deletions

View File

@@ -71,7 +71,7 @@ struct ei_traits<Block<MatrixType, BlockRows, BlockCols> >
|| (ColsAtCompileTime != Dynamic && MatrixType::ColsAtCompileTime == Dynamic))
? ~LargeBit
: ~(unsigned int)0,
Flags = MatrixType::Flags & (DefaultLostFlagMask | VectorizableBit | ReferencableBit) & FlagsMaskLargeBit,
Flags = MatrixType::Flags & (DefaultLostFlagMask | VectorizableBit | DirectAccessBit) & FlagsMaskLargeBit,
CoeffReadCost = MatrixType::CoeffReadCost
};
};
@@ -132,6 +132,8 @@ template<typename MatrixType, int BlockRows, int BlockCols> class Block
int _rows() const { return m_blockRows.value(); }
int _cols() const { return m_blockCols.value(); }
int _stride(void) const { return m_matrix.stride(); }
Scalar& _coeffRef(int row, int col)
{
return m_matrix.const_cast_derived()