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
00031 Congruence_System::Congruence_System()
00032 : Matrix(0, 2) {
00033 }
00034
00035 inline
00036 Congruence_System::Congruence_System(const Congruence& cg)
00037 : Matrix(0, 2) {
00038 insert(cg);
00039 }
00040
00041 inline
00042 Congruence_System::Congruence_System(const Constraint& c)
00043 : Matrix(0, 2) {
00044 insert(c);
00045 }
00046
00047 inline
00048 Congruence_System::Congruence_System(const Congruence_System& cs)
00049 : Matrix(cs) {
00050 }
00051
00052 inline
00053 Congruence_System::~Congruence_System() {
00054 }
00055
00056 inline Congruence_System&
00057 Congruence_System::operator=(const Congruence_System& y) {
00058 Matrix::operator=(y);
00059 return *this;
00060 }
00061
00062 inline Congruence&
00063 Congruence_System::operator[](const dimension_type k) {
00064 return static_cast<Congruence&>(Matrix::operator[](k));
00065 }
00066
00067 inline const Congruence&
00068 Congruence_System::operator[](const dimension_type k) const {
00069 return static_cast<const Congruence&>(Matrix::operator[](k));
00070 }
00071
00072 inline dimension_type
00073 Congruence_System::max_space_dimension() {
00074 return Matrix::max_num_columns() - 2;
00075 }
00076
00077 inline dimension_type
00078 Congruence_System::space_dimension() const {
00079 return Matrix::num_columns() - 2;
00080 }
00081
00082 inline void
00083 Congruence_System::clear() {
00084 Matrix::clear();
00085 add_zero_columns(2);
00086 }
00087
00088 inline void
00089 Congruence_System::insert(const Congruence& cg) {
00090 insert_verbatim(cg);
00091 static_cast<Congruence&>(operator[](rows.size()-1)).strong_normalize();
00092 assert(OK());
00093 }
00094
00095 inline void
00096 Congruence_System::resize_no_copy(const dimension_type new_n_rows,
00097 const dimension_type new_n_columns) {
00098 Matrix::resize_no_copy(new_n_rows, new_n_columns, Row::Flags());
00099 }
00100
00101 inline const Congruence_System&
00102 Congruence_System::zero_dim_empty() {
00103 static const Congruence_System zdf(Congruence::zero_dim_false());
00104 return zdf;
00105 }
00106
00107 inline
00108 Congruence_System::const_iterator::const_iterator()
00109 : i(), csp(0) {
00110 }
00111
00112 inline
00113 Congruence_System::const_iterator::const_iterator(const const_iterator& y)
00114 : i(y.i), csp(y.csp) {
00115 }
00116
00117 inline
00118 Congruence_System::const_iterator::~const_iterator() {
00119 }
00120
00121 inline Congruence_System::const_iterator&
00122 Congruence_System::const_iterator::operator=(const const_iterator& y) {
00123 i = y.i;
00124 csp = y.csp;
00125 return *this;
00126 }
00127
00128 inline const Congruence&
00129 Congruence_System::const_iterator::operator*() const {
00130 return static_cast<const Congruence&>(*i);
00131 }
00132
00133 inline const Congruence*
00134 Congruence_System::const_iterator::operator->() const {
00135 return static_cast<const Congruence*>(i.operator->());
00136 }
00137
00138 inline Congruence_System::const_iterator&
00139 Congruence_System::const_iterator::operator++() {
00140 ++i;
00141 skip_forward();
00142 return *this;
00143 }
00144
00145 inline Congruence_System::const_iterator
00146 Congruence_System::const_iterator::operator++(int) {
00147 const const_iterator tmp = *this;
00148 operator++();
00149 return tmp;
00150 }
00151
00152 inline bool
00153 Congruence_System::const_iterator::operator==(const const_iterator& y) const {
00154 return i == y.i;
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
00163 Congruence_System::const_iterator::
00164 const_iterator(const Matrix::const_iterator& iter,
00165 const Congruence_System& csys)
00166 : i(iter), csp(&csys) {
00167 }
00168
00169 inline Congruence_System::const_iterator
00170 Congruence_System::begin() const {
00171 const_iterator i(Matrix::begin(), *this);
00172 i.skip_forward();
00173 return i;
00174 }
00175
00176 inline Congruence_System::const_iterator
00177 Congruence_System::end() const {
00178 const const_iterator i(Matrix::end(), *this);
00179 return i;
00180 }
00181
00182 inline void
00183 Congruence_System::swap(Congruence_System& y) {
00184 Matrix::swap(y);
00185 }
00186
00187 inline memory_size_type
00188 Congruence_System::external_memory_in_bytes() const {
00189 return Matrix::external_memory_in_bytes();
00190 }
00191
00192 inline memory_size_type
00193 Congruence_System::total_memory_in_bytes() const {
00194 return Matrix::total_memory_in_bytes();
00195 }
00196
00197 }
00198
00199
00200 namespace std {
00201
00203 inline void
00204 swap(Parma_Polyhedra_Library::Congruence_System& x,
00205 Parma_Polyhedra_Library::Congruence_System& y) {
00206 x.swap(y);
00207 }
00208
00209 }
00210
00211 #endif // !defined(PPL_Congruence_System_inlines_hh)