C++ Language Interface

The core implementation of the Parma Polyhedra Library is written in C++. More...


Namespaces

namespace  Parma_Polyhedra_Library
 The entire library is confined to this namespace.
namespace  Parma_Polyhedra_Library::IO_Operators
 All input/output operators are confined to this namespace.
namespace  Parma_Polyhedra_Library::Checked
 Types and functions implementing checked numbers.
namespace  Parma_Polyhedra_Library::Implementation
 Implementation related data and functions.
namespace  Parma_Polyhedra_Library::Interfaces
 Data and functions related to foreign language interfaces.
namespace  Parma_Polyhedra_Library::Interfaces::C
 Data and functions related to the C foreign language interface.
namespace  Parma_Polyhedra_Library::Interfaces::Java
 Data and functions related to the Java foreign language interface.
namespace  Parma_Polyhedra_Library::Interfaces::OCaml
 Data and functions related to the OCaml foreign language interface.
namespace  Parma_Polyhedra_Library::Interfaces::Prolog
 Data and functions related to the Prolog foreign language interfaces.
namespace  Parma_Polyhedra_Library::Interfaces::Prolog::Ciao
 Data and functions related to the Ciao Prolog foreign language interface.
namespace  Parma_Polyhedra_Library::Interfaces::Prolog::GNU
 Data and functions related to the GNU Prolog foreign language interface.
namespace  Parma_Polyhedra_Library::Interfaces::Prolog::SICStus
 Data and functions related to the SICStus foreign language interface.
namespace  Parma_Polyhedra_Library::Interfaces::Prolog::SWI
 Data and functions related to the SWI-Prolog foreign language interface.
namespace  Parma_Polyhedra_Library::Interfaces::Prolog::XSB
 Data and functions related to the XSB foreign language interface.
namespace  Parma_Polyhedra_Library::Interfaces::Prolog::YAP
 Data and functions related to the YAP foreign language interface.
namespace  std
 The standard C++ namespace.

Classes

struct  Parma_Polyhedra_Library::Compile_Time_Check< true >
 A class that is only defined if b evaluates to true. More...
struct  Parma_Polyhedra_Library::Bool< b >
 A class holding a constant called value that evaluates to b. More...
struct  Parma_Polyhedra_Library::True
 A class holding a constant called value that evaluates to true. More...
struct  Parma_Polyhedra_Library::False
 A class holding a constant called value that evaluates to false. More...
struct  Parma_Polyhedra_Library::Is_Same< T1, T2 >
 A class holding a constant called value that evaluates to true if and only if T1 is the same type as T2. More...
struct  Parma_Polyhedra_Library::Is_Same< T, T >
 A class holding a constant called value that evaluates to true if and only if T1 is the same type as T2. More...
struct  Parma_Polyhedra_Library::Is_Same_Or_Derived< Base, Derived >
 A class holding a constant called value that evaluates to true if and only if Base is the same type as Derived or Derived is a class derived from Base. More...
struct  Parma_Polyhedra_Library::Enable_If< b, T >
 A class that provides a type member called type equivalent to T if and only if b is true. More...
struct  Parma_Polyhedra_Library::Enable_If< true, T >
 A class that provides a type member called type equivalent to T if and only if b is true. More...
struct  Parma_Polyhedra_Library::float_ieee754_single
struct  Parma_Polyhedra_Library::float_ieee754_double
struct  Parma_Polyhedra_Library::float_intel_double_extended
struct  Parma_Polyhedra_Library::float_ieee754_quad
class  Parma_Polyhedra_Library::Float< T >
struct  Parma_Polyhedra_Library::Checked_Number_Default_Policy
struct  Parma_Polyhedra_Library::Extended_Number_Policy
struct  Parma_Polyhedra_Library::WRD_Extended_Number_Policy
struct  Parma_Polyhedra_Library::Check_Overflow_Policy< T >
 A policy checking for overflows. More...
