PPL  1.2
Parma_Polyhedra_Library::Powerset< D > Class Template Reference

The powerset construction on a base-level domain. More...

#include <Powerset_defs.hh>

Inheritance diagram for Parma_Polyhedra_Library::Powerset< D >:

Public Types

typedef Sequence::size_type size_type
 
typedef Sequence::value_type value_type
 
typedef iterator_to_const< Sequenceiterator
 Alias for a read-only bidirectional iterator on the disjuncts of a Powerset element. More...
 
typedef const_iterator_to_const< Sequenceconst_iterator
 A bidirectional const_iterator on the disjuncts of a Powerset element. More...
 
typedef std::reverse_iterator< iteratorreverse_iterator
 The reverse iterator type built from Powerset::iterator. More...
 
typedef std::reverse_iterator< const_iteratorconst_reverse_iterator
 The reverse iterator type built from Powerset::const_iterator. More...
 

Public Member Functions

Constructors and Destructor
 Powerset ()
 Default constructor: builds the bottom of the powerset constraint system (i.e., the empty powerset). More...
 
 Powerset (const Powerset &y)
 Copy constructor. More...
 
 Powerset (const D &d)
 If d is not bottom, builds a powerset containing only d. Builds the empty powerset otherwise. More...
 
 ~Powerset ()
 Destructor. More...
 
Member Functions that Do Not Modify the Powerset Object
bool definitely_entails (const Powerset &y) const
 Returns true if *this definitely entails y. Returns false if *this may not entail y (i.e., if *this does not entail y or if entailment could not be decided). More...
 
bool is_top () const
 Returns true if and only if *this is the top element of the powerset constraint system (i.e., it represents the universe). More...
 
bool is_bottom () const
 Returns true if and only if *this is the bottom element of the powerset constraint system (i.e., it represents the empty set). More...
 
memory_size_type total_memory_in_bytes () const
 Returns a lower bound to the total size in bytes of the memory occupied by *this. More...
 
memory_size_type external_memory_in_bytes () const
 Returns a lower bound to the size in bytes of the memory managed by *this. More...
 
bool OK (bool disallow_bottom=false) const
 Checks if all the invariants are satisfied. More...
 
Member Functions for the Direct Manipulation of Disjuncts
void omega_reduce () const
 Drops from the sequence of disjuncts in *this all the non-maximal elements so that *this is non-redundant. More...
 
size_type size () const
 Returns the number of disjuncts. More...
 
bool empty () const
 Returns true if and only if there are no disjuncts in *this. More...
 
iterator begin ()
 Returns an iterator pointing to the first disjunct, if *this is not empty; otherwise, returns the past-the-end iterator. More...
 
iterator end ()
 Returns the past-the-end iterator. More...
 
const_iterator begin () const
 Returns a const_iterator pointing to the first disjunct, if *this is not empty; otherwise, returns the past-the-end const_iterator. More...
 
const_iterator end () const
 Returns the past-the-end const_iterator. More...
 
reverse_iterator rbegin ()
 Returns a reverse_iterator pointing to the last disjunct, if *this is not empty; otherwise, returns the before-the-start reverse_iterator. More...
 
reverse_iterator rend ()
 Returns the before-the-start reverse_iterator. More...
 
const_reverse_iterator rbegin () const
 Returns a const_reverse_iterator pointing to the last disjunct, if *this is not empty; otherwise, returns the before-the-start const_reverse_iterator. More...
 
const_reverse_iterator rend () const
 Returns the before-the-start const_reverse_iterator. More...
 
void add_disjunct (const D &d)
 Adds to *this the disjunct d. More...
 
iterator drop_disjunct (iterator position)
 Drops the disjunct in *this pointed to by position, returning an iterator to the disjunct following position. More...
 
void drop_disjuncts (iterator first, iterator last)
 Drops all the disjuncts from first to last (excluded). More...
 
void clear ()
 Drops all the disjuncts, making *this an empty powerset. More...
 
Member Functions that May Modify the Powerset Object
Powersetoperator= (const Powerset &y)
 The assignment operator. More...
 
void m_swap (Powerset &y)
 Swaps *this with y. More...
 
void least_upper_bound_assign (const Powerset &y)
 Assigns to *this the least upper bound of *this and y. More...
 
void upper_bound_assign (const Powerset &y)
 Assigns to *this an upper bound of *this and y. More...
 
bool upper_bound_assign_if_exact (const Powerset &y)
 Assigns to *this the least upper bound of *this and y and returns true. More...
 
void meet_assign (const Powerset &y)
 Assigns to *this the meet of *this and y. More...
 
void collapse ()
 If *this is not empty (i.e., it is not the bottom element), it is reduced to a singleton obtained by computing an upper-bound of all the disjuncts. More...
 

Protected Types

typedef std::list< D > Sequence
 A powerset is implemented as a sequence of elements. More...
 
typedef Sequence::iterator Sequence_iterator
 Alias for the low-level iterator on the disjuncts. More...
 
typedef Sequence::const_iterator Sequence_const_iterator
 Alias for the low-level const_iterator on the disjuncts. More...
 

Protected Member Functions

bool is_omega_reduced () const
 Returns true if and only if *this does not contain non-maximal elements. More...
 
void collapse (unsigned max_disjuncts)
 Upon return, *this will contain at most max_disjuncts elements; the set of disjuncts in positions greater than or equal to max_disjuncts, will be replaced at that position by their upper-bound. More...
 
iterator add_non_bottom_disjunct_preserve_reduction (const D &d, iterator first, iterator last)
 Adds to *this the disjunct d, assuming d is not the bottom element and ensuring partial Omega-reduction. More...
 
void add_non_bottom_disjunct_preserve_reduction (const D &d)
 Adds to *this the disjunct d, assuming d is not the bottom element and preserving Omega-reduction. More...
 
template<typename Binary_Operator_Assign >
void pairwise_apply_assign (const Powerset &y, Binary_Operator_Assign op_assign)
 Assigns to *this the result of applying op_assign pairwise to the elements in *this and y. More...
 

Protected Attributes

Sequence sequence
 The sequence container holding powerset's elements. More...
 
bool reduced
 If true, *this is Omega-reduced. More...
 

