Mercurial > hg > octave-nkf
diff liboctave/array/PermMatrix.h @ 19039:aa9ca67f09fb
make all permutation matrices column permutations (bug #42418)
Making all permutation matrices column permutations allows permutation
matrices to be iterated over in column-major order just like any other
matrix.
* PermMatrix.h, PermMatrix.cc (PermMatrix::_colp): Delete member
variable and all uses.
(PermMatrix::transpose): Create new matrix with internal
representation flipped.
(PermMatrix::pos_power): New function.
(PermMatrix::eye): Call the one-argument constructor which already
defaults to the identity matrix.
(PermMatrix::is_col_perm): Unconditionally return true.
(PermMatrix::is_row_perm): Unconditionally return false.
(PermMatrix::data, PermMatrix::fortran_vec, PermMatrix::pvec): Delete.
(PermMatrix::col_perm_vec): New function.
* lu.cc: New test.
* base-lu.cc (base_lu<lu_type>::base_lu): Call transpose in ipvt
initialization.
* find.cc, kron.cc, pr-output.cc, ov-perm.cc, PermMatrix.cc,
PermMatrix.h, Sparse.cc, dMatrix.cc, fMatrix.cc, CmplxQRP.cc,
base-lu.cc, dbleQRP.cc, fCmplxQRP.cc, floatQRP.cc,
Sparse-perm-op-defs.h, mx-op-defs.h: Adapt to PermMatrix changes.
author | David Spies <dnspies@gmail.com> |
---|---|
date | Wed, 18 Jun 2014 19:38:40 -0600 |
parents | 49a5a4be04a1 |
children | 4197fc428c7d |
line wrap: on
line diff
--- a/liboctave/array/PermMatrix.h +++ b/liboctave/array/PermMatrix.h @@ -31,20 +31,21 @@ class OCTAVE_API PermMatrix : protected Array<octave_idx_type> { - public: - PermMatrix (void) : Array<octave_idx_type> (), _colp (false) { } + PermMatrix (void) : Array<octave_idx_type> () { } PermMatrix (octave_idx_type n); - PermMatrix (const Array<octave_idx_type>& p, bool colp = false, - bool check = true); + PermMatrix (const Array<octave_idx_type>& p) GCC_ATTR_DEPRECATED; + + PermMatrix (const Array<octave_idx_type>& p, bool colp, bool check = true); - PermMatrix (const PermMatrix& m) - : Array<octave_idx_type> (m), _colp(m._colp) { } + PermMatrix (const PermMatrix& m) : Array<octave_idx_type> (m) { } - PermMatrix (const idx_vector& idx, bool colp = false, octave_idx_type n = 0); + PermMatrix (const idx_vector& idx) GCC_ATTR_DEPRECATED; + + PermMatrix (const idx_vector& idx, bool colp, octave_idx_type n = 0); octave_idx_type dim1 (void) const { return Array<octave_idx_type>::length (); } @@ -68,15 +69,13 @@ dim_vector dims (void) const { return dim_vector (dim1 (), dim2 ()); } - Array<octave_idx_type> pvec (void) const + const Array<octave_idx_type>& col_perm_vec (void) const { return *this; } octave_idx_type elem (octave_idx_type i, octave_idx_type j) const { - return (_colp - ? ((Array<octave_idx_type>::elem (j) == i) ? 1 : 0) - : ((Array<octave_idx_type>::elem (i) == j) ? 1 : 0)); + return (Array<octave_idx_type>::elem (j) == i) ? 1 : 0; } octave_idx_type @@ -102,20 +101,8 @@ // Efficient integer power of a permutation. PermMatrix power (octave_idx_type n) const; - bool is_col_perm (void) const { return _colp; } - bool is_row_perm (void) const { return !_colp; } - - friend OCTAVE_API PermMatrix operator *(const PermMatrix& a, - const PermMatrix& b); - - const octave_idx_type *data (void) const - { return Array<octave_idx_type>::data (); } - - const octave_idx_type *fortran_vec (void) const - { return Array<octave_idx_type>::fortran_vec (); } - - octave_idx_type *fortran_vec (void) - { return Array<octave_idx_type>::fortran_vec (); } + bool is_col_perm (void) const { return true; } + bool is_row_perm (void) const { return false; } void print_info (std::ostream& os, const std::string& prefix) const { Array<octave_idx_type>::print_info (os, prefix); } @@ -123,12 +110,17 @@ static PermMatrix eye (octave_idx_type n); private: - bool _colp; + + PermMatrix pos_power (octave_idx_type m) const; + + void setup (const Array<octave_idx_type>& p, bool colp, bool check); + + void setup (const idx_vector& idx, bool colp, octave_idx_type n); }; // Multiplying permutations together. PermMatrix OCTAVE_API -operator *(const PermMatrix& a, const PermMatrix& b); +operator * (const PermMatrix& a, const PermMatrix& b); #endif