struct  Parma_Polyhedra_Library::Native_Checked_From_Wrapper< T, typename Enable_If< Is_Native< T >::value >::type >
struct  Parma_Polyhedra_Library::Native_Checked_From_Wrapper< Checked_Number< T, P > >
struct  Parma_Polyhedra_Library::Native_Checked_To_Wrapper< T, typename Enable_If< Is_Native< T >::value >::type >
struct  Parma_Polyhedra_Library::Native_Checked_To_Wrapper< Checked_Number< T, P > >
struct  Parma_Polyhedra_Library::Is_Checked< T >
struct  Parma_Polyhedra_Library::Is_Checked< Checked_Number< T, P > >
struct  Parma_Polyhedra_Library::Is_Native_Or_Checked< T >
class  Parma_Polyhedra_Library::Checked_Number< T, Policy >
 A wrapper for numeric types implementing a given policy. More...
struct  Parma_Polyhedra_Library::Slow_Copy< Checked_Number< T, P > >
struct  Parma_Polyhedra_Library::Coefficient_traits_template< GMP_Integer >
 Coefficient traits specialization for unbounded integers. More...
struct  Parma_Polyhedra_Library::Coefficient_traits_template< Coefficient >
 Coefficient traits. More...
struct  Parma_Polyhedra_Library::Checked_Number_Transparent_Policy< T >
class  Parma_Polyhedra_Library::Init
 Class for initialization and finalization. More...
class  Parma_Polyhedra_Library::Throwable
 User objects the PPL can throw. More...
struct  Parma_Polyhedra_Library::From_Covering_Box
 A tag class. More...
struct  Parma_Polyhedra_Library::Recycle_Input
 A tag class. More...
class  Parma_Polyhedra_Library::Row_Impl_Handler
 The handler of the actual Row implementation. More...
class  Parma_Polyhedra_Library::Row
 A finite sequence of coefficients. More...
class  Parma_Polyhedra_Library::Row::Flags
 Wrapper class to represent a set of flags with bits in a native unsigned integral type. More...
class  Parma_Polyhedra_Library::Row_Impl_Handler::Impl
 The actual implementation of a Row object. More...
class  Parma_Polyhedra_Library::Matrix
 A 2-dimensional matrix of coefficients. More...
class  Parma_Polyhedra_Library::Matrix::const_iterator
 An iterator over a matrix. More...
class  Parma_Polyhedra_Library::Linear_Row
 The base class for linear expressions, constraints and generators. More...
class  Parma_Polyhedra_Library::Linear_Row::Flags
 The type of the object to which the coefficients refer to, encoding both topology and kind. More...
class  Parma_Polyhedra_Library::Linear_System
 The base class for systems of constraints and generators. More...
struct  Parma_Polyhedra_Library::Linear_System::With_Pending
 A tag class. More...
class  Parma_Polyhedra_Library::Linear_System::With_Bit_Matrix_iterator
 An iterator keeping a Linear_System consistent with a Bit_Matrix. More...
class  Parma_Polyhedra_Library::MIP_Problem
 A Mixed Integer (linear) Programming problem. More...
class  Parma_Polyhedra_Library::Bit_Row
 A row in a matrix of bits. More...
class  Parma_Polyhedra_Library::Bit_Matrix
 A matrix of bits. More...
struct  Parma_Polyhedra_Library::Bit_Matrix::Bit_Row_Less_Than
 Ordering predicate (used when implementing the sort algorithm). More...
class  Parma_Polyhedra_Library::Variable
 A dimension of the vector space. More...
struct  Parma_Polyhedra_Library::Variable::Compare
 Binary predicate defining the total ordering on variables. More...
class  Parma_Polyhedra_Library::Linear_Expression
 A linear expression. More...
class  Parma_Polyhedra_Library::Constraint
 A linear equality or inequality. More...
class  Parma_Polyhedra_Library::Congruence
 A linear congruence. More...
class  Parma_Polyhedra_Library::Generator
 A line, ray, point or closure point. More...
class  Parma_Polyhedra_Library::Grid_Generator
 A grid line, parameter or grid point. More...
class  Parma_Polyhedra_Library::Constraint_System
 A system of constraints. More...
class  Parma_Polyhedra_Library::Constraint_System::const_iterator
 An iterator over a system of constraints. More...
class  Parma_Polyhedra_Library::Congruence_System
 A system of congruences. More...
class  Parma_Polyhedra_Library::Congruence_System::const_iterator
 An iterator over a system of congruences. More...
class  Parma_Polyhedra_Library::Generator_System
 A system of generators. More...
