CMR  1.3.0
matroid_transposed.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include "matroid.hpp"
4 
5 namespace tu
6 {
7 
12  template <typename MatroidType>
14  {
15  public:
16  typedef MatroidType matroid_type;
17  typedef typename MatroidType::size_type size_type;
18  typedef typename MatroidType::name_type name_type;
19  typedef typename boost::mpl::if_ <boost::is_const <MatroidType>, typename MatroidType::const_reference_type, typename MatroidType::reference_type>::type
24 
31  matroid_transposed(MatroidType& matroid) :
32  _matroid(matroid)
33  {
34 
35  }
36 
41  inline size_type size1() const
42  {
43  return _matroid.size2();
44  }
45 
50  inline size_type size2() const
51  {
52  return _matroid.size1();
53  }
54 
61  {
62  return _matroid.name2(index);
63  }
64 
70  inline const_reference_type name1(size_type index) const
71  {
72  return _matroid.name2(index);
73  }
74 
81  {
82  return _matroid.name1(index);
83  }
84 
90  inline const_reference_type name2(size_type index) const
91  {
92  return _matroid.name1(index);
93  }
94 
99  inline matroid_type& data()
100  {
101  return _matroid;
102  }
103 
104  private:
105  MatroidType& _matroid;
106 
107  };
108 
116  template <typename MatroidType>
118  {
120  }
121 
130  template <typename MatroidType>
131  inline void matroid_permute1(matroid_transposed <MatroidType>& matroid, size_t index1, size_t index2)
132  {
133  matroid_permute2(matroid.data(), index1, index2);
134  }
135 
144  template <typename MatroidType>
145  inline void matroid_permute2(matroid_transposed <MatroidType>& matroid, size_t index1, size_t index2)
146  {
147  matroid_permute1(matroid.data(), index1, index2);
148  }
149 
158  template <typename MatroidType>
160  {
161  matroid_binary_pivot(matroid.data(), j, i);
162  }
163 
164 } /* namespace tu */
Definition: matroid_transposed.hpp:14
const name_type & const_reference_type
Definition: matroid_transposed.hpp:21
MatroidType::size_type size_type
Definition: matroid_transposed.hpp:17
reference_type name2(size_type index)
Definition: matroid_transposed.hpp:80
boost::mpl::if_< boost::is_const< MatroidType >, typename MatroidType::const_reference_type, typename MatroidType::reference_type >::type reference_type
Definition: matroid_transposed.hpp:20
size_type size1() const
Definition: matroid_transposed.hpp:41
const_reference_type name2(size_type index) const
Definition: matroid_transposed.hpp:90
MatroidType matroid_type
Definition: matroid_transposed.hpp:16
const_reference_type name1(size_type index) const
Definition: matroid_transposed.hpp:70
matroid_type & data()
Definition: matroid_transposed.hpp:99
size_type size2() const
Definition: matroid_transposed.hpp:50
reference_type name1(size_type index)
Definition: matroid_transposed.hpp:60
MatroidType::name_type name_type
Definition: matroid_transposed.hpp:18
matroid_transposed(MatroidType &matroid)
Definition: matroid_transposed.hpp:31
matroid_transposed< name_type > self_type
Definition: matroid_transposed.hpp:22
permutation permutation_type
Definition: matroid_transposed.hpp:23
Definition: matroid.hpp:22
Definition: permutations.hpp:44
Definition: algorithm.hpp:14
void matroid_permute1(matroid< NameType > &matroid, size_t index1, size_t index2)
Definition: matroid.hpp:162
matroid_transposed< MatroidType > make_transposed_matroid(MatroidType &matroid)
Definition: matroid_transposed.hpp:117
void matroid_permute2(matroid< NameType > &matroid, size_t index1, size_t index2)
Definition: matroid.hpp:192
void matroid_binary_pivot(matroid< NameType > &matroid, size_t i, size_t j)
Definition: matroid.hpp:222