Private Member Functions

bool check_omega_reduced () const
 Does the hard work of checking whether *this contains non-maximal elements and returns true if and only if it does not. More...
 
void collapse (Sequence_iterator sink)
 Replaces the disjunct *sink by an upper bound of itself and all the disjuncts following it. More...
 

Related Functions

(Note that these are not member functions.)

template<typename D >
void swap (Powerset< D > &x, Powerset< D > &y)
 Swaps x with y. More...
 
template<typename D >
bool operator== (const Powerset< D > &x, const Powerset< D > &y)
 Returns true if and only if x and y are equivalent. More...
 
template<typename D >
bool operator!= (const Powerset< D > &x, const Powerset< D > &y)
 Returns true if and only if x and y are not equivalent. More...
 
template<typename D >
std::ostream & operator<< (std::ostream &s, const Powerset< D > &x)
 Output operator. More...
 
template<typename D >
bool operator!= (const Powerset< D > &x, const Powerset< D > &y)
 
template<typename D >
void swap (Powerset< D > &x, Powerset< D > &y)
 
template<typename D >
bool operator== (const Powerset< D > &x, const Powerset< D > &y)
 
template<typename D >
std::ostream & operator<< (std::ostream &s, const Powerset< D > &x)
 

Detailed Description

template<typename D>
class Parma_Polyhedra_Library::Powerset< D >

The powerset construction on a base-level domain.

This class offers a generic implementation of a powerset domain as defined in Section The Powerset Construction.

Besides invoking the available methods on the disjuncts of a Powerset, this class also provides bidirectional iterators that allow for a direct inspection of these disjuncts. For a consistent handling of Omega-reduction, all the iterators are read-only, meaning that the disjuncts cannot be overwritten. Rather, by using the class iterator, it is possible to drop one or more disjuncts (possibly so as to later add back modified versions). As an example of iterator usage, the following template function drops from powerset ps all the disjuncts that would have become redundant by the addition of an external element d.

template <typename D>
void
drop_subsumed(Powerset<D>& ps, const D& d) {
for (typename Powerset<D>::iterator i = ps.begin(),
ps_end = ps.end(), i != ps_end; )
if (i->definitely_entails(d))
i = ps.drop_disjunct(i);
else
++i;
}

The template class D must provide the following methods.

Returns a lower bound on the total size in bytes of the memory occupied by the instance of D.

bool is_top() const

Returns true if and only if the instance of D is the top element of the domain.

Returns true if and only if the instance of D is the bottom element of the domain.

bool definitely_entails(const D& y) const

Returns true if the instance of D definitely entails y. Returns false if the instance may not entail y (i.e., if the instance does not entail y or if entailment could not be decided).

void upper_bound_assign(const D& y)

Assigns to the instance of D an upper bound of the instance and y.

void meet_assign(const D& y)

Assigns to the instance of D the meet of the instance and y.

bool OK() const

Returns true if the instance of D is in a consistent state, else returns false.

The following operators on the template class D must be defined.

operator<<(std::ostream& s, const D& x)

Writes a textual representation of the instance of D on s.

operator==(const D& x, const D& y)

Returns true if and only if x and y are equivalent D's.

operator!=(const D& x, const D& y)

Returns true if and only if x and y are different D's.

Definition at line 152 of file Powerset_defs.hh.

Member Typedef Documentation

A bidirectional const_iterator on the disjuncts of a Powerset element.

Definition at line 258 of file Powerset_defs.hh.

template<typename D>
typedef std::reverse_iterator<const_iterator> Parma_Polyhedra_Library::Powerset< D >::const_reverse_iterator

The reverse iterator type built from Powerset::const_iterator.

Definition at line 264 of file Powerset_defs.hh.

Alias for a read-only bidirectional iterator on the disjuncts of a Powerset element.

By using this iterator type, the disjuncts cannot be overwritten, but they can be removed using methods drop_disjunct(iterator position) and drop_disjuncts(iterator first, iterator last), while still ensuring a correct handling of Omega-reduction.

Definition at line 255 of file Powerset_defs.hh.

template<typename D>
typedef std::reverse_iterator<iterator> Parma_Polyhedra_Library::Powerset< D >::reverse_iterator

The reverse iterator type built from Powerset::iterator.

Definition at line 261 of file Powerset_defs.hh.

template<typename D>
typedef std::list<D> Parma_Polyhedra_Library::Powerset< D >::Sequence
protected

A powerset is implemented as a sequence of elements.

The particular sequence employed must support efficient deletion in any position and efficient back insertion.

Definition at line 226 of file Powerset_defs.hh.

template<typename D>
typedef Sequence::const_iterator Parma_Polyhedra_Library::Powerset< D >::Sequence_const_iterator
protected

Alias for the low-level const_iterator on the disjuncts.

Definition at line 232 of file Powerset_defs.hh.

template<typename D>
typedef Sequence::iterator Parma_Polyhedra_Library::Powerset< D >::Sequence_iterator
protected

Alias for the low-level iterator on the disjuncts.

Definition at line 229 of file Powerset_defs.hh.

template<typename D>
typedef Sequence::size_type Parma_Polyhedra_Library::Powerset< D >::size_type

Definition at line 242 of file Powerset_defs.hh.

template<typename D>
typedef Sequence::value_type Parma_Polyhedra_Library::Powerset< D >::value_type

Definition at line 243 of file Powerset_defs.hh.

Constructor & Destructor Documentation

template<typename D >
Parma_Polyhedra_Library::Powerset< D >::Powerset ( )
inline

Default constructor: builds the bottom of the powerset constraint system (i.e., the empty powerset).

Definition at line 133 of file Powerset_inlines.hh.

134  : sequence(), reduced(true) {
135 }
Sequence sequence
The sequence container holding powerset's elements.
bool reduced
If true, *this is Omega-reduced.
template<typename D >
Parma_Polyhedra_Library::Powerset< D >::Powerset ( const Powerset< D > &  y)
inline

Copy constructor.

Definition at line 112 of file Powerset_inlines.hh.