class  Parma_Polyhedra_Library::Generator_System::const_iterator
 An iterator over a system of generators. More...
class  Parma_Polyhedra_Library::Grid_Generator_System
 A system of grid generators. More...
class  Parma_Polyhedra_Library::Grid_Generator_System::const_iterator
 An iterator over a system of grid generators. More...
class  Parma_Polyhedra_Library::Scalar_Products
 A class implementing various scalar product functions. More...
class  Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign
 Scalar product sign function object depending on topology. More...
class  Status
 A conjunctive assertion about a polyhedron. More...
class  Parma_Polyhedra_Library::Polyhedron
 The base class for convex polyhedra. More...
class  Parma_Polyhedra_Library::Polyhedron::Status
 A conjunctive assertion about a polyhedron. More...
class  Parma_Polyhedra_Library::Grid
 A grid. More...
class  Parma_Polyhedra_Library::Poly_Con_Relation
 The relation between a polyhedron and a constraint. More...
class  Parma_Polyhedra_Library::Poly_Gen_Relation
 The relation between a polyhedron and a generator. More...
class  Parma_Polyhedra_Library::Interval< Boundary, Info >
 A generic, not necessarily closed, possibly restricted interval. More...
class  Parma_Polyhedra_Library::C_Polyhedron
 A closed convex polyhedron. More...
class  Parma_Polyhedra_Library::NNC_Polyhedron
 A not necessarily closed convex polyhedron. More...
class  Parma_Polyhedra_Library::Widening_Function< PH >
 Wraps a widening method into a function object. More...
class  Parma_Polyhedra_Library::Limited_Widening_Function< PH, CS >
 Wraps a limited widening method into a function object. More...
class  Parma_Polyhedra_Library::BHRZ03_Certificate
 The convergence certificate for the BHRZ03 widening operator. More...
struct  Parma_Polyhedra_Library::BHRZ03_Certificate::Compare
 A total ordering on BHRZ03 certificates. More...
class  Parma_Polyhedra_Library::H79_Certificate
 A convergence certificate for the H79 widening operator. More...
struct  Parma_Polyhedra_Library::H79_Certificate::Compare
 A total ordering on H79 certificates. More...
class  Parma_Polyhedra_Library::Grid_Certificate
 The convergence certificate for the Grid widening operator. More...
class  Parma_Polyhedra_Library::Determinate< PS >
 Wraps a PPL class into a determinate constraint system interface. More...
class  Parma_Polyhedra_Library::Determinate< PS >::Binary_Operator_Assign_Lifter< Binary_Operator_Assign >
 A function adapter for the Determinate class. More...
class  Parma_Polyhedra_Library::Determinate< PS >::Rep
 The possibly shared representation of a Determinate object. More...
class  Parma_Polyhedra_Library::iterator_to_const< Container >
 An iterator on a sequence of read-only objects. More...
class  Parma_Polyhedra_Library::const_iterator_to_const< Container >
 A const_iterator on a sequence of read-only objects. More...
class  Parma_Polyhedra_Library::Powerset< D >
 The powerset construction on a base-level domain. More...
class  Parma_Polyhedra_Library::Pointset_Powerset< PS >
 The powerset construction instantiated on PPL pointset domains. More...
class  Parma_Polyhedra_Library::Smash_Reduction< D1, D2 >
 This class provides the reduction method for the Smash_Product domain. More...
class  Parma_Polyhedra_Library::Constraints_Reduction< D1, D2 >
 This class provides the reduction method for the Constraints_Product domain. More...
class  Parma_Polyhedra_Library::No_Reduction< D1, D2 >
class  Parma_Polyhedra_Library::Partially_Reduced_Product< D1, D2, R >
 The partially reduced product of two abstractions. More...
class  Parma_Polyhedra_Library::Box< ITV >
 A not necessarily closed, iso-oriented hyperrectangle. More...
class  Parma_Polyhedra_Library::DB_Row_Impl_Handler< T >
 The handler of the actual DB_Row implementation. More...
class  Parma_Polyhedra_Library::DB_Row< T >
 The base class for the single rows of matrices. More...
class  Parma_Polyhedra_Library::DB_Row_Impl_Handler< T >::Impl
 The real implementation of a DB_Row object. More...
