* 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

@@ -185,7 +185,7 @@ template<typename Derived> class MatrixBase
/** Overloaded for optimal product evaluation */
template<typename Derived1, typename Derived2>
Derived& lazyAssign(const Product<Derived1,Derived2,CacheOptimalProduct>& product);
Derived& lazyAssign(const Product<Derived1,Derived2,CacheFriendlyProduct>& product);
CommaInitializer operator<< (const Scalar& s);
@@ -419,6 +419,13 @@ template<typename Derived> class MatrixBase
const Lazy<Derived> lazy() const;
const Temporary<Derived> temporary() const;
/** \returns number of elements to skip to pass from one row (resp. column) to another
* for a row-major (resp. column-major) matrix.
* Combined with coeffRef() and the compile times flags, it allows a direct access to the data
* of the underlying matrix.
*/
int stride(void) const { return derived()._stride(); }
//@}
/// \name Coefficient-wise operations