113  : sequence(y.sequence), reduced(y.reduced) {
114 }
Sequence sequence
The sequence container holding powerset's elements.
bool reduced
If true, *this is Omega-reduced.
template<typename D>
Parma_Polyhedra_Library::Powerset< D >::Powerset ( const D &  d)
inlineexplicit

If d is not bottom, builds a powerset containing only d. Builds the empty powerset otherwise.

Definition at line 139 of file Powerset_inlines.hh.

References Parma_Polyhedra_Library::Powerset< D >::OK(), and Parma_Polyhedra_Library::Powerset< D >::sequence.

140  : sequence(), reduced(false) {
141  sequence.push_back(d);
142  PPL_ASSERT_HEAVY(OK());
143 }
Sequence sequence
The sequence container holding powerset's elements.
bool OK(bool disallow_bottom=false) const
Checks if all the invariants are satisfied.
bool reduced
If true, *this is Omega-reduced.
template<typename D >
Parma_Polyhedra_Library::Powerset< D >::~Powerset ( )
inline

Destructor.

Definition at line 147 of file Powerset_inlines.hh.

147  {
148 }

Member Function Documentation

template<typename D>
void Parma_Polyhedra_Library::Powerset< D >::add_disjunct ( const D &  d)
inline

Adds to *this the disjunct d.

Definition at line 159 of file Powerset_inlines.hh.

159  {
160  sequence.push_back(d);
161  reduced = false;
162 }
Sequence sequence
The sequence container holding powerset's elements.
bool reduced
If true, *this is Omega-reduced.
template<typename D>
Powerset< D >::iterator Parma_Polyhedra_Library::Powerset< D >::add_non_bottom_disjunct_preserve_reduction ( const D &  d,
iterator  first,
iterator  last 
)
protected

Adds to *this the disjunct d, assuming d is not the bottom element and ensuring partial Omega-reduction.

If d is not the bottom element and is not Omega-redundant with respect to elements in positions between first and last, all elements in these positions that would be made Omega-redundant by the addition of d are dropped and d is added to the reduced sequence. If *this is reduced before an invocation of this method, it will be reduced upon successful return from the method.

Definition at line 168 of file Powerset_templates.hh.

Referenced by Parma_Polyhedra_Library::Pointset_Powerset< PSET >::BGP99_heuristics_assign(), and Parma_Polyhedra_Library::Pointset_Powerset< PSET >::pairwise_reduce().

170  {
171  PPL_ASSERT_HEAVY(!d.is_bottom());
172  for (iterator xi = first; xi != last; ) {
173  const D& xv = *xi;
174  if (d.definitely_entails(xv)) {
175  return first;
176  }
177  else if (xv.definitely_entails(d)) {
178  if (xi == first) {
179  ++first;
180  }
181  xi = drop_disjunct(xi);
182  }
183  else {
184  ++xi;
185  }
186  }
187  sequence.push_back(d);
188  PPL_ASSERT_HEAVY(OK());
189  return first;
190 }
Sequence sequence
The sequence container holding powerset's elements.
iterator drop_disjunct(iterator position)
Drops the disjunct in *this pointed to by position, returning an iterator to the disjunct following p...
iterator_to_const< Sequence > iterator
Alias for a read-only bidirectional iterator on the disjuncts of a Powerset element.
bool OK(bool disallow_bottom=false) const
Checks if all the invariants are satisfied.
template<typename D>
void Parma_Polyhedra_Library::Powerset< D >::add_non_bottom_disjunct_preserve_reduction ( const D &  d)
inlineprotected

Adds to *this the disjunct d, assuming d is not the bottom element and preserving Omega-reduction.

If *this is reduced before an invocation of this method, it will be reduced upon successful return from the method.

Definition at line 152 of file Powerset_inlines.hh.

152  {
153  // !d.is_bottom() is asserted by the callee.
155 }
iterator add_non_bottom_disjunct_preserve_reduction(const D &d, iterator first, iterator last)
Adds to *this the disjunct d, assuming d is not the bottom element and ensuring partial Omega-reducti...
iterator begin()
Returns an iterator pointing to the first disjunct, if *this is not empty; otherwise, returns the past-the-end iterator.
iterator end()
Returns the past-the-end iterator.
template<typename D >
Powerset< D >::iterator Parma_Polyhedra_Library::Powerset< D >::begin ( )
inline
template<typename D >
Powerset< D >::const_iterator Parma_Polyhedra_Library::Powerset< D >::begin ( ) const
inline

Returns a const_iterator pointing to the first disjunct, if *this is not empty; otherwise, returns the past-the-end const_iterator.

Definition at line 46 of file Powerset_inlines.hh.

46  {
47  return sequence.begin();
48 }
Sequence sequence
The sequence container holding powerset's elements.
template<typename D >
bool Parma_Polyhedra_Library::Powerset< D >::check_omega_reduced ( ) const
private

Does the hard work of checking whether *this contains non-maximal elements and returns true if and only if it does not.

Definition at line 137 of file Powerset_templates.hh.

137  {
138  for (const_iterator x_begin = begin(), x_end = end(),
139  xi = x_begin; xi != x_end; ++xi) {
140  const D& xv = *xi;
141  if (xv.is_bottom()) {
142  return false;
143  }
144  for (const_iterator yi = x_begin; yi != x_end; ++yi) {
145  if (xi == yi) {
146  continue;
147  }
148  const D& yv = *yi;
149  if (xv.definitely_entails(yv) || yv.definitely_entails(xv)) {
150  return false;
151  }
152  }
153  }
154  return true;
155 }
iterator begin()
Returns an iterator pointing to the first disjunct, if *this is not empty; otherwise, returns the past-the-end iterator.
const_iterator_to_const< Sequence > const_iterator
A bidirectional const_iterator on the disjuncts of a Powerset element.
iterator end()
Returns the past-the-end iterator.
template<typename D >
void Parma_Polyhedra_Library::Powerset< D >::clear ( )
inline

Drops all the disjuncts, making *this an empty powerset.

Definition at line 106 of file Powerset_inlines.hh.

106  {
107  sequence.clear();
108 }
Sequence sequence
The sequence container holding powerset's elements.
template<typename D >
void Parma_Polyhedra_Library::Powerset< D >::collapse ( )
inline