class  Parma_Polyhedra_Library::DB_Matrix< T >
 The base class for the square matrices. More...
class  Parma_Polyhedra_Library::DB_Matrix< T >::const_iterator
 A read-only iterator over the rows of the matrix. More...
class  Parma_Polyhedra_Library::BD_Shape< T >
 A bounded difference shape. More...
class  Parma_Polyhedra_Library::BD_Shape< T >::Status
 A conjunctive assertion about a BD_Shape<T> object. More...
class  Parma_Polyhedra_Library::GMP_Integer
 Unbounded integers as provided by the GMP library. More...

Defines

#define PPL_VERSION_MAJOR   0
 The major number of the PPL version.
#define PPL_VERSION_MINOR   10
 The minor number of the PPL version.
#define PPL_VERSION_REVISION   0
 The revision number of the PPL version.
#define PPL_VERSION_BETA   34
 The beta number of the PPL version. This is zero for official releases and nonzero for development snapshots.
#define PPL_VERSION   "0.10pre34"
 A string containing the PPL version.
#define const_bool_nodef(name, value)   enum { name = (value) }
 Declares a per-class constant of type bool, called name and with value value.
#define const_int_nodef(name, value)   enum { name = (value) }
 Declares a per-class constant of type int, called name and with value value.
#define const_value_nodef(type, name, value)
 Declares a per-class constant of type type, called name and with value value. The value of the constant is accessible by means of the syntax name().
#define const_ref_nodef(type, name, value)
 Declares a per-class constant of type type, called name and with value value. A constant reference to the constant is accessible by means of the syntax name().
#define COMPILE_TIME_CHECK(e, msg)   COMPILE_TIME_CHECK_AUX(e, __LINE__)
 Produces a compilation error if the compile-time constant e does not evaluate to true.

Typedefs

typedef PPL_COEFFICIENT_TYPE Parma_Polyhedra_Library::Coefficient
 An alias for easily naming the type of PPL coefficients.
typedef
Coefficient_traits_template
< Coefficient > 
Parma_Polyhedra_Library::Coefficient_traits
 An alias for easily naming the coefficient traits.
typedef size_t Parma_Polyhedra_Library::dimension_type
 An unsigned integral type for representing space dimensions.
typedef size_t Parma_Polyhedra_Library::memory_size_type
 An unsigned integral type for representing memory size in bytes.

Enumerations

enum  Parma_Polyhedra_Library::Degenerate_Element { Parma_Polyhedra_Library::UNIVERSE, Parma_Polyhedra_Library::EMPTY }
 Kinds of degenerate abstract elements. More...
enum  Parma_Polyhedra_Library::Relation_Symbol {
  Parma_Polyhedra_Library::LESS_THAN, Parma_Polyhedra_Library::LESS_OR_EQUAL, Parma_Polyhedra_Library::EQUAL, Parma_Polyhedra_Library::GREATER_OR_EQUAL,
  Parma_Polyhedra_Library::GREATER_THAN, Parma_Polyhedra_Library::NOT_EQUAL
}
 Relation symbols. More...
enum  Parma_Polyhedra_Library::Complexity_Class { Parma_Polyhedra_Library::POLYNOMIAL_COMPLEXITY, Parma_Polyhedra_Library::SIMPLEX_COMPLEXITY, Parma_Polyhedra_Library::ANY_COMPLEXITY }
 Complexity pseudo-classes. More...
enum  Parma_Polyhedra_Library::Optimization_Mode { Parma_Polyhedra_Library::MINIMIZATION, Parma_Polyhedra_Library::MAXIMIZATION }
 Possible optimization modes. More...
enum  Parma_Polyhedra_Library::Topology { Parma_Polyhedra_Library::NECESSARILY_CLOSED = 0, Parma_Polyhedra_Library::NOT_NECESSARILY_CLOSED = 1 }
 Kinds of polyhedra domains. More...
enum  Parma_Polyhedra_Library::MIP_Problem_Status { Parma_Polyhedra_Library::UNFEASIBLE_MIP_PROBLEM, Parma_Polyhedra_Library::UNBOUNDED_MIP_PROBLEM, Parma_Polyhedra_Library::OPTIMIZED_MIP_PROBLEM }
 Possible outcomes of the MIP_Problem solver. More...

