|
PPL
1.0
|
A line, ray, point or closure point. More...
#include <ppl.hh>
Public Types | |
| enum | Type { LINE, RAY, POINT, CLOSURE_POINT } |
| The generator type. More... | |
| typedef Expression_Hide_Last < Expression_Hide_Inhomo < Linear_Expression > > | Expression |
Public Member Functions | |
| Generator (Representation r=default_representation) | |
| Constructs the point at the origin. | |
| Generator (const Generator &g) | |
| Generator (const Generator &g, Representation r) | |
| Copy constructor with given representation. | |
| Generator (const Generator &g, dimension_type space_dim) | |
| Generator (const Generator &g, dimension_type space_dim, Representation r) | |
| Copy constructor with given representation and space dimension. | |
| ~Generator () | |
| Destructor. | |
| Generator & | operator= (const Generator &g) |
| Assignment operator. | |
| Representation | representation () const |
| Returns the current representation of *this. | |
| void | set_representation (Representation r) |
| Converts *this to the specified representation. | |
| dimension_type | space_dimension () const |
Returns the dimension of the vector space enclosing *this. | |
| void | set_space_dimension (dimension_type space_dim) |
| void | swap_space_dimensions (Variable v1, Variable v2) |
Swaps the coefficients of the variables v1 and v2 . | |
| bool | remove_space_dimensions (const Variables_Set &vars) |
| Removes all the specified dimensions from the generator. | |
| void | permute_space_dimensions (const std::vector< Variable > &cycle) |
| Permutes the space dimensions of the generator. | |
| void | shift_space_dimensions (Variable v, dimension_type n) |
| Type | type () const |
Returns the generator type of *this. | |
| bool | is_line () const |
Returns true if and only if *this is a line. | |
| bool | is_ray () const |
Returns true if and only if *this is a ray. | |
| bool | is_point () const |
Returns true if and only if *this is a point. | |
| bool | is_closure_point () const |
Returns true if and only if *this is a closure point. | |
| Coefficient_traits::const_reference | coefficient (Variable v) const |
Returns the coefficient of v in *this. | |
| Coefficient_traits::const_reference | divisor () const |
If *this is either a point or a closure point, returns its divisor. | |
| memory_size_type | total_memory_in_bytes () const |
Returns a lower bound to the total size in bytes of the memory occupied by *this. | |
| memory_size_type | external_memory_in_bytes () const |
Returns the size in bytes of the memory managed by *this. | |
| bool | is_equivalent_to (const Generator &y) const |
Returns true if and only if *this and y are equivalent generators. | |
| bool | is_equal_to (const Generator &y) const |
Returns true if *this is identical to y. | |
| bool | OK () const |
| Checks if all the invariants are satisfied. | |
| void | ascii_dump () const |
Writes to std::cerr an ASCII representation of *this. | |
| void | ascii_dump (std::ostream &s) const |
Writes to s an ASCII representation of *this. | |
| void | print () const |
Prints *this to std::cerr using operator<<. | |
| bool | ascii_load (std::istream &s) |
Loads from s an ASCII representation (as produced by ascii_dump(std::ostream&) const) and sets *this accordingly. Returns true if successful, false otherwise. | |
| void | m_swap (Generator &y) |
Swaps *this with y. | |
| const Expression & | expression () const |
Static Public Member Functions | |
| static Generator | line (const Linear_Expression &e, Representation r=default_representation) |
Returns the line of direction e. | |
| static Generator | ray (const Linear_Expression &e, Representation r=default_representation) |
Returns the ray of direction e. | |
| static Generator | point (const Linear_Expression &e=Linear_Expression::zero(), Coefficient_traits::const_reference d=Coefficient_one(), Representation r=default_representation) |
Returns the point at e / d. | |
| static Generator | point (Representation r) |
| Returns the origin. | |
| static Generator | point (const Linear_Expression &e, Representation r) |
Returns the point at e. | |
| static Generator | closure_point (const Linear_Expression &e=Linear_Expression::zero(), Coefficient_traits::const_reference d=Coefficient_one(), Representation r=default_representation) |
Returns the closure point at e / d. | |
| static Generator | closure_point (Representation r) |
| Returns the closure point at the origin. | |
| static Generator | closure_point (const Linear_Expression &e, Representation r) |
Returns the closure point at e. | |
| static dimension_type | max_space_dimension () |
| Returns the maximum space dimension a Generator can handle. | |
| static void | initialize () |
| Initializes the class. | |
| static void | finalize () |
| Finalizes the class. | |
| static const Generator & | zero_dim_point () |
Returns the origin of the zero-dimensional space . | |
| static const Generator & | zero_dim_closure_point () |
Returns, as a closure point, the origin of the zero-dimensional space . | |
Static Public Attributes | |
| static const Representation | default_representation = SPARSE |
| The representation used for new Generators. | |
Related Functions | |
(Note that these are not member functions.) | |
| std::ostream & | operator<< (std::ostream &s, const Generator &g) |
| Output operator. | |
| void | swap (Generator &x, Generator &y) |
Swaps x with y. | |
| Generator | line (const Linear_Expression &e, Representation r=Generator::default_representation) |
| Shorthand for Generator::line(const Linear_Expression& e, Representation r). | |
| Generator | ray (const Linear_Expression &e, Representation r=Generator::default_representation) |
| Shorthand for Generator::ray(const Linear_Expression& e, Representation r). | |
| Generator | point (const Linear_Expression &e=Linear_Expression::zero(), Coefficient_traits::const_reference d=Coefficient_one(), Representation r=Generator::default_representation) |
| Shorthand for Generator::point(const Linear_Expression& e, Coefficient_traits::const_reference d, Representation r). | |
| Generator | point (Representation r) |
| Shorthand for Generator::point(Representation r). | |
| Generator | point (const Linear_Expression &e, Representation r) |
| Shorthand for Generator::point(const Linear_Expression& e, Representation r). | |
| Generator | closure_point (const Linear_Expression &e=Linear_Expression::zero(), Coefficient_traits::const_reference d=Coefficient_one(), Representation r=Generator::default_representation) |
| Shorthand for Generator::closure_point(const Linear_Expression& e, Coefficient_traits::const_reference d, Representation r). | |
| Generator | closure_point (Representation r) |
| Shorthand for Generator::closure_point(Representation r). | |
| Generator | closure_point (const Linear_Expression &e, Representation r) |
| Shorthand for Generator::closure_point(const Linear_Expression& e, Representation r). | |
| bool | operator== (const Generator &x, const Generator &y) |
Returns true if and only if x is equivalent to y. | |
| bool | operator!= (const Generator &x, const Generator &y) |
Returns true if and only if x is not equivalent to y. | |
| template<typename To > | |
| bool | rectilinear_distance_assign (Checked_Number< To, Extended_Number_Policy > &r, const Generator &x, const Generator &y, Rounding_Dir dir) |
Computes the rectilinear (or Manhattan) distance between x and y. | |
| template<typename Temp , typename To > | |
| bool | rectilinear_distance_assign (Checked_Number< To, Extended_Number_Policy > &r, const Generator &x, const Generator &y, Rounding_Dir dir) |
Computes the rectilinear (or Manhattan) distance between x and y. | |
| template<typename Temp , typename To > | |
| bool | rectilinear_distance_assign (Checked_Number< To, Extended_Number_Policy > &r, const Generator &x, const Generator &y, Rounding_Dir dir, Temp &tmp0, Temp &tmp1, Temp &tmp2) |
Computes the rectilinear (or Manhattan) distance between x and y. | |
| template<typename To > | |
| bool | euclidean_distance_assign (Checked_Number< To, Extended_Number_Policy > &r, const Generator &x, const Generator &y, Rounding_Dir dir) |
Computes the euclidean distance between x and y. | |
| template<typename Temp , typename To > | |
| bool | rectilinear_distance_assign (Checked_Number< To, Extended_Number_Policy > &r, const Generator &x, const Generator &y, Rounding_Dir dir) |
Computes the euclidean distance between x and y. | |
| template<typename Temp , typename To > | |
| bool | euclidean_distance_assign (Checked_Number< To, Extended_Number_Policy > &r, const Generator &x, const Generator &y, Rounding_Dir dir, Temp &tmp0, Temp &tmp1, Temp &tmp2) |
Computes the euclidean distance between x and y. | |
| template<typename To > | |
| bool | l_infinity_distance_assign (Checked_Number< To, Extended_Number_Policy > &r, const Generator &x, const Generator &y, Rounding_Dir dir) |
Computes the distance between x and y. | |
| template<typename Temp , typename To > | |
| bool | l_infinity_distance_assign (Checked_Number< To, Extended_Number_Policy > &r, const Generator &x, const Generator &y, Rounding_Dir dir) |
Computes the distance between x and y. | |
| template<typename Temp , typename To > | |
| bool | l_infinity_distance_assign (Checked_Number< To, Extended_Number_Policy > &r, const Generator &x, const Generator &y, Rounding_Dir dir, Temp &tmp0, Temp &tmp1, Temp &tmp2) |
Computes the distance between x and y. | |
| std::ostream & | operator<< (std::ostream &s, const Generator::Type &t) |
| Output operator. | |
| Generator | line (const Linear_Expression &e, Representation r) |
| Generator | ray (const Linear_Expression &e, Representation r) |
| Generator | point (const Linear_Expression &e, Coefficient_traits::const_reference d, Representation r) |
| Generator | point (Representation r) |
| Generator | point (const Linear_Expression &e, Representation r) |
| Generator | closure_point (const Linear_Expression &e, Coefficient_traits::const_reference d, Representation r) |
| Generator | closure_point (Representation r) |
| Generator | closure_point (const Linear_Expression &e, Representation r) |
| bool | operator== (const Generator &x, const Generator &y) |
| bool | operator!= (const Generator &x, const Generator &y) |
| template<typename Temp , typename To > | |
| bool | rectilinear_distance_assign (Checked_Number< To, Extended_Number_Policy > &r, const Generator &x, const Generator &y, const Rounding_Dir dir, Temp &tmp0, Temp &tmp1, Temp &tmp2) |
| template<typename Temp , typename To > | |
| bool | rectilinear_distance_assign (Checked_Number< To, Extended_Number_Policy > &r, const Generator &x, const Generator &y, const Rounding_Dir dir) |
| template<typename To > | |
| bool | rectilinear_distance_assign (Checked_Number< To, Extended_Number_Policy > &r, const Generator &x, const Generator &y, const Rounding_Dir dir) |
| template<typename Temp , typename To > | |
| bool | euclidean_distance_assign (Checked_Number< To, Extended_Number_Policy > &r, const Generator &x, const Generator &y, const Rounding_Dir dir, Temp &tmp0, Temp &tmp1, Temp &tmp2) |
| template<typename Temp , typename To > | |
| bool | euclidean_distance_assign (Checked_Number< To, Extended_Number_Policy > &r, const Generator &x, const Generator &y, const Rounding_Dir dir) |
| template<typename To > | |
| bool | euclidean_distance_assign (Checked_Number< To, Extended_Number_Policy > &r, const Generator &x, const Generator &y, const Rounding_Dir dir) |
| template<typename Temp , typename To > | |
| bool | l_infinity_distance_assign (Checked_Number< To, Extended_Number_Policy > &r, const Generator &x, const Generator &y, const Rounding_Dir dir, Temp &tmp0, Temp &tmp1, Temp &tmp2) |
| template<typename Temp , typename To > | |
| bool | l_infinity_distance_assign (Checked_Number< To, Extended_Number_Policy > &r, const Generator &x, const Generator &y, const Rounding_Dir dir) |
| template<typename To > | |
| bool | l_infinity_distance_assign (Checked_Number< To, Extended_Number_Policy > &r, const Generator &x, const Generator &y, const Rounding_Dir dir) |
| void | swap (Generator &x, Generator &y) |
A line, ray, point or closure point.
An object of the class Generator is one of the following:
;
;
;
;where
is the dimension of the space and, for points and closure points,
is the divisor.
using the generator system
, we need to include in the finite set
even points of
that are not vertices of
. This situation is even more frequent when working with NNC polyhedra and it is the reason why we prefer to use the word `point' where other libraries use the word `vertex'.line, ray, point or closure_point) to a linear expression, representing a direction in the space; the space dimension of the generator is defined as the space dimension of the corresponding linear expression. Linear expressions used to define a generator should be homogeneous (any constant term will be simply ignored). When defining points and closure points, an optional Coefficient argument can be used as a common divisor for all the coefficients occurring in the provided linear expression; the default value for this argument is 1.x, y and z are defined as follows:
and having space dimension
: As mentioned above, the constant term of the linear expression is not relevant. Thus, the following code has the same effect: By definition, the origin of the space is not a line, so that the following code throws an exception:
: The same effect can be obtained by using the following code: Similarly, the origin
can be defined using either one of the following lines of code: Note however that the following code would have defined a different point, namely
: The following two lines of code both define the only point having space dimension zero, namely
. In the second case we exploit the fact that the first argument of the function point is optional.
specified in Example 3 above can also be obtained with the following code, where we provide a non-default value for the second argument of the function point (the divisor): Obviously, the divisor can be usefully exploited to specify points having some non-integer (but rational) coordinates. For instance, the point
can be specified by the following code: If a zero divisor is provided, an exception is thrown.
is defined by g1 is a point having coordinates
, we construct the closure point g2 having coordinates
. | typedef Expression_Hide_Last<Expression_Hide_Inhomo<Linear_Expression> > Parma_Polyhedra_Library::Generator::Expression |
The type returned by the expression() method, that provides most of the const methods in Linear_Expression.
|
inline |
Ordinary copy constructor. The representation of the new Generator will be the same as g.
|
inline |
Copy constructor with given space dimension. The representation of the new Generator will be the same as g.
|
static |
Returns the line of direction e.
| std::invalid_argument | Thrown if the homogeneous part of e represents the origin of the vector space. |
|
static |
Returns the ray of direction e.
| std::invalid_argument | Thrown if the homogeneous part of e represents the origin of the vector space. |
|
static |
Returns the point at e / d.
Both e and d are optional arguments, with default values Linear_Expression::zero() and Coefficient_one(), respectively.
| std::invalid_argument | Thrown if d is zero. |
|
static |
Returns the closure point at e / d.
Both e and d are optional arguments, with default values Linear_Expression::zero() and Coefficient_one(), respectively.
| std::invalid_argument | Thrown if d is zero. |
|
inline |
Sets the dimension of the vector space enclosing *this to space_dim .
| bool Parma_Polyhedra_Library::Generator::remove_space_dimensions | ( | const Variables_Set & | vars | ) |
Removes all the specified dimensions from the generator.
The space dimension of the variable with the highest space dimension in vars must be at most the space dimension of this.
If all dimensions with nonzero coefficients are removed from a ray or a line, it is changed into a point and this method returns false . Otherwise, it returns true .
| void Parma_Polyhedra_Library::Generator::permute_space_dimensions | ( | const std::vector< Variable > & | cycle | ) |
Permutes the space dimensions of the generator.
| cycle | A vector representing a cycle of the permutation according to which the space dimensions must be rearranged. |
The cycle vector represents a cycle of a permutation of space dimensions. For example, the permutation
can be represented by the vector containing
.
|
inline |
Shift by n positions the coefficients of variables, starting from the coefficient of v. This increases the space dimension by n.
|
inline |
Returns the coefficient of v in *this.
| std::invalid_argument | Thrown if the index of v is greater than or equal to the space dimension of *this. |
|
inline |
If *this is either a point or a closure point, returns its divisor.
| std::invalid_argument | Thrown if *this is neither a point nor a closure point. |
| bool Parma_Polyhedra_Library::Generator::is_equivalent_to | ( | const Generator & | y | ) | const |
Returns true if and only if *this and y are equivalent generators.
Generators having different space dimensions are not equivalent.
| bool Parma_Polyhedra_Library::Generator::is_equal_to | ( | const Generator & | y | ) | const |
Returns true if *this is identical to y.
This is faster than is_equivalent_to(), but it may return `false' even for equivalent generators.
|
inline |
Allows user code to read the internal expression (but note that this is a different type, not all operations are allowed).
|
related |
Output operator.
|
related |
|
related |
Shorthand for Generator::ray(const Linear_Expression& e, Representation r).
|
related |
Shorthand for Generator::point(Representation r).
|
related |
Shorthand for Generator::closure_point(Representation r).
Returns true if and only if x is equivalent to y.
Returns true if and only if x is not equivalent to y.
|
related |
Computes the rectilinear (or Manhattan) distance between x and y.
If the rectilinear distance between x and y is defined, stores an approximation of it into r and returns true; returns false otherwise.
The direction of the approximation is specified by dir.
All computations are performed using variables of type Checked_Number<To, Extended_Number_Policy>.
false is returned.
|
related |
Computes the rectilinear (or Manhattan) distance between x and y.
If the rectilinear distance between x and y is defined, stores an approximation of it into r and returns true; returns false otherwise.
The direction of the approximation is specified by dir.
All computations are performed using variables of type Checked_Number<Temp, Extended_Number_Policy>.
false is returned.
|
related |
Computes the rectilinear (or Manhattan) distance between x and y.
If the rectilinear distance between x and y is defined, stores an approximation of it into r and returns true; returns false otherwise.
The direction of the approximation is specified by dir.
All computations are performed using the temporary variables tmp0, tmp1 and tmp2.
false is returned.
|
related |
Computes the euclidean distance between x and y.
If the euclidean distance between x and y is defined, stores an approximation of it into r and returns true; returns false otherwise.
The direction of the approximation is specified by dir.
All computations are performed using variables of type Checked_Number<To, Extended_Number_Policy>.
false is returned.
|
related |
Computes the euclidean distance between x and y.
If the euclidean distance between x and y is defined, stores an approximation of it into r and returns true; returns false otherwise.
The direction of the approximation is specified by dir.
All computations are performed using variables of type Checked_Number<Temp, Extended_Number_Policy>.
false is returned.
|
related |
Computes the euclidean distance between x and y.
If the euclidean distance between x and y is defined, stores an approximation of it into r and returns true; returns false otherwise.
The direction of the approximation is specified by dir.
All computations are performed using the temporary variables tmp0, tmp1 and tmp2.
false is returned.
|
related |
Computes the
distance between x and y.
If the
distance between x and y is defined, stores an approximation of it into r and returns true; returns false otherwise.
The direction of the approximation is specified by dir.
All computations are performed using variables of type Checked_Number<To, Extended_Number_Policy>.
false is returned.
|
related |
Computes the
distance between x and y.
If the
distance between x and y is defined, stores an approximation of it into r and returns true; returns false otherwise.
The direction of the approximation is specified by dir.
All computations are performed using variables of type Checked_Number<Temp, Extended_Number_Policy>.
false is returned.
|
related |
Computes the
distance between x and y.
If the
distance between x and y is defined, stores an approximation of it into r and returns true; returns false otherwise.
The direction of the approximation is specified by dir.
All computations are performed using the temporary variables tmp0, tmp1 and tmp2.
false is returned.
|
related |
Output operator.
|
related |
|
related |
|
related |
|
related |
|
related |
|
related |
|
related |
|
related |
|
related |
|
related |
|
related |
|
related |
|
related |
|
related |
|
related |
|
related |
|
related |
|
static |
The representation used for new Generators.