00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef PPL_Congruence_System_inlines_hh
00024 #define PPL_Congruence_System_inlines_hh 1
00025
00026 #include "Congruence.defs.hh"
00027
00028 namespace Parma_Polyhedra_Library {
00029
00030 inline Congruence&
00031 Congruence_System::operator[](const dimension_type k) {
00032 return static_cast<Congruence&>(Matrix::operator[](k));
00033 }
00034
00035 inline const Congruence&
00036 Congruence_System::operator[](const dimension_type k) const {
00037 return static_cast<const Congruence&>(Matrix::operator[](k));
00038 }
00039
00040 inline void
00041 Congruence_System::insert(const Congruence& cg) {
00042 insert_verbatim(cg);
00043 static_cast<Congruence&>(operator[](rows.size()-1)).strong_normalize();
00044 assert(OK());
00045 }
00046
00047 inline
00048 Congruence_System::Congruence_System()
00049 : Matrix(0, 2) {
00050 }
00051
00052 inline
00053 Congruence_System::Congruence_System(const Congruence& cg)
00054 : Matrix(0, 2) {
00055 insert(cg);
00056 }
00057
00058 inline
00059 Congruence_System::Congruence_System(const Constraint& c)
00060 : Matrix(0, 2) {
00061 insert(c);
00062 }
00063
00064 inline
00065 Congruence_System::Congruence_System(const Congruence_System& cs)
00066 : Matrix(cs) {
00067 }
00068
00069 inline
00070 Congruence_System::Congruence_System(const dimension_type d)
00071 : Matrix(0, d + 2) {
00072 }
00073
00074 inline
00075 Congruence_System::~Congruence_System() {
00076 }
00077
00078 inline Congruence_System&
00079 Congruence_System::operator=(const Congruence_System& y) {
00080 Matrix::operator=(y);
00081 return *this;
00082 }
00083
00084 inline dimension_type
00085 Congruence_System::max_space_dimension() {
00086 return Matrix::max_num_columns() - 2;
00087 }
00088
00089 inline dimension_type
00090 Congruence_System::space_dimension() const {
00091 return Matrix::num_columns() - 2;
00092 }
00093
00094 inline void
00095 Congruence_System::clear() {
00096 Matrix::clear();
00097 add_zero_columns(2);
00098 }
00099
00100 inline void
00101 Congruence_System::resize_no_copy(const dimension_type new_num_rows,
00102 const dimension_type new_num_columns) {
00103 Matrix::resize_no_copy(new_num_rows, new_num_columns, Row::Flags());
00104 }
00105
00106 inline const Congruence_System&
00107 Congruence_System::zero_dim_empty() {
00108 assert(zero_dim_empty_p != 0);
00109 return *zero_dim_empty_p;
00110 }
00111
00112 inline
00113 Congruence_System::const_iterator::const_iterator()
00114 : i(), csp(0) {
00115 }
00116
00117 inline
00118 Congruence_System::const_iterator::const_iterator(const const_iterator& y)
00119 : i(y.i), csp(y.csp) {
00120 }
00121
00122 inline
00123 Congruence_System::const_iterator::~const_iterator() {
00124 }
00125
00126 inline Congruence_System::const_iterator&
00127 Congruence_System::const_iterator::operator=(const const_iterator& y) {
00128 i = y.i;
00129 csp = y.csp;
00130 return *this;
00131 }
00132
00133 inline const Congruence&
00134 Congruence_System::const_iterator::operator*() const {
00135 return static_cast<const Congruence&>(*i);
00136 }
00137
00138 inline const Congruence*
00139 Congruence_System::const_iterator::operator->() const {
00140 return static_cast<const Congruence*>(i.operator->());
00141 }
00142
00143 inline Congruence_System::const_iterator&
00144 Congruence_System::const_iterator::operator++() {
00145 ++i;
00146 skip_forward();
00147 return *this;
00148 }
00149
00150 inline Congruence_System::const_iterator
00151 Congruence_System::const_iterator::operator++(int) {
00152 const const_iterator tmp = *this;
00153 operator++();
00154 return tmp;
00155 }
00156
00157 inline bool
00158 Congruence_System::const_iterator::operator==(const const_iterator& y) const {
00159 return i == y.i;
00160 }
00161
00162 inline bool
00163 Congruence_System::const_iterator::operator!=(const const_iterator& y) const {
00164 return i != y.i;
00165 }
00166
00167 inline
00168 Congruence_System::const_iterator::
00169 const_iterator(const Matrix::const_iterator& iter,
00170 const Congruence_System& csys)
00171 : i(iter), csp(&csys) {
00172 }
00173
00174 inline Congruence_System::const_iterator
00175 Congruence_System::begin() const {
00176 const_iterator i(Matrix::begin(), *this);
00177 i.skip_forward();
00178 return i;
00179 }
00180
00181 inline Congruence_System::const_iterator
00182 Congruence_System::end() const {
00183 const const_iterator i(Matrix::end(), *this);
00184 return i;
00185 }
00186
00187 inline bool
00188 Congruence_System::empty() const {
00189 return begin() == end();
00190 }
00191
00192 inline void
00193 Congruence_System::swap(Congruence_System& y) {
00194 Matrix::swap(y);
00195 }
00196
00197 inline memory_size_type
00198 Congruence_System::external_memory_in_bytes() const {
00199 return Matrix::external_memory_in_bytes();
00200 }
00201
00202 inline memory_size_type
00203 Congruence_System::total_memory_in_bytes() const {
00204 return Matrix::total_memory_in_bytes();
00205 }
00206
00207 }
00208
00209
00210 namespace std {
00211
00213 inline void
00214 swap(Parma_Polyhedra_Library::Congruence_System& x,
00215 Parma_Polyhedra_Library::Congruence_System& y) {
00216 x.swap(y);
00217 }
00218
00219 }
00220
00221 #endif // !defined(PPL_Congruence_System_inlines_hh)