Variables

const Throwable *volatile Parma_Polyhedra_Library::abandon_expensive_computations = 0
 A pointer to an exception object.

Detailed Description

The core implementation of the Parma Polyhedra Library is written in C++.

See Namespace, Hierarchical and Compound indexes for additional information about each single data type.


Define Documentation

#define COMPILE_TIME_CHECK ( e,
msg   )     COMPILE_TIME_CHECK_AUX(e, __LINE__)

Produces a compilation error if the compile-time constant e does not evaluate to true.

Definition at line 133 of file meta_programming.hh.

Referenced by Parma_Polyhedra_Library::swap().

#define const_bool_nodef ( name,
value   )     enum { name = (value) }

Declares a per-class constant of type bool, called name and with value value.

Differently from static constants, name needs not (and cannot) be defined (for static constants, the need for a further definition is mandated by Section 9.4.2/4 of the C++ standard).

Definition at line 41 of file meta_programming.hh.

#define const_int_nodef ( name,
value   )     enum { name = (value) }

Declares a per-class constant of type int, called name and with value value.

Differently from static constants, name needs not (and cannot) be defined (for static constants, the need for a further definition is mandated by Section 9.4.2/4 of the C++ standard).

Definition at line 55 of file meta_programming.hh.

#define const_ref_nodef ( type,
name,
value   ) 

Value:

static const type& name() {                                             \
    static type name(value);                                            \
    return name;                                                        \
  }
Declares a per-class constant of type type, called name and with value value. A constant reference to the constant is accessible by means of the syntax name().

Differently from static constants, name needs not (and cannot) be defined (for static constants, the need for a further definition is mandated by Section 9.4.2/4 of the C++ standard).

Definition at line 87 of file meta_programming.hh.

#define const_value_nodef ( type,
name,
value   ) 

Value:

static type name() {                            \
    return value;                               \
  }
Declares a per-class constant of type type, called name and with value value. The value of the constant is accessible by means of the syntax name().

Differently from static constants, name needs not (and cannot) be defined (for static constants, the need for a further definition is mandated by Section 9.4.2/4 of the C++ standard).

Definition at line 70 of file meta_programming.hh.

#define PPL_VERSION   "0.10pre34"

A string containing the PPL version.

Let M and m denote the numbers associated to PPL_VERSION_MAJOR and PPL_VERSION_MINOR, respectively. The format of PPL_VERSION is M "." m if both PPL_VERSION_REVISION (r) and PPL_VERSION_BETA (b)are zero, M "." m "pre" b if PPL_VERSION_REVISION is zero and PPL_VERSION_BETA is not zero, M "." m "." r if PPL_VERSION_REVISION is not zero and PPL_VERSION_BETA is zero, M "." m "." r "pre" b if neither PPL_VERSION_REVISION nor PPL_VERSION_BETA are zero.

Definition at line 58 of file version.hh.

#define PPL_VERSION_BETA   34

The beta number of the PPL version. This is zero for official releases and nonzero for development snapshots.

Definition at line 44 of file version.hh.

Referenced by Parma_Polyhedra_Library::version_beta().

#define PPL_VERSION_MAJOR   0

The major number of the PPL version.

Definition at line 29 of file version.hh.

Referenced by Parma_Polyhedra_Library::version_major().

#define PPL_VERSION_MINOR   10

The minor number of the PPL version.

Definition at line 33 of file version.hh.

Referenced by Parma_Polyhedra_Library::version_minor().

#define PPL_VERSION_REVISION   0

The revision number of the PPL version.

Definition at line 37 of file version.hh.

Referenced by Parma_Polyhedra_Library::version_revision().


Typedef Documentation

typedef PPL_COEFFICIENT_TYPE Parma_Polyhedra_Library::Coefficient

An alias for easily naming the type of PPL coefficients.

Objects of type Coefficient are used to implement the integral valued coefficients occurring in linear expressions, constraints, generators, intervals, bounding boxes and so on. Depending on the chosen configuration options (see file README.configure), a Coefficient may actually be:

  • The GMP_Integer type, which in turn is an alias for the mpz_class type implemented by the C++ interface of the GMP library (this is the default configuration);
  • An instance of the Checked_Number class template: with its default policy (Checked_Number_Default_Policy), this implements overflow detection on top of a native integral type (available template instances include checked integers having 8, 16, 32 or 64 bits); with the Checked_Number_Transparent_Policy, this is a wrapper for native integral types with no overflow detection (available template instances are as above).