If *this is not empty (i.e., it is not the bottom element), it is reduced to a singleton obtained by computing an upper-bound of all the disjuncts.

Definition at line 191 of file Powerset_inlines.hh.

References Parma_Polyhedra_Library::Implementation::BD_Shapes::empty.

Referenced by Parma_Polyhedra_Library::Pointset_Powerset< PSET >::BGP99_extrapolation_assign(), and Parma_Polyhedra_Library::Powerset< D >::omega_reduce().

191  {
192  if (!empty()) {
193  collapse(sequence.begin());
194  }
195 }
Sequence sequence
The sequence container holding powerset's elements.
void collapse()
If *this is not empty (i.e., it is not the bottom element), it is reduced to a singleton obtained by ...
bool empty() const
Returns true if and only if there are no disjuncts in *this.
template<typename D >
void Parma_Polyhedra_Library::Powerset< D >::collapse ( unsigned  max_disjuncts)
protected

Upon return, *this will contain at most max_disjuncts elements; the set of disjuncts in positions greater than or equal to max_disjuncts, will be replaced at that position by their upper-bound.

Definition at line 118 of file Powerset_templates.hh.

References Parma_Polyhedra_Library::iterator_to_const< Container >::base.

118  {
119  PPL_ASSERT(max_disjuncts > 0);
120  // Omega-reduce before counting the number of disjuncts.
121  omega_reduce();
122  size_type n = size();
123  if (n > max_disjuncts) {
124  // Let `i' point to the last disjunct that will survive.
125  iterator i = begin();
126  std::advance(i, max_disjuncts-1);
127  // This disjunct will be assigned an upper-bound of itself and of
128  // all the disjuncts that follow.
129  collapse(i.base);
130  }
131  PPL_ASSERT_HEAVY(OK());
132  PPL_ASSERT(is_omega_reduced());
133 }
size_type size() const
Returns the number of disjuncts.
iterator_to_const< Sequence > iterator
Alias for a read-only bidirectional iterator on the disjuncts of a Powerset element.
bool OK(bool disallow_bottom=false) const
Checks if all the invariants are satisfied.
iterator begin()
Returns an iterator pointing to the first disjunct, if *this is not empty; otherwise, returns the past-the-end iterator.
void omega_reduce() const
Drops from the sequence of disjuncts in *this all the non-maximal elements so that *this is non-redun...
void collapse()
If *this is not empty (i.e., it is not the bottom element), it is reduced to a singleton obtained by ...
bool is_omega_reduced() const
Returns true if and only if *this does not contain non-maximal elements.
template<typename D >
void Parma_Polyhedra_Library::Powerset< D >::collapse ( Sequence_iterator  sink)
private

Replaces the disjunct *sink by an upper bound of itself and all the disjuncts following it.

Definition at line 36 of file Powerset_templates.hh.

36  {
37  PPL_ASSERT(sink != sequence.end());
38  D& d = *sink;
39  iterator x_sink = sink;
40  iterator next_x_sink = x_sink;
41  ++next_x_sink;
42  iterator x_end = end();
43  for (const_iterator xi = next_x_sink; xi != x_end; ++xi) {
44  d.upper_bound_assign(*xi);
45  }
46  // Drop the surplus disjuncts.
47  drop_disjuncts(next_x_sink, x_end);
48 
49  // Ensure omega-reduction.
50  for (iterator xi = begin(); xi != x_sink; ) {
51  if (xi->definitely_entails(d)) {
52  xi = drop_disjunct(xi);
53  }
54  else {
55  ++xi;
56  }
57  }
58 
59  PPL_ASSERT_HEAVY(OK());
60 }
Sequence sequence
The sequence container holding powerset's elements.
iterator drop_disjunct(iterator position)
Drops the disjunct in *this pointed to by position, returning an iterator to the disjunct following p...
iterator_to_const< Sequence > iterator
Alias for a read-only bidirectional iterator on the disjuncts of a Powerset element.
bool OK(bool disallow_bottom=false) const
Checks if all the invariants are satisfied.
iterator begin()
Returns an iterator pointing to the first disjunct, if *this is not empty; otherwise, returns the past-the-end iterator.
const_iterator_to_const< Sequence > const_iterator
A bidirectional const_iterator on the disjuncts of a Powerset element.
iterator end()
Returns the past-the-end iterator.
void drop_disjuncts(iterator first, iterator last)
Drops all the disjuncts from first to last (excluded).
template<typename D >
bool Parma_Polyhedra_Library::Powerset< D >::definitely_entails ( const Powerset< D > &  y) const

Returns true if *this definitely entails y. Returns false if *this may not entail y (i.e., if *this does not entail y or if entailment could not be decided).

Definition at line 194 of file Powerset_templates.hh.

References Parma_Polyhedra_Library::Powerset< D >::begin(), Parma_Polyhedra_Library::Powerset< D >::definitely_entails(), and Parma_Polyhedra_Library::Powerset< D >::end().

Referenced by Parma_Polyhedra_Library::Powerset< D >::definitely_entails().

194  {
195  const Powerset<D>& x = *this;
196  bool found = true;
197  for (const_iterator xi = x.begin(),
198  x_end = x.end(); found && xi != x_end; ++xi) {
199  found = false;
200  for (const_iterator yi = y.begin(),
201  y_end = y.end(); !found && yi != y_end; ++yi) {
202  found = (*xi).definitely_entails(*yi);
203  }
204  }
205  return found;
206 }
const_iterator_to_const< Sequence > const_iterator
A bidirectional const_iterator on the disjuncts of a Powerset element.
template<typename D >
Powerset< D >::iterator Parma_Polyhedra_Library::Powerset< D >::drop_disjunct ( iterator  position)
inline

Drops the disjunct in *this pointed to by position, returning an iterator to the disjunct following position.

Definition at line 94 of file Powerset_inlines.hh.

References Parma_Polyhedra_Library::iterator_to_const< Container >::base.

Referenced by Parma_Polyhedra_Library::Powerset< D >::omega_reduce(), and Parma_Polyhedra_Library::Powerset< D >::operator==().

