24 #ifndef PPL_Polyhedron_simplify_templates_hh
25 #define PPL_Polyhedron_simplify_templates_hh 1
82 template <
typename Linear_System1>
92 while (num_lines_or_equalities < num_rows
93 && sys[num_lines_or_equalities].is_line_or_equality()) {
94 ++num_lines_or_equalities;
103 const size_t max_size
111 bool sys_sorted = sys.is_sorted();
116 for (
dimension_type i = num_lines_or_equalities; i < num_rows; ++i) {
117 if (sat[i].
empty()) {
121 sys.sys.rows[i].set_is_line_or_equality();
123 sys.sys.rows[i].sign_normalize();
126 if (i != num_lines_or_equalities) {
127 sys.sys.rows[i].m_swap(sys.sys.rows[num_lines_or_equalities]);
128 swap(sat[i], sat[num_lines_or_equalities]);
129 swap(num_saturators[i], num_saturators[num_lines_or_equalities]);
131 ++num_lines_or_equalities;
139 num_saturators[i] = num_cols_sat - sat[i].count_ones();
143 sys.set_sorted(sys_sorted);
144 PPL_ASSERT(sys.OK());
160 if (rank < num_lines_or_equalities) {
171 redundant < num_lines_or_equalities
172 && erasing > num_lines_or_equalities;
175 sys.remove_row(redundant);
176 swap(sat[redundant], sat[erasing]);
177 swap(num_saturators[redundant], num_saturators[erasing]);
184 num_rows -= num_lines_or_equalities - rank;
188 sys.remove_trailing_rows(sys.num_rows() - num_rows);
190 PPL_ASSERT(sys.num_rows() == num_rows);
195 num_lines_or_equalities = rank;
232 : sys.space_dimension() + 2;
234 = sys_num_columns - num_lines_or_equalities - 1;
235 for (
dimension_type i = num_lines_or_equalities; i < num_rows; ) {
236 if (num_saturators[i] < min_saturators) {
240 swap(sat[i], sat[num_rows]);
241 swap(num_saturators[i], num_saturators[num_rows]);
249 for (
dimension_type i = num_lines_or_equalities; i < num_rows; ) {
250 bool redundant =
false;
257 for (
dimension_type j = num_lines_or_equalities; j < num_rows; ) {
272 if (subset_or_equal(sat[j], sat[i], strict_subset)) {
289 PPL_ASSERT(sys.num_rows() == num_rows);
290 swap(sat[j], sat[num_rows]);
291 swap(num_saturators[j], num_saturators[num_rows]);
306 PPL_ASSERT(sys.num_rows() == num_rows);
307 swap(sat[i], sat[num_rows]);
308 swap(num_saturators[i], num_saturators[num_rows]);
326 for (
dimension_type i = num_lines_or_equalities; i < num_rows; ++i) {
327 PPL_ASSERT(sys[i].is_ray_or_point_or_inequality());
335 sys.back_substitute(num_lines_or_equalities);
340 return num_lines_or_equalities;
345 #endif // !defined(PPL_Polyhedron_simplify_templates_hh)
void swap(CO_Tree &x, CO_Tree &y)
size_t dimension_type
An unsigned integral type for representing space dimensions.
void swap(Polyhedron &x, Polyhedron &y)
Swaps x with y.
static dimension_type simplify(Linear_System1 &sys, Bit_Matrix &sat)
Uses Gauss' elimination method to simplify the result of conversion().
dimension_type compute_capacity(dimension_type requested_size, dimension_type maximum_size)
Speculative allocation function.
void remove_trailing_rows(dimension_type n)
Removes the last n rows.
dimension_type num_columns() const
Returns the number of columns of *this.
The entire library is confined to this namespace.
static dimension_type * simplify_num_saturators_p
Pointer to an array used by simplify().
static size_t simplify_num_saturators_size
Dimension of an array used by simplify().