aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen/src/Core
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2010-06-08 22:23:11 +0200
committerGravatar Gael Guennebaud <g.gael@free.fr>2010-06-08 22:23:11 +0200
commit50e43bc75ad3cccc5e9755bac16c5023dd22eba4 (patch)
tree1ba9e1840b56464515db42092bc6c4f783cc131a /Eigen/src/Core
parent684656d41c3b1b87018719a474ec8c7c244fffa2 (diff)
* add Transpositions to PermutationMatrix conversion
* make PartialPivLu uses the Transpositions class
Diffstat (limited to 'Eigen/src/Core')
-rw-r--r--Eigen/src/Core/PermutationMatrix.h31
-rw-r--r--Eigen/src/Core/Transpositions.h9
-rw-r--r--Eigen/src/Core/util/ForwardDeclarations.h2
3 files changed, 33 insertions, 9 deletions
diff --git a/Eigen/src/Core/PermutationMatrix.h b/Eigen/src/Core/PermutationMatrix.h
index d3e36c73a..6ce357091 100644
--- a/Eigen/src/Core/PermutationMatrix.h
+++ b/Eigen/src/Core/PermutationMatrix.h
@@ -47,7 +47,6 @@
*
* \sa class DiagonalMatrix
*/
-template<int SizeAtCompileTime, int MaxSizeAtCompileTime = SizeAtCompileTime> class PermutationMatrix;
template<typename PermutationType, typename MatrixType, int Side, bool Transposed=false> struct ei_permut_matrix_product_retval;
template<int SizeAtCompileTime, int MaxSizeAtCompileTime>
@@ -78,8 +77,12 @@ class PermutationMatrix : public EigenBase<PermutationMatrix<SizeAtCompileTime,
typedef Matrix<int, SizeAtCompileTime, 1, 0, MaxSizeAtCompileTime, 1> IndicesType;
inline PermutationMatrix()
- {
- }
+ {}
+
+ /** Constructs an uninitialized permutation matrix of given size.
+ */
+ inline PermutationMatrix(int size) : m_indices(size)
+ {}
/** Copy constructor. */
template<int OtherSize, int OtherMaxSize>
@@ -103,6 +106,14 @@ class PermutationMatrix : public EigenBase<PermutationMatrix<SizeAtCompileTime,
explicit inline PermutationMatrix(const MatrixBase<Other>& indices) : m_indices(indices)
{}
+ /** Convert the Transpositions \a tr to a permutation matrix */
+ template<int OtherSize, int OtherMaxSize>
+ explicit PermutationMatrix(const Transpositions<OtherSize,OtherMaxSize>& tr)
+ : m_indices(tr.size())
+ {
+ *this = tr;
+ }
+
/** Copies the other permutation into *this */
template<int OtherSize, int OtherMaxSize>
PermutationMatrix& operator=(const PermutationMatrix<OtherSize, OtherMaxSize>& other)
@@ -111,6 +122,15 @@ class PermutationMatrix : public EigenBase<PermutationMatrix<SizeAtCompileTime,
return *this;
}
+ /** Assignment from the Transpositions \a tr */
+ template<int OtherSize, int OtherMaxSize>
+ PermutationMatrix& operator=(const Transpositions<OtherSize,OtherMaxSize>& tr)
+ {
+ setIdentity(tr.size());
+ for(int k=size()-1; k>=0; --k)
+ applyTranspositionOnTheRight(k,tr.coeff(k));
+ }
+
#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=.
@@ -122,11 +142,6 @@ class PermutationMatrix : public EigenBase<PermutationMatrix<SizeAtCompileTime,
}
#endif
- /** Constructs an uninitialized permutation matrix of given size.
- */
- inline PermutationMatrix(int size) : m_indices(size)
- {}
-
/** \returns the number of rows */
inline int rows() const { return m_indices.size(); }
diff --git a/Eigen/src/Core/Transpositions.h b/Eigen/src/Core/Transpositions.h
index 39cb24fd7..b71d46aa6 100644
--- a/Eigen/src/Core/Transpositions.h
+++ b/Eigen/src/Core/Transpositions.h
@@ -52,7 +52,6 @@
*
* \sa class PermutationMatrix
*/
-template<int SizeAtCompileTime, int MaxSizeAtCompileTime = SizeAtCompileTime> class Transpositions;
template<typename TranspositionType, typename MatrixType, int Side, bool Transposed=false> struct ei_transposition_matrix_product_retval;
template<int SizeAtCompileTime, int MaxSizeAtCompileTime>
@@ -108,10 +107,18 @@ class Transpositions
/** \returns the number of transpositions */
inline Index size() const { return m_indices.size(); }
+ /** Direct access to the underlying index vector */
inline const Index& coeff(Index i) const { return m_indices.coeff(i); }
+ /** Direct access to the underlying index vector */
inline Index& coeffRef(Index i) { return m_indices.coeffRef(i); }
+ /** Direct access to the underlying index vector */
inline const Index& operator()(Index i) const { return m_indices(i); }
+ /** Direct access to the underlying index vector */
inline Index& operator()(Index i) { return m_indices(i); }
+ /** Direct access to the underlying index vector */
+ inline const Index& operator[](Index i) const { return m_indices(i); }
+ /** Direct access to the underlying index vector */
+ inline Index& operator[](Index i) { return m_indices(i); }
/** const version of indices(). */
const IndicesType& indices() const { return m_indices; }
diff --git a/Eigen/src/Core/util/ForwardDeclarations.h b/Eigen/src/Core/util/ForwardDeclarations.h
index 5cf62f4c6..6a9a7941c 100644
--- a/Eigen/src/Core/util/ForwardDeclarations.h
+++ b/Eigen/src/Core/util/ForwardDeclarations.h
@@ -77,6 +77,8 @@ template<typename _DiagonalVectorType> class DiagonalWrapper;
template<typename _Scalar, int SizeAtCompileTime, int MaxSizeAtCompileTime=SizeAtCompileTime> class DiagonalMatrix;
template<typename MatrixType, typename DiagonalType, int ProductOrder> class DiagonalProduct;
template<typename MatrixType, int Index> class Diagonal;
+template<int SizeAtCompileTime, int MaxSizeAtCompileTime = SizeAtCompileTime> class PermutationMatrix;
+template<int SizeAtCompileTime, int MaxSizeAtCompileTime = SizeAtCompileTime> class Transpositions;
template<int InnerStrideAtCompileTime, int OuterStrideAtCompileTime> class Stride;
template<typename MatrixType, int MapOptions=Unaligned, typename StrideType = Stride<0,0> > class Map;