94  {
95  return sequence.erase(position.base);
96 }
Sequence sequence
The sequence container holding powerset's elements.
template<typename D >
void Parma_Polyhedra_Library::Powerset< D >::drop_disjuncts ( iterator  first,
iterator  last 
)
inline

Drops all the disjuncts from first to last (excluded).

Definition at line 100 of file Powerset_inlines.hh.

References Parma_Polyhedra_Library::iterator_to_const< Container >::base.

100  {
101  sequence.erase(first.base, last.base);
102 }
Sequence sequence
The sequence container holding powerset's elements.
template<typename D >
bool Parma_Polyhedra_Library::Powerset< D >::empty ( ) const
inline

Returns true if and only if there are no disjuncts in *this.

Definition at line 88 of file Powerset_inlines.hh.

88  {
89  return sequence.empty();
90 }
Sequence sequence
The sequence container holding powerset's elements.
template<typename D >
Powerset< D >::const_iterator Parma_Polyhedra_Library::Powerset< D >::end ( ) const
inline

Returns the past-the-end const_iterator.

Definition at line 52 of file Powerset_inlines.hh.

52  {
53  return sequence.end();
54 }
Sequence sequence
The sequence container holding powerset's elements.
template<typename D >
memory_size_type Parma_Polyhedra_Library::Powerset< D >::external_memory_in_bytes ( ) const

Returns a lower bound to the size in bytes of the memory managed by *this.

Definition at line 304 of file Powerset_templates.hh.

304  {
305  memory_size_type bytes = 0;
306  for (const_iterator xi = begin(), x_end = end(); xi != x_end; ++xi) {
307  bytes += xi->total_memory_in_bytes();
308  // We assume there is at least a forward and a backward link, and
309  // that the pointers implementing them are at least the size of
310  // pointers to `D'.
311  bytes += 2*sizeof(D*);
312  }
313  return bytes;
314 }
iterator begin()
Returns an iterator pointing to the first disjunct, if *this is not empty; otherwise, returns the past-the-end iterator.
const_iterator_to_const< Sequence > const_iterator
A bidirectional const_iterator on the disjuncts of a Powerset element.
iterator end()
Returns the past-the-end iterator.
size_t memory_size_type
An unsigned integral type for representing memory size in bytes.
template<typename D >
bool Parma_Polyhedra_Library::Powerset< D >::is_bottom ( ) const
inline

Returns true if and only if *this is the bottom element of the powerset constraint system (i.e., it represents the empty set).

Definition at line 183 of file Powerset_inlines.hh.

References Parma_Polyhedra_Library::Implementation::BD_Shapes::empty.

Referenced by Parma_Polyhedra_Library::Pointset_Powerset< PSET >::map_space_dimensions().

183  {
184  // Must perform omega-reduction for correctness.
185  omega_reduce();
186  return empty();
187 }
void omega_reduce() const
Drops from the sequence of disjuncts in *this all the non-maximal elements so that *this is non-redun...
bool empty() const
Returns true if and only if there are no disjuncts in *this.
template<typename D >
bool Parma_Polyhedra_Library::Powerset< D >::is_omega_reduced ( ) const
protected

Returns true if and only if *this does not contain non-maximal elements.

Definition at line 159 of file Powerset_templates.hh.

Referenced by Parma_Polyhedra_Library::Pointset_Powerset< PSET >::BGP99_heuristics_assign(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::collect_certificates(), and Parma_Polyhedra_Library::Pointset_Powerset< PSET >::is_universe().

159  {
160  if (!reduced && check_omega_reduced()) {
161  reduced = true;
162  }
163  return reduced;
164 }
bool reduced
If true, *this is Omega-reduced.
bool check_omega_reduced() const
Does the hard work of checking whether *this contains non-maximal elements and returns true if and on...
template<typename D >
bool Parma_Polyhedra_Library::Powerset< D >::is_top ( ) const
inline

Returns true if and only if *this is the top element of the powerset constraint system (i.e., it represents the universe).

Definition at line 173 of file Powerset_inlines.hh.

173  {
174  // Must perform omega-reduction for correctness.
175  omega_reduce();
176  const_iterator xi = begin();
177  const_iterator x_end = end();
178  return xi != x_end && xi->is_top() && ++xi == x_end;
179 }
iterator begin()
Returns an iterator pointing to the first disjunct, if *this is not empty; otherwise, returns the past-the-end iterator.
void omega_reduce() const
Drops from the sequence of disjuncts in *this all the non-maximal elements so that *this is non-redun...
const_iterator_to_const< Sequence > const_iterator
A bidirectional const_iterator on the disjuncts of a Powerset element.
iterator end()
Returns the past-the-end iterator.
template<typename D >
void Parma_Polyhedra_Library::Powerset< D >::least_upper_bound_assign ( const Powerset< D > &  y)

Assigns to *this the least upper bound of *this and y.

Definition at line 261 of file Powerset_templates.hh.

References Parma_Polyhedra_Library::Powerset< D >::begin(), Parma_Polyhedra_Library::Powerset< D >::end(), and Parma_Polyhedra_Library::Powerset< D >::omega_reduce().

261  {
262  // Ensure omega-reduction here, since what follows has quadratic complexity.
263  omega_reduce();
264  y.omega_reduce();
265  iterator old_begin = begin();
266  iterator old_end = end();
267  for (const_iterator i = y.begin(), y_end = y.end(); i != y_end; ++i) {
269  old_begin,
270  old_end);
271  }
272  PPL_ASSERT_HEAVY(OK());
273 }
iterator add_non_bottom_disjunct_preserve_reduction(const D &d, iterator first, iterator last)
Adds to *this the disjunct d, assuming d is not the bottom element and ensuring partial Omega-reducti...
iterator_to_const< Sequence > iterator
Alias for a read-only bidirectional iterator on the disjuncts of a Powerset element.
bool OK(bool disallow_bottom=false) const
Checks if all the invariants are satisfied.
iterator begin()
Returns an iterator pointing to the first disjunct, if *this is not empty; otherwise, returns the past-the-end iterator.
void omega_reduce() const
Drops from the sequence of disjuncts in *this all the non-maximal elements so that *this is non-redun...
const_iterator_to_const< Sequence > const_iterator
A bidirectional const_iterator on the disjuncts of a Powerset element.
iterator end()
Returns the past-the-end iterator.
template<typename D >
void Parma_Polyhedra_Library::Powerset< D >::m_swap ( Powerset< D > &  y)
inline