Definition at line 89 of file Coefficient.types.hh.

typedef Coefficient_traits_template<Coefficient> Parma_Polyhedra_Library::Coefficient_traits

An alias for easily naming the coefficient traits.

Definition at line 95 of file Coefficient.types.hh.

An unsigned integral type for representing space dimensions.

Definition at line 21 of file globals.types.hh.

An unsigned integral type for representing memory size in bytes.

Definition at line 25 of file globals.types.hh.


Enumeration Type Documentation

Complexity pseudo-classes.

Enumerator:
POLYNOMIAL_COMPLEXITY  Worst-case polynomial complexity.
SIMPLEX_COMPLEXITY  Worst-case exponential complexity but typically polynomial behavior.
ANY_COMPLEXITY  Any complexity.

Definition at line 55 of file globals.types.hh.

00055                       {
00057   POLYNOMIAL_COMPLEXITY,
00059   SIMPLEX_COMPLEXITY,
00061   ANY_COMPLEXITY
00062 };

Kinds of degenerate abstract elements.

Enumerator:
UNIVERSE  The universe element, i.e., the whole vector space.
EMPTY  The empty element, i.e., the empty set.

Definition at line 29 of file globals.types.hh.

00029                         {
00031   UNIVERSE,
00033   EMPTY
00034 };

Possible outcomes of the MIP_Problem solver.

Enumerator:
UNFEASIBLE_MIP_PROBLEM  The problem is unfeasible.
UNBOUNDED_MIP_PROBLEM  The problem is unbounded.
OPTIMIZED_MIP_PROBLEM  The problem has an optimal solution.

Definition at line 19 of file MIP_Problem.types.hh.

Possible optimization modes.

Enumerator:
MINIMIZATION  Minimization is requested.
MAXIMIZATION  Maximization is requested.

Definition at line 66 of file globals.types.hh.

00066                        {
00068   MINIMIZATION,
00070   MAXIMIZATION
00071 };

Relation symbols.

Enumerator:
LESS_THAN  Less than.
LESS_OR_EQUAL  Less than or equal to.
EQUAL  Equal to.
GREATER_OR_EQUAL  Greater than or equal to.
GREATER_THAN  Greater than.
NOT_EQUAL  Not equal to.

Definition at line 38 of file globals.types.hh.

00038                      {
00040   LESS_THAN,
00042   LESS_OR_EQUAL,
00044   EQUAL,
00046   GREATER_OR_EQUAL,
00048   GREATER_THAN,
00050   NOT_EQUAL
00051 };

Kinds of polyhedra domains.

Enumerator:
NECESSARILY_CLOSED 
NOT_NECESSARILY_CLOSED 

Definition at line 21 of file Topology.hh.

00021               {
00022   NECESSARILY_CLOSED = 0,
00023   NOT_NECESSARILY_CLOSED = 1
00024 };


Variable Documentation

A pointer to an exception object.

This pointer, which is initialized to zero, is repeatedly checked along any super-linear (i.e., computationally expensive) computation path in the library. When it is found nonzero the exception it points to is thrown. In other words, making this pointer point to an exception (and leaving it in this state) ensures that the library will return control to the client application, possibly by throwing the given exception, within a time that is a linear function of the size of the representation of the biggest object (powerset of polyhedra, polyhedron, system of constraints or generators) on which the library is operating upon.

Note:
The only sensible way to assign to this pointer is from within a signal handler or from a parallel thread. For this reason, the library, apart from ensuring that the pointer is initially set to zero, never assigns to it. In particular, it does not zero it again when the exception is thrown: it is the client's responsibility to do so.

Definition at line 31 of file globals.cc.

Referenced by Parma_Polyhedra_Library::Pointset_Powerset< PS >::concatenate_assign(), Parma_Polyhedra_Library::maybe_abandon(), and Parma_Polyhedra_Library::Powerset< D >::omega_reduce().


Generated on Sat Oct 11 10:40:49 2008 for PPL by  doxygen 1.5.6