24 #ifndef PPL_Pointset_Powerset_inlines_hh
25 #define PPL_Pointset_Powerset_inlines_hh 1
40 template <
typename PSET>
46 template <
typename PSET>
52 template <
typename PSET>
56 :
Base(), space_dim(num_dimensions) {
61 PPL_ASSERT_HEAVY(x.
OK());
64 template <
typename PSET>
68 :
Base(y), space_dim(y.space_dim) {
71 template <
typename PSET>
75 :
Base(), space_dim(ph.space_dimension()) {
87 PPL_ASSERT_HEAVY(
OK());
90 template <
typename PSET>
94 :
Base(), space_dim(ph.space_dimension()) {
105 PPL_ASSERT_HEAVY(
OK());
108 template <
typename PSET>
112 :
Base(), space_dim(gr.space_dimension()) {
117 PPL_ASSERT_HEAVY(
OK());
120 template <
typename PSET>
121 template <
typename QH1,
typename QH2,
typename R>
126 :
Base(), space_dim(prp.space_dimension()) {
138 PPL_ASSERT_HEAVY(OK());
141 template <
typename PSET>
142 template <
typename Interval>
145 :
Base(), space_dim(box.space_dimension()) {
150 PPL_ASSERT_HEAVY(
OK());
153 template <
typename PSET>
154 template <
typename T>
157 :
Base(), space_dim(os.space_dimension()) {
162 PPL_ASSERT_HEAVY(
OK());
165 template <
typename PSET>
166 template <
typename T>
169 :
Base(), space_dim(bds.space_dimension()) {
174 PPL_ASSERT_HEAVY(
OK());
177 template <
typename PSET>
181 PPL_ASSERT_HEAVY(
OK());
184 template <
typename PSET>
188 PPL_ASSERT_HEAVY(
OK());
191 template <
typename PSET>
195 x.Base::operator=(y);
200 template <
typename PSET>
209 template <
typename PSET>
210 template <
typename QH>
219 template <
typename PSET>
224 Det_PSET::lift_op_assign(std::mem_fun_ref(&PSET::intersection_assign)));
227 template <
typename PSET>
232 Det_PSET::lift_op_assign(std::mem_fun_ref(&PSET::time_elapse_assign)));
235 template <
typename PSET>
238 return relation_with_aux(c);
241 template <
typename PSET>
244 return relation_with_aux(cg);
247 template <
typename PSET>
257 template <
typename PSET>
283 template <
typename PSET>
289 template <
typename PSET>
295 template <
typename PSET>
301 template <
typename PSET>
313 template <
typename PSET>
319 return check_containment(ph_nnc, ps_nnc);
332 template <
typename PSET>
340 #endif // !defined(PPL_Pointset_Powerset_inlines_hh)
Poly_Con_Relation relation_with(const Constraint &c) const
Returns the relations holding between the powerset *this and the constraint c.
The partially reduced product of two abstractions.
dimension_type max_space_dimension()
Returns the maximum space dimension this library can handle.
A linear equality or inequality.
void swap(CO_Tree &x, CO_Tree &y)
Sequence sequence
The sequence container holding powerset's elements.
size_t dimension_type
An unsigned integral type for representing space dimensions.
static dimension_type max_space_dimension()
Returns the maximum space dimension a Pointset_Powerset
can handle.
bool is_empty() const
Returns true if and only if *this is an empty polyhedron.
void swap(Pointset_Powerset< PSET > &x, Pointset_Powerset< PSET > &y)
bool is_empty() const
Returns true if and only if *this is an empty box.
void time_elapse_assign(const Pointset_Powerset &y)
Assigns to *this the result of computing the time-elapse between *this and y.
bool OK() const
Checks if all the invariants are satisfied.
bool geometrically_equals(const Pointset_Powerset &y) const
Returns true if and only if *this is geometrically equal to y, i.e., if (the elements of) *this and y...
void difference_assign(const Pointset_Powerset &y)
Assigns to *this an (a smallest) over-approximation as a powerset of the disjunct domain of the set-t...
A wrapper for PPL pointsets, providing them with a determinate constraint system interface, as defined in [Bag98].
void m_swap(Pointset_Powerset &y)
Swaps *this with y.
bool is_empty() const
Returns true if and only if *this is an empty BDS.
The powerset construction on a base-level domain.
int32_t hash_code() const
Returns a 32-bit hash code for *this.
Complexity_Class
Complexity pseudo-classes.
bool geometrically_covers(const Pointset_Powerset &y) const
Returns true if and only if *this geometrically covers y, i.e., if any point (in some element) of y i...
bool reduced
If true, *this is Omega-reduced.
Degenerate_Element
Kinds of degenerate abstract elements.
Enable_If< Is_Native< T >::value, memory_size_type >::type external_memory_in_bytes(const T &)
For native types, returns the size in bytes of the memory managed by the type of the (unused) paramet...
dimension_type space_dimension() const
Returns the dimension of the vector space enclosing *this.
Pointset_Powerset(dimension_type num_dimensions=0, Degenerate_Element kind=UNIVERSE)
Builds a universe (top) or empty (bottom) Pointset_Powerset.
A not necessarily closed convex polyhedron.
A not necessarily closed, iso-oriented hyperrectangle.
A closed convex polyhedron.
int32_t hash_code_from_dimension(dimension_type dim)
Returns the hash code for space dimension dim.
bool check_containment(const PSET &ph, const Pointset_Powerset< PSET > &ps)
The universe element, i.e., the whole vector space.
The powerset construction instantiated on PPL pointset domains.
The entire library is confined to this namespace.
bool check_containment(const C_Polyhedron &ph, const Pointset_Powerset< C_Polyhedron > &ps)
void intersection_assign(const Pointset_Powerset &y)
Assigns to *this the intersection of *this and y.
A bounded difference shape.
bool is_empty() const
Returns true if and only if either of the components of *this are empty.
memory_size_type external_memory_in_bytes() const
Returns a lower bound to the size in bytes of the memory managed by *this.
size_t memory_size_type
An unsigned integral type for representing memory size in bytes.
bool is_empty() const
Returns true if and only if *this is an empty OS.
dimension_type space_dim
The number of dimensions of the enclosing vector space.
memory_size_type total_memory_in_bytes() const
Returns a lower bound to the total size in bytes of the memory occupied by *this. ...
Pointset_Powerset & operator=(const Pointset_Powerset &y)
The assignment operator (*this and y can be dimension-incompatible).
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...
bool is_empty() const
Returns true if and only if *this is an empty grid.
The relation between a polyhedron and a constraint.