Swaps *this with y.

Definition at line 126 of file Powerset_inlines.hh.

References Parma_Polyhedra_Library::Powerset< D >::reduced, Parma_Polyhedra_Library::Powerset< D >::sequence, and Parma_Polyhedra_Library::swap().

Referenced by Parma_Polyhedra_Library::Powerset< D >::swap().

126  {
127  std::swap(sequence, y.sequence);
128  std::swap(reduced, y.reduced);
129 }
void swap(CO_Tree &x, CO_Tree &y)
Sequence sequence
The sequence container holding powerset's elements.
bool reduced
If true, *this is Omega-reduced.
template<typename D >
void Parma_Polyhedra_Library::Powerset< D >::meet_assign ( const Powerset< D > &  y)
inline

Assigns to *this the meet of *this and y.

Definition at line 199 of file Powerset_inlines.hh.

199  {
200  pairwise_apply_assign(y, std::mem_fun_ref(&D::meet_assign));
201 }
void pairwise_apply_assign(const Powerset &y, Binary_Operator_Assign op_assign)
Assigns to *this the result of applying op_assign pairwise to the elements in *this and y...
template<typename D >
bool Parma_Polyhedra_Library::Powerset< D >::OK ( bool  disallow_bottom = false) const

Checks if all the invariants are satisfied.

Definition at line 318 of file Powerset_templates.hh.

Referenced by Parma_Polyhedra_Library::Powerset< D >::Powerset().

318  {
319  for (const_iterator xi = begin(), x_end = end(); xi != x_end; ++xi) {
320  if (!xi->OK()) {
321  return false;
322  }
323  if (disallow_bottom && xi->is_bottom()) {
324 #ifndef NDEBUG
325  std::cerr << "Bottom element in powerset!"
326  << std::endl;
327 #endif
328  return false;
329  }
330  }
331  if (reduced && !check_omega_reduced()) {
332 #ifndef NDEBUG
333  std::cerr << "Powerset claims to be reduced, but it is not!"
334  << std::endl;
335 #endif
336  return false;
337  }
338  return true;
339 }
iterator begin()
Returns an iterator pointing to the first disjunct, if *this is not empty; otherwise, returns the past-the-end iterator.
const_iterator_to_const< Sequence > const_iterator
A bidirectional const_iterator on the disjuncts of a Powerset element.
bool reduced
If true, *this is Omega-reduced.
iterator end()
Returns the past-the-end iterator.
bool check_omega_reduced() const
Does the hard work of checking whether *this contains non-maximal elements and returns true if and on...
template<typename D >
void Parma_Polyhedra_Library::Powerset< D >::omega_reduce ( ) const

Drops from the sequence of disjuncts in *this all the non-maximal elements so that *this is non-redundant.

This method is declared const because, even though Omega-reduction may change the syntactic representation of *this, its semantics will be unchanged.

Definition at line 64 of file Powerset_templates.hh.

References Parma_Polyhedra_Library::abandon_expensive_computations, Parma_Polyhedra_Library::Powerset< D >::begin(), Parma_Polyhedra_Library::Powerset< D >::collapse(), Parma_Polyhedra_Library::Powerset< D >::drop_disjunct(), and Parma_Polyhedra_Library::Powerset< D >::end().

