From 4a8888dfbc8feee9cb2479eb708b95e16a184e7e Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Fri, 19 Jun 2015 14:10:44 +0200 Subject: Improbe compatibility of Transpositions and evaluators --- Eigen/src/Core/Transpositions.h | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) (limited to 'Eigen/src/Core/Transpositions.h') diff --git a/Eigen/src/Core/Transpositions.h b/Eigen/src/Core/Transpositions.h index dad4f56c9..65447745f 100644 --- a/Eigen/src/Core/Transpositions.h +++ b/Eigen/src/Core/Transpositions.h @@ -62,7 +62,7 @@ class TranspositionsBase indices() = other.indices(); return derived(); } - + #ifndef EIGEN_PARSED_BY_DOXYGEN /** This is a special case of the templated operator=. Its purpose is to * prevent a default operator= from hiding the templated operator=. @@ -75,7 +75,11 @@ class TranspositionsBase #endif /** \returns the number of transpositions */ - inline Index size() const { return indices().size(); } + Index size() const { return indices().size(); } + /** \returns the number of rows of the equivalent permutation matrix */ + Index rows() const { return indices().size(); } + /** \returns the number of columns of the equivalent permutation matrix */ + Index cols() const { return indices().size(); } /** Direct access to the underlying index vector */ inline const StorageIndex& coeff(Index i) const { return indices().coeff(i); } @@ -143,9 +147,10 @@ class TranspositionsBase namespace internal { template struct traits > + : traits > { typedef Matrix<_StorageIndex, SizeAtCompileTime, 1, 0, MaxSizeAtCompileTime, 1> IndicesType; - typedef _StorageIndex StorageIndex; + typedef TranspositionsStorage StorageKind; }; } @@ -214,9 +219,11 @@ class Transpositions : public TranspositionsBase struct traits,_PacketAccess> > + : traits > { typedef Map, _PacketAccess> IndicesType; typedef _StorageIndex StorageIndex; + typedef TranspositionsStorage StorageKind; }; } @@ -271,9 +278,9 @@ class Map,P namespace internal { template struct traits > + : traits > { - typedef typename _IndicesType::Scalar StorageIndex; - typedef _IndicesType IndicesType; + typedef TranspositionsStorage StorageKind; }; } @@ -347,8 +354,16 @@ operator*(const TranspositionsBase &transpositions, (transpositions.derived(), matrix.derived()); } +// Template partial specialization for transposed/inverse transpositions -/* Template partial specialization for transposed/inverse transpositions */ +namespace internal { + +template +struct traits > > + : traits +{}; + +} // end namespace internal template class Transpose > @@ -359,7 +374,9 @@ class Transpose > explicit Transpose(const TranspositionType& t) : m_transpositions(t) {} - inline int size() const { return m_transpositions.size(); } + Index size() const { return m_transpositions.size(); } + Index rows() const { return m_transpositions.size(); } + Index cols() const { return m_transpositions.size(); } /** \returns the \a matrix with the inverse transpositions applied to the columns. */ @@ -378,6 +395,8 @@ class Transpose > { return Product(*this, matrix.derived()); } + + const TranspositionType& nestedExpression() const { return m_transpositions; } protected: const TranspositionType& m_transpositions; -- cgit v1.2.3