Referenced by Parma_Polyhedra_Library::Pointset_Powerset< PSET >::bounds_from_above(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::bounds_from_below(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::concatenate_assign(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::constrains(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::difference_assign(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::is_topologically_closed(), Parma_Polyhedra_Library::Powerset< D >::least_upper_bound_assign(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::maximize(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::minimize(), Parma_Polyhedra_Library::Powerset< D >::operator==(), Parma_Polyhedra_Library::Powerset< D >::pairwise_apply_assign(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::pairwise_reduce(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::simplify_using_context_assign(), and Parma_Polyhedra_Library::Pointset_Powerset< PSET >::strictly_contains().

64  {
65  if (reduced) {
66  return;
67  }
68  Powerset& x = const_cast<Powerset&>(*this);
69  // First remove all bottom elements.
70  for (iterator xi = x.begin(), x_end = x.end(); xi != x_end; ) {
71  if (xi->is_bottom()) {
72  xi = x.drop_disjunct(xi);
73  }
74  else {
75  ++xi;
76  }
77  }
78  // Then remove non-maximal elements.
79  for (iterator xi = x.begin(); xi != x.end(); ) {
80  const D& xv = *xi;
81  bool dropping_xi = false;
82  for (iterator yi = x.begin(); yi != x.end(); ) {
83  if (xi == yi) {
84  ++yi;
85  }
86  else {
87  const D& yv = *yi;
88  if (yv.definitely_entails(xv)) {
89  yi = x.drop_disjunct(yi);
90  }
91  else if (xv.definitely_entails(yv)) {
92  dropping_xi = true;
93  break;
94  }
95  else {
96  ++yi;
97  }
98  }
99  }
100  if (dropping_xi) {
101  xi = x.drop_disjunct(xi);
102  }
103  else {
104  ++xi;
105  }
106  if (abandon_expensive_computations != 0 && xi != x.end()) {
107  // Hurry up!
108  x.collapse(xi.base);
109  break;
110  }
111  }
112  reduced = true;
113  PPL_ASSERT_HEAVY(OK());
114 }
iterator_to_const< Sequence > iterator
Alias for a read-only bidirectional iterator on the disjuncts of a Powerset element.
bool OK(bool disallow_bottom=false) const
Checks if all the invariants are satisfied.
bool reduced
If true, *this is Omega-reduced.
Powerset()
Default constructor: builds the bottom of the powerset constraint system (i.e., the empty powerset)...
const Throwable *volatile abandon_expensive_computations
A pointer to an exception object.
Definition: globals.cc:34
template<typename D >
Powerset< D > & Parma_Polyhedra_Library::Powerset< D >::operator= ( const Powerset< D > &  y)
inline

The assignment operator.

Definition at line 118 of file Powerset_inlines.hh.

References Parma_Polyhedra_Library::Powerset< D >::reduced, and Parma_Polyhedra_Library::Powerset< D >::sequence.

118  {
119  sequence = y.sequence;
120  reduced = y.reduced;
121  return *this;
122 }
Sequence sequence
The sequence container holding powerset's elements.
bool reduced
If true, *this is Omega-reduced.
template<typename D >
template<typename Binary_Operator_Assign >
void Parma_Polyhedra_Library::Powerset< D >::pairwise_apply_assign ( const Powerset< D > &  y,
Binary_Operator_Assign  op_assign 
)
protected

Assigns to *this the result of applying op_assign pairwise to the elements in *this and y.

The elements of the powerset result are obtained by applying op_assign to each pair of elements whose components are drawn from *this and y, respectively.

Definition at line 237 of file Powerset_templates.hh.

References Parma_Polyhedra_Library::Powerset< D >::begin(), Parma_Polyhedra_Library::Powerset< D >::end(), Parma_Polyhedra_Library::Powerset< D >::omega_reduce(), and Parma_Polyhedra_Library::swap().

Referenced by Parma_Polyhedra_Library::Pointset_Powerset< PSET >::intersection_assign(), and Parma_Polyhedra_Library::Pointset_Powerset< PSET >::time_elapse_assign().

238  {
239  // Ensure omega-reduction here, since what follows has quadratic complexity.
240  omega_reduce();
241  y.omega_reduce();
242  Sequence new_sequence;
243  for (const_iterator xi = begin(), x_end = end(),
244  y_begin = y.begin(), y_end = y.end(); xi != x_end; ++xi) {
245  for (const_iterator yi = y_begin; yi != y_end; ++yi) {
246  D zi = *xi;
247  op_assign(zi, *yi);
248  if (!zi.is_bottom()) {
249  new_sequence.push_back(zi);
250  }
251  }
252  }
253  // Put the new sequence in place.
254  std::swap(sequence, new_sequence);
255  reduced = false;
256  PPL_ASSERT_HEAVY(OK());
257 }
void swap(CO_Tree &x, CO_Tree &y)
Sequence sequence
The sequence container holding powerset's elements.
bool OK(bool disallow_bottom=false) const
Checks if all the invariants are satisfied.
iterator begin()
Returns an iterator pointing to the first disjunct, if *this is not empty; otherwise, returns the past-the-end iterator.
void omega_reduce() const
Drops from the sequence of disjuncts in *this all the non-maximal elements so that *this is non-redun...
const_iterator_to_const< Sequence > const_iterator
A bidirectional const_iterator on the disjuncts of a Powerset element.
bool reduced
If true, *this is Omega-reduced.
iterator end()
Returns the past-the-end iterator.
std::list< D > Sequence
A powerset is implemented as a sequence of elements.
template<typename D >
Powerset< D >::reverse_iterator Parma_Polyhedra_Library::Powerset< D >::rbegin ( )
inline

Returns a reverse_iterator pointing to the last disjunct, if *this is not empty; otherwise, returns the before-the-start reverse_iterator.

Definition at line 58 of file Powerset_inlines.hh.

58  {
59  return reverse_iterator(end());
60 }
iterator end()
Returns the past-the-end iterator.
std::reverse_iterator< iterator > reverse_iterator
The reverse iterator type built from Powerset::iterator.
template<typename D >
Powerset< D >::const_reverse_iterator Parma_Polyhedra_Library::Powerset< D >::rbegin ( ) const
inline

Returns a const_reverse_iterator pointing to the last disjunct, if *this is not empty; otherwise, returns the before-the-start const_reverse_iterator.

Definition at line 70 of file Powerset_inlines.hh.

70  {
71  return const_reverse_iterator(end());
72 }
std::reverse_iterator< const_iterator > const_reverse_iterator
The reverse iterator type built from Powerset::const_iterator.
iterator end()
Returns the past-the-end iterator.
template<typename D >
Powerset< D >::reverse_iterator Parma_Polyhedra_Library::Powerset< D >::rend ( )
inline

Returns the before-the-start reverse_iterator.

Definition at line 64 of file Powerset_inlines.hh.

64  {
65  return reverse_iterator(begin());
66 }
iterator begin()
Returns an iterator pointing to the first disjunct, if *this is not empty; otherwise, returns the past-the-end iterator.
std::reverse_iterator< iterator > reverse_iterator
The reverse iterator type built from Powerset::iterator.
template<typename D >
Powerset< D >::const_reverse_iterator Parma_Polyhedra_Library::Powerset< D >::rend ( ) const
inline

Returns the before-the-start const_reverse_iterator.

Definition at line 76 of file Powerset_inlines.hh.

76  {
77  return const_reverse_iterator(begin());
78 }
std::reverse_iterator< const_iterator > const_reverse_iterator
The reverse iterator type built from Powerset::const_iterator.
iterator begin()
Returns an iterator pointing to the first disjunct, if *this is not empty; otherwise, returns the past-the-end iterator.
template<typename D >
memory_size_type Parma_Polyhedra_Library::Powerset< D >::total_memory_in_bytes ( ) const
inline

Returns a lower bound to the total size in bytes of the memory occupied by *this.

Definition at line 218 of file Powerset_inlines.hh.

References Parma_Polyhedra_Library::external_memory_in_bytes().

218  {
219  return sizeof(*this) + external_memory_in_bytes();
220 }
memory_size_type external_memory_in_bytes() const
Returns a lower bound to the size in bytes of the memory managed by *this.
template<typename D >
void Parma_Polyhedra_Library::Powerset< D >::upper_bound_assign ( const Powerset< D > &  y)
inline

Assigns to *this an upper bound of *this and y.

The result will be the least upper bound of *this and y.

Definition at line 205 of file Powerset_inlines.hh.

205  {
207 }
void least_upper_bound_assign(const Powerset &y)
Assigns to *this the least upper bound of *this and y.
template<typename D >
bool Parma_Polyhedra_Library::Powerset< D >::upper_bound_assign_if_exact ( const Powerset< D > &  y)
inline

Assigns to *this the least upper bound of *this and y and returns true.

Exceptions
std::invalid_argumentThrown if *this and y are dimension-incompatible.

Definition at line 211 of file Powerset_inlines.hh.

211  {
213  return true;
214 }
void least_upper_bound_assign(const Powerset &y)
Assigns to *this the least upper bound of *this and y.

Friends And Related Function Documentation

template<typename D >
bool operator!= ( const Powerset< D > &  x,
const Powerset< D > &  y 
)
related

Returns true if and only if x and y are not equivalent.

template<typename D >
bool operator!= ( const Powerset< D > &  x,
const Powerset< D > &  y 
)
related

Definition at line 167 of file Powerset_inlines.hh.

167  {
168  return !(x == y);
169 }
template<typename D >
std::ostream & operator<< ( std::ostream &  s,
const Powerset< D > &  x 
)
related

Output operator.

template<typename D >
std::ostream & operator<< ( std::ostream &  s,
const Powerset< D > &  x 
)
related

Definition at line 280 of file Powerset_templates.hh.

280  {
281  if (x.is_bottom()) {
282  s << "false";
283  }
284  else if (x.is_top()) {
285  s << "true";
286  }
287  else {
288  for (typename Powerset<D>::const_iterator i = x.begin(),
289  x_end = x.end(); i != x_end; ) {
290  s << "{ " << *i << " }";
291  ++i;
292  if (i != x_end) {
293  s << ", ";
294  }
295  }
296  }
297  return s;
298 }
template<typename D >
bool operator== ( const Powerset< D > &  x,
const Powerset< D > &  y 
)
related

Returns true if and only if x and y are equivalent.

template<typename D >
bool operator== ( const Powerset< D > &  x,
const Powerset< D > &  y 
)
related

Definition at line 211 of file Powerset_templates.hh.

References Parma_Polyhedra_Library::Powerset< D >::begin(), Parma_Polyhedra_Library::Powerset< D >::drop_disjunct(), Parma_Polyhedra_Library::Powerset< D >::end(), Parma_Polyhedra_Library::Powerset< D >::omega_reduce(), and Parma_Polyhedra_Library::Powerset< D >::size().

211  {
212  x.omega_reduce();
213  y.omega_reduce();
214  if (x.size() != y.size()) {
215  return false;
216  }
217  // Take a copy of `y' and work with it.
218  Powerset<D> z = y;
219  for (typename Powerset<D>::const_iterator xi = x.begin(),
220  x_end = x.end(); xi != x_end; ++xi) {
221  typename Powerset<D>::iterator zi = z.begin();
222  typename Powerset<D>::iterator z_end = z.end();
223  zi = std::find(zi, z_end, *xi);
224  if (zi == z_end) {
225  return false;
226  }
227  else {
228  z.drop_disjunct(zi);
229  }
230  }
231  return true;
232 }
template<typename D >
void swap ( Powerset< D > &  x,
Powerset< D > &  y 
)
related

Swaps x with y.

template<typename D >
void swap ( Powerset< D > &  x,
Powerset< D > &  y 
)
related

Definition at line 225 of file Powerset_inlines.hh.

References Parma_Polyhedra_Library::Powerset< D >::m_swap().

225  {
226  x.m_swap(y);
227 }

Member Data Documentation

template<typename D>
bool Parma_Polyhedra_Library::Powerset< D >::reduced
mutableprotected

If true, *this is Omega-reduced.

Definition at line 238 of file Powerset_defs.hh.

Referenced by Parma_Polyhedra_Library::Pointset_Powerset< PSET >::add_congruence(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::add_congruences(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::add_constraint(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::add_constraints(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::add_disjunct(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::affine_image(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::affine_preimage(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::bounded_affine_image(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::bounded_affine_preimage(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::difference_assign(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::drop_some_non_integer_points(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::generalized_affine_image(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::generalized_affine_preimage(), Parma_Polyhedra_Library::Powerset< D >::m_swap(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::map_space_dimensions(), Parma_Polyhedra_Library::Powerset< D >::operator=(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::Pointset_Powerset(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::refine_with_congruence(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::refine_with_congruences(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::refine_with_constraint(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::refine_with_constraints(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::remove_higher_space_dimensions(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::remove_space_dimensions(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::simplify_using_context_assign(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::unconstrain(), and Parma_Polyhedra_Library::Pointset_Powerset< PSET >::wrap_assign().

template<typename D>
Sequence Parma_Polyhedra_Library::Powerset< D >::sequence
protected

The sequence container holding powerset's elements.

Definition at line 235 of file Powerset_defs.hh.

Referenced by Parma_Polyhedra_Library::Pointset_Powerset< PSET >::add_congruence(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::add_congruences(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::add_constraint(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::add_constraints(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::add_disjunct(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::add_space_dimensions_and_embed(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::add_space_dimensions_and_project(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::affine_dimension(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::affine_image(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::affine_preimage(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::BGP99_heuristics_assign(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::bounded_affine_image(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::bounded_affine_preimage(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::bounds_from_above(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::bounds_from_below(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::contains(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::contains_integer_point(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::difference_assign(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::drop_some_non_integer_points(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::expand_space_dimension(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::fold_space_dimensions(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::generalized_affine_image(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::generalized_affine_preimage(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::intersection_preserving_enlarge_element(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::is_bounded(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::is_discrete(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::is_disjoint_from(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::is_empty(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::is_topologically_closed(), Parma_Polyhedra_Library::Powerset< D >::m_swap(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::map_space_dimensions(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::maximize(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::minimize(), Parma_Polyhedra_Library::Powerset< D >::operator=(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::pairwise_reduce(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::Pointset_Powerset(), Parma_Polyhedra_Library::Powerset< D >::Powerset(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::refine_with_congruence(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::refine_with_congruences(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::refine_with_constraint(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::refine_with_constraints(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::relation_with(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::relation_with_aux(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::remove_higher_space_dimensions(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::remove_space_dimensions(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::simplify_using_context_assign(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::strictly_contains(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::topological_closure_assign(), Parma_Polyhedra_Library::Pointset_Powerset< PSET >::unconstrain(), and Parma_Polyhedra_Library::Pointset_Powerset< PSET >::wrap_assign().


The documentation for this class was generated from the following files: