The Parma Polyhedra Library C Language Interface User's Manual (Version 1.2)
The Parma Polyhedra Library C Language Interface User's Manual (Version 1.2)
C Language Interface
User’s Manual∗
(version 1.2)
Roberto Bagnara†
Patricia M. Hill‡
Enea Zaffanella§
Abramo Bagnara¶
February 11, 2016
∗ This work has been partly supported by: University of Parma’s FIL scientific research project (ex 60%) “Pure and Applied Math-
ematics”; MURST project “Automatic Program Certification by Abstract Interpretation”; MURST project “Abstract Interpretation,
Type Systems and Control-Flow Analysis”; MURST project “Automatic Aggregate- and Number-Reasoning for Computing: from
Decision Algorithms to Constraint Programming with Multisets, Sets, and Maps”; MURST project “Constraint Based Verification
of Reactive Systems”; MURST project “Abstract Interpretation: Design and Applications”; EPSRC project “Numerical Domains for
Software Analysis”; EPSRC project “Geometric Abstractions for Scalable Program Analyzers”.
† [email protected], Department of Mathematics, University of Parma, Italy, and BUGSENG srl.
‡ [email protected], BUGSENG srl.
§ [email protected], Department of Mathematics, University of Parma, Italy, and BUGSENG srl.
¶ [email protected], BUGSENG srl.
Copyright © 2001–2010 Roberto Bagnara ([email protected])
Copyright © 2010–2016 BUGSENG srl (http://bugseng.com)
This document describes the Parma Polyhedra Library (PPL).
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free
Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with
no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included
in the section entitled “GNU Free Documentation License”.
The PPL is free software; you can redistribute it and/or modify it under the terms of the GNU General
Public License as published by the Free Software Foundation; either version 3 of the License, or (at your
option) any later version. A copy of the license is included in the section entitled “GNU GENERAL
PUBLIC LICENSE”.
The PPL is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
the GNU General Public License for more details.
If you have not received a copy of one or both the above mentioned licenses along with the PPL, write
to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1307, USA.
For the most up-to-date information see the Parma Polyhedra Library site:
http://bugseng.com/products/ppl/
3
Contents
1 Main Page 1
4 Module Index 15
4.1 Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
5 Class Index 15
5.1 Class List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
6 Module Documentation 17
6.1 C Language Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
6.2 Library Initialization and Finalization . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
6.3 Version Checking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
6.4 Error Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
6.5 Timeout Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
6.6 Library Datatypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
7 Class Documentation 31
7.1 ppl Artificial Parameter Sequence const iterator tag Interface Reference . . . . . . . . 31
7.2 ppl Artificial Parameter tag Interface Reference . . . . . . . . . . . . . . . . . . . . . 31
7.3 ppl Coefficient tag Interface Reference . . . . . . . . . . . . . . . . . . . . . . . . . . 32
7.4 ppl Congruence System const iterator tag Interface Reference . . . . . . . . . . . . . . 33
7.5 ppl Congruence System tag Interface Reference . . . . . . . . . . . . . . . . . . . . . 34
7.6 ppl Congruence tag Interface Reference . . . . . . . . . . . . . . . . . . . . . . . . . . 36
7.7 ppl Constraint System const iterator tag Interface Reference . . . . . . . . . . . . . . 37
7.8 ppl Constraint System tag Interface Reference . . . . . . . . . . . . . . . . . . . . . . 37
7.9 ppl Constraint tag Interface Reference . . . . . . . . . . . . . . . . . . . . . . . . . . 39
7.10 ppl Generator System const iterator tag Interface Reference . . . . . . . . . . . . . . . 40
7.11 ppl Generator System tag Interface Reference . . . . . . . . . . . . . . . . . . . . . . 41
7.12 ppl Generator tag Interface Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
7.13 ppl Grid Generator System const iterator tag Interface Reference . . . . . . . . . . . . 43
7.14 ppl Grid Generator System tag Interface Reference . . . . . . . . . . . . . . . . . . . 44
7.15 ppl Grid Generator tag Interface Reference . . . . . . . . . . . . . . . . . . . . . . . . 46
7.16 ppl Linear Expression tag Interface Reference . . . . . . . . . . . . . . . . . . . . . . 47
7.17 ppl MIP Problem tag Interface Reference . . . . . . . . . . . . . . . . . . . . . . . . . 49
7.18 ppl PIP Decision Node tag Interface Reference . . . . . . . . . . . . . . . . . . . . . 53
7.19 ppl PIP Problem tag Interface Reference . . . . . . . . . . . . . . . . . . . . . . . . . 54
7.20 ppl PIP Solution Node tag Interface Reference . . . . . . . . . . . . . . . . . . . . . . 57
7.21 ppl PIP Tree Node tag Interface Reference . . . . . . . . . . . . . . . . . . . . . . . . 58
7.22 ppl Pointset Powerset C Polyhedron const iterator tag Interface Reference . . . . . . . 59
7.23 ppl Pointset Powerset C Polyhedron iterator tag Interface Reference . . . . . . . . . . 60
7.24 ppl Pointset Powerset C Polyhedron tag Interface Reference . . . . . . . . . . . . . . 61
7.25 ppl Polyhedron tag Interface Reference . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Index 79
The PPL C Language Interface User’s Manual (version 1.2). See http://bugseng.com for more information.
1 Main Page
All the declarations needed for using the PPL's C interface (preprocessor symbols, data types, variables and
functions) are collected in the header file ppl c.h. This file, which is designed to work with pre-ANSI
and ANSI C compilers as well as C99 and C++ compilers, should be included, either directly or via some
other header file, with the directive
#include <ppl c.h>
If this directive does not work, then your compiler is unable to find the file ppl c.h. So check that the
library is installed (if it is not installed, you may want to make install, perhaps with root privileges)
in the right place (if not you may want to reconfigure the library using the appropriate pathname for the
--prefix option); and that your compiler knows where it is installed (if not you should add the path to
the directory where ppl c.h is located to the compiler's include file search path; this is usually done with
the -I option).
The name space of the PPL's C interface is PPL ∗ for preprocessor symbols, enumeration values and
variables; and ppl ∗ for data types and function names. The interface systematically uses opaque data
types (generic pointers that completely hide the internal representations from the client code) and provides
all required access functions. By using just the interface, the client code can exploit all the functionalities
of the library yet avoid directly manipulating the library's data structures. The advantages are that (1)
applications do not depend on the internals of the library (these may change from release to release), and
(2) the interface invariants can be thoroughly checked (by the access functions).
Note
All functions taking as input argument an opaque pointer datatype assume that such an argument is
actually referring to a valid PPL object. For instance, a function with an argument having type ppl←-
MIP Problem t will expect a valid MIP Problem object, previously initialized by calling, e.g.,
ppl new MIP Problem. If that is not the case (e.g., if a null pointer is passed in), the behavior is
undefined.
The PPL's C interface is initialized by means of the ppl initialize function. This function must be
called before using any other interface of the library. The application can release the resources allocated
by the library by calling the ppl finalize function. After this function is called no other interface of
the library may be used until the interface is re-initialized using ppl initialize.
Any application using the PPL should make sure that only the intended version(s) of the library are
ever used. The version used can be checked at compile-time thanks to the macros PPL VERSION ←-
MAJOR, PPL VERSION MINOR, PPL VERSION REVISION and PPL VERSION BETA, which give,
respectively major, minor, revision and beta numbers of the PPL version. This is an example of their use:
#if PPL VERSION MAJOR == 0 && PPL VERSION MINOR < 6
# error "PPL version 0.6 or following is required"
#endif
Compile-time checking, however, is not normally enough, particularly in an environment where there is
dynamic linking. Run-time checking can be performed by means of the functions ppl version major,
ppl version minor, ppl version revision, and ppl version beta. The PPL's C interface
also provides functions ppl version, returning character string containing the full version number, and
ppl banner, returning a string that, in addition, provides (pointers to) other useful information for the
library user.
All programs using the PPL's C interface must link with the following libraries: libppl c (PP←-
L's C interface), libppl (PPL's core), libgmpxx (GMP's C++ interface), and libgmp (GMP's library
core). On most Unix-like systems, this is done by adding -lppl c, -lppl, -lgmpxx, and -lgmp to
the compiler's or linker's command line. For example:
gcc myprogram.o -lppl_c -lppl -lgmpxx -lgmp
If this does not work, it means that your compiler/linker is not finding the libraries where it expects. Again,
this could be because you forgot to install the library or you installed it in a non-standard location. In the
1
latter case you will need to use the appropriate options (usually -L) and, if you use shared libraries, some
sort of run-time path selection mechanisms. Consult your compiler's documentation for details. Notice
that the PPL is built using Libtool and an application can exploit this fact to significantly simplify the
linking phase. See Libtool's documentation for details. Those working under Linux can find a lot of useful
information on how to use program libraries (including static, shared, and dynamically loaded libraries) in
the Program Library HOWTO.
For examples on how to use the functions provided by the C interface, you are referred to the directory
demos/ppl lpsol/ in the source distribution. It contains a Mixed Integer (Linear) Programming solver
written in C. In order to use this solver you will need to install GLPK (the GNU Linear Programming Kit):
this is used to read linear programs in MPS format.
Preamble
The GNU General Public License is a free, copyleft license for software and other kinds of works.
The licenses for most software and other practical works are designed to take away your freedom to
share and change the works. By contrast, the GNU General Public License is intended to guarantee your
freedom to share and change all versions of a program–to make sure it remains free software for all its
users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it
applies also to any other work released this way by its authors. You can apply it to your programs, too.
When we speak of free software, we are referring to freedom, not price. Our General Public Licenses
are designed to make sure that you have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you want it, that you can change the software
or use pieces of it in new free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you these rights or asking you to sur-
render the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on
to the recipients the same freedoms that you received. You must make sure that they, too, receive or can
get the source code. And you must show them these terms so they know their rights.
Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the
software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this
free software. For both users' and authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to authors of previous versions.
Some devices are designed to deny users access to install or run modified versions of the software inside
them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting
users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products
for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this
version of the GPL to prohibit the practice for those products. If such problems arise substantially in other
domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed
to protect the freedom of users.
Finally, every program is threatened constantly by software patents. States should not allow patents to
restrict development and use of software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could make it effectively proprietary. To
prevent this, the GPL assures that patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and modification follow.
2
TERMS AND CONDITIONS
0. Definitions.
“This License” refers to version 3 of the GNU General Public License.
“Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor
masks.
“The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed
as “you”. “Licensees” and “recipients” may be individuals or organizations.
To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright
permission, other than the making of an exact copy. The resulting work is called a “modified version” of
the earlier work or a work “based on” the earlier work.
A “covered work” means either the unmodified Program or a work based on the Program.
To “propagate” a work means to do anything with it that, without permission, would make you directly
or secondarily liable for infringement under applicable copyright law, except executing it on a computer
or modifying a private copy. Propagation includes copying, distribution (with or without modification),
making available to the public, and in some countries other activities as well.
To “convey” a work means any kind of propagation that enables other parties to make or receive copies.
Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a con-
venient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the
user that there is no warranty for the work (except to the extent that warranties are provided), that licensees
may convey the work under this License, and how to view a copy of this License. If the interface presents
a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.
1. Source Code.
The “source code” for a work means the preferred form of the work for making modifications to it. “Object
code” means any non-source form of a work.
A “Standard Interface” means an interface that either is an official standard defined by a recognized
standards body, or, in the case of interfaces specified for a particular programming language, one that is
widely used among developers working in that language.
The “System Libraries” of an executable work include anything, other than the work as a whole, that
(a) is included in the normal form of packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that Major Component, or to implement a
Standard Interface for which an implementation is available to the public in source code form. A “Major
Component”, in this context, means a major essential component (kernel, window system, and so on) of
the specific operating system (if any) on which the executable work runs, or a compiler used to produce the
work, or an object code interpreter used to run it.
The “Corresponding Source” for a work in object code form means all the source code needed to
generate, install, and (for an executable work) run the object code and to modify the work, including
scripts to control those activities. However, it does not include the work's System Libraries, or general-
purpose tools or generally available free programs which are used unmodified in performing those activities
but which are not part of the work. For example, Corresponding Source includes interface definition files
associated with source files for the work, and the source code for shared libraries and dynamically linked
subprograms that the work is specifically designed to require, such as by intimate data communication or
control flow between those subprograms and other parts of the work.
The Corresponding Source need not include anything that users can regenerate automatically from other
parts of the Corresponding Source.
The Corresponding Source for a work in source code form is that same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of copyright on the Program, and are irrevo-
cable provided the stated conditions are met. This License explicitly affirms your unlimited permission to
3
run the unmodified Program. The output from running a covered work is covered by this License only if
the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use
or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not convey, without conditions so long
as your license otherwise remains in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you with facilities for running those
works, provided that you comply with the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works for you must do so exclusively on
your behalf, under your direction and control, on terms that prohibit them from making any copies of your
copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under the conditions stated below. Subli-
censing is not allowed; section 10 makes it unnecessary.
• a) The work must carry prominent notices stating that you modified it, and giving a relevant date.
• b) The work must carry prominent notices stating that it is released under this License and any
conditions added under section 7. This requirement modifies the requirement in section 4 to “keep
intact all notices”.
• c) You must license the entire work, as a whole, under this License to anyone who comes into pos-
session of a copy. This License will therefore apply, along with any applicable section 7 additional
terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License
gives no permission to license the work in any other way, but it does not invalidate such permission
if you have separately received it.
• d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however,
if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work
need not make them do so.
4
A compilation of a covered work with other separate and independent works, which are not by their
nature extensions of the covered work, and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its
resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what
the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to
apply to the other parts of the aggregate.
• a) Convey the object code in, or embodied in, a physical product (including a physical distribution
medium), accompanied by the Corresponding Source fixed on a durable physical medium customar-
ily used for software interchange.
• b) Convey the object code in, or embodied in, a physical product (including a physical distribution
medium), accompanied by a written offer, valid for at least three years and valid for as long as you
offer spare parts or customer support for that product model, to give anyone who possesses the object
code either (1) a copy of the Corresponding Source for all the software in the product that is covered
by this License, on a durable physical medium customarily used for software interchange, for a price
no more than your reasonable cost of physically performing this conveying of source, or (2) access
to copy the Corresponding Source from a network server at no charge.
• c) Convey individual copies of the object code with a copy of the written offer to provide the Cor-
responding Source. This alternative is allowed only occasionally and noncommercially, and only if
you received the object code with such an offer, in accord with subsection 6b.
• d) Convey the object code by offering access from a designated place (gratis or for a charge), and
offer equivalent access to the Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the Corresponding Source along with the
object code. If the place to copy the object code is a network server, the Corresponding Source may
be on a different server (operated by you or a third party) that supports equivalent copying facilities,
provided you maintain clear directions next to the object code saying where to find the Corresponding
Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure
that it is available for as long as needed to satisfy these requirements.
• e) Convey the object code using peer-to-peer transmission, provided you inform other peers where
the object code and Corresponding Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded from the Corresponding Source
as a System Library, need not be included in conveying the object code work.
A “User Product” is either (1) a “consumer product”, which means any tangible personal property
which is normally used for personal, family, or household purposes, or (2) anything designed or sold for
incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases
shall be resolved in favor of coverage. For a particular product received by a particular user, “normally
used” refers to a typical or common use of that class of product, regardless of the status of the particular
user or of the way in which the particular user actually uses, or expects or is expected to use, the product.
A product is a consumer product regardless of whether the product has substantial commercial, industrial
or non-consumer uses, unless such uses represent the only significant mode of use of the product.
“Installation Information” for a User Product means any methods, procedures, authorization keys, or
other information required to install and execute modified versions of a covered work in that User Product
from a modified version of its Corresponding Source. The information must suffice to ensure that the
5
continued functioning of the modified object code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or specifically for use in, a User
Product, and the conveying occurs as part of a transaction in which the right of possession and use of
the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the
transaction is characterized), the Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply if neither you nor any third party
retains the ability to install modified object code on the User Product (for example, the work has been
installed in ROM).
The requirement to provide Installation Information does not include a requirement to continue to
provide support service, warranty, or updates for a work that has been modified or installed by the recipient,
or for the User Product in which it has been modified or installed. Access to a network may be denied when
the modification itself materially and adversely affects the operation of the network or violates the rules
and protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided, in accord with this section
must be in a format that is publicly documented (and with an implementation available to the public in
source code form), and must require no special password or key for unpacking, reading or copying.
7. Additional Terms.
“Additional permissions” are terms that supplement the terms of this License by making exceptions from
one or more of its conditions. Additional permissions that are applicable to the entire Program shall be
treated as though they were included in this License, to the extent that they are valid under applicable law.
If additional permissions apply only to part of the Program, that part may be used separately under those
permissions, but the entire Program remains governed by this License without regard to the additional
permissions.
When you convey a copy of a covered work, you may at your option remove any additional permissions
from that copy, or from any part of it. (Additional permissions may be written to require their own removal
in certain cases when you modify the work.) You may place additional permissions on material, added by
you to a covered work, for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you add to a covered work, you may
(if authorized by the copyright holders of that material) supplement the terms of this License with terms:
• a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this
License; or
• b) Requiring preservation of specified reasonable legal notices or author attributions in that material
or in the Appropriate Legal Notices displayed by works containing it; or
• c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of
such material be marked in reasonable ways as different from the original version; or
• d) Limiting the use for publicity purposes of names of licensors or authors of the material; or
• e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service
marks; or
• f) Requiring indemnification of licensors and authors of that material by anyone who conveys the
material (or modified versions of it) with contractual assumptions of liability to the recipient, for any
liability that these contractual assumptions directly impose on those licensors and authors.
All other non-permissive additional terms are considered “further restrictions” within the meaning of
section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by
this License along with a term that is a further restriction, you may remove that term. If a license document
contains a further restriction but permits relicensing or conveying under this License, you may add to a
6
covered work material governed by the terms of that license document, provided that the further restriction
does not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you must place, in the relevant source
files, a statement of the additional terms that apply to those files, or a notice indicating where to find the
applicable terms.
Additional terms, permissive or non-permissive, may be stated in the form of a separately written
license, or stated as exceptions; the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly provided under this License. Any
attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this
License (including any patent licenses granted under the third paragraph of section 11).
However, if you cease all violation of this License, then your license from a particular copyright holder
is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your
license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable
means prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is reinstated permanently if the copyright
holder notifies you of the violation by some reasonable means, this is the first time you have received
notice of violation of this License (for any work) from that copyright holder, and you cure the violation
prior to 30 days after your receipt of the notice.
Termination of your rights under this section does not terminate the licenses of parties who have re-
ceived copies or rights from you under this License. If your rights have been terminated and not perma-
nently reinstated, you do not qualify to receive new licenses for the same material under section 10.
11. Patents.
A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on
which the Program is based. The work thus licensed is called the contributor's “contributor version”.
7
A contributor's “essential patent claims” are all patent claims owned or controlled by the contributor,
whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by
this License, of making, using, or selling its contributor version, but do not include claims that would
be infringed only as a consequence of further modification of the contributor version. For purposes of
this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the
requirements of this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the con-
tributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a “patent license” is any express agreement or commitment, however
denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to
sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement
or commitment not to enforce a patent against the party.
If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of
the work is not available for anyone to copy, free of charge and under the terms of this License, through
a publicly available network server or other readily accessible means, then you must either (1) cause the
Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent li-
cense for this particular work, or (3) arrange, in a manner consistent with the requirements of this License,
to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowl-
edge that, but for the patent license, your conveying the covered work in a country, or your recipient's use
of the covered work in a country, would infringe one or more identifiable patents in that country that you
have reason to believe are valid.
If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by
procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the
covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work,
then the patent license you grant is automatically extended to all recipients of the covered work and works
based on it.
A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the
exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted
under this License. You may not convey a covered work if you are a party to an arrangement with a third
party that is in the business of distributing software, under which you make payment to the third party based
on the extent of your activity of conveying the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory patent license (a) in connection
with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for
and in connection with specific products or compilations that contain the covered work, unless you entered
into that arrangement, or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting any implied license or other defenses
to infringement that may otherwise be available to you under applicable patent law.
8
which is the covered work, but the special requirements of the GNU Affero General Public License, section
13, concerning interaction through a network will apply to the combination as such.
9
To do so, attach the following notices to the program. It is safest to attach them to the start of each source
file to most effectively state the exclusion of warranty; and each file should have at least the “copyright”
line and a pointer to where the full notice is found.
one line to give the program’s name and a brief idea of what it does.
Copyright (C) year name of author
You should have received a copy of the GNU General Public License
along with this program. If not, see http://www.gnu.org/licenses/.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short notice like this when it starts in an
interactive mode:
The hypothetical commands ‘show w' and ‘show c' should show the appropriate parts of the General
Public License. Of course, your program's commands might be different; for a GUI interface, you would
use an “about box”.
You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright
disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the
GNU GPL, see http://www.gnu.org/licenses/.
The GNU General Public License does not permit incorporating your program into proprietary pro-
grams. If your program is a subroutine library, you may consider it more useful to permit linking proprietary
applications with the library. If this is what you want to do, use the GNU Lesser General Public License in-
stead of this License. But first, please read http://www.gnu.org/philosophy/why-not-lgpl.←-
html.
0. PREAMBLE
The purpose of this License is to make a manual, textbook, or other functional and useful document
”free” in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with
or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for
the author and publisher a way to get credit for their work, while not being considered responsible for
modifications made by others.
10
This License is a kind of ”copyleft”, which means that derivative works of the document must them-
selves be free in the same sense. It complements the GNU General Public License, which is a copyleft
license designed for free software.
We have designed this License in order to use it for manuals for free software, because free software
needs free documentation: a free program should come with manuals providing the same freedoms that
the software does. But this License is not limited to software manuals; it can be used for any textual work,
regardless of subject matter or whether it is published as a printed book. We recommend this License
principally for works whose purpose is instruction or reference.
1. APPLICABILITY AND DEFINITIONS
This License applies to any manual or other work, in any medium, that contains a notice placed by
the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a
world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein.
The ”Document”, below, refers to any such manual or work. Any member of the public is a licensee, and
is addressed as ”you”. You accept the license if you copy, modify or distribute the work in a way requiring
permission under copyright law.
A ”Modified Version” of the Document means any work containing the Document or a portion of it,
either copied verbatim, or with modifications and/or translated into another language.
A ”Secondary Section” is a named appendix or a front-matter section of the Document that deals
exclusively with the relationship of the publishers or authors of the Document to the Document's overall
subject (or to related matters) and contains nothing that could fall directly within that overall subject.
(Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any
mathematics.) The relationship could be a matter of historical connection with the subject or with related
matters, or of legal, commercial, philosophical, ethical or political position regarding them.
The ”Invariant Sections” are certain Secondary Sections whose titles are designated, as being those of
Invariant Sections, in the notice that says that the Document is released under this License. If a section does
not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document
may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there
are none.
The ”Cover Texts” are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover
Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be
at most 5 words, and a Back-Cover Text may be at most 25 words.
A ”Transparent” copy of the Document means a machine-readable copy, represented in a format whose
specification is available to the general public, that is suitable for revising the document straightforwardly
with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some
widely available drawing editor, and that is suitable for input to text formatters or for automatic translation
to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent
file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent
modification by readers is not Transparent. An image format is not Transparent if used for any substantial
amount of text. A copy that is not ”Transparent” is called ”Opaque”.
Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo in-
put format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming
simple HTML, PostScript or PDF designed for human modification. Examples of transparent image for-
mats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited
only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not
generally available, and the machine-generated HTML, PostScript or PDF produced by some word proces-
sors for output purposes only.
The ”Title Page” means, for a printed book, the title page itself, plus such following pages as are needed
to hold, legibly, the material this License requires to appear in the title page. For works in formats which
do not have any title page as such, ”Title Page” means the text near the most prominent appearance of the
work's title, preceding the beginning of the body of the text.
A section ”Entitled XYZ” means a named subunit of the Document whose title either is precisely X←-
YZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ
stands for a specific section name mentioned below, such as ”Acknowledgements”, ”Dedications”, ”←-
Endorsements”, or ”History”.) To ”Preserve the Title” of such a section when you modify the Document
11
means that it remains a section ”Entitled XYZ” according to this definition.
The Document may include Warranty Disclaimers next to the notice which states that this License
applies to the Document. These Warranty Disclaimers are considered to be included by reference in this
License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers
may have is void and has no effect on the meaning of this License.
2. VERBATIM COPYING
You may copy and distribute the Document in any medium, either commercially or noncommercially,
provided that this License, the copyright notices, and the license notice saying this License applies to the
Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this
License. You may not use technical measures to obstruct or control the reading or further copying of the
copies you make or distribute. However, you may accept compensation in exchange for copies. If you
distribute a large enough number of copies you must also follow the conditions in section 3.
You may also lend copies, under the same conditions stated above, and you may publicly display copies.
3. COPYING IN QUANTITY
If you publish printed copies (or copies in media that commonly have printed covers) of the Document,
numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the
copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover,
and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the
publisher of these copies. The front cover must present the full title with all words of the title equally
prominent and visible. You may add other material on the covers in addition. Copying with changes
limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be
treated as verbatim copying in other respects.
If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed
(as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.
If you publish or distribute Opaque copies of the Document numbering more than 100, you must either
include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque
copy a computer-network location from which the general network-using public has access to download
using public-standard network protocols a complete Transparent copy of the Document, free of added
material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution
of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated
location until at least one year after the last time you distribute an Opaque copy (directly or through your
agents or retailers) of that edition to the public.
It is requested, but not required, that you contact the authors of the Document well before redistributing
any large number of copies, to give them a chance to provide you with an updated version of the Document.
4. MODIFICATIONS
You may copy and distribute a Modified Version of the Document under the conditions of sections 2
and 3 above, provided that you release the Modified Version under precisely this License, with the Modi-
fied Version filling the role of the Document, thus licensing distribution and modification of the Modified
Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:
• A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and
from those of previous versions (which should, if there were any, be listed in the History section of
the Document). You may use the same title as a previous version if the original publisher of that
version gives permission.
• B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of
the modifications in the Modified Version, together with at least five of the principal authors of the
Document (all of its principal authors, if it has fewer than five), unless they release you from this
requirement.
• C. State on the Title page the name of the publisher of the Modified Version, as the publisher.
• E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
12
• F. Include, immediately after the copyright notices, a license notice giving the public permission to
use the Modified Version under the terms of this License, in the form shown in the Addendum below.
• G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given
in the Document's license notice.
• I. Preserve the section Entitled ”History”, Preserve its Title, and add to it an item stating at least
the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If
there is no section Entitled ”History” in the Document, create one stating the title, year, authors,
and publisher of the Document as given on its Title Page, then add an item describing the Modified
Version as stated in the previous sentence.
• J. Preserve the network location, if any, given in the Document for public access to a Transpar-
ent copy of the Document, and likewise the network locations given in the Document for previous
versions it was based on. These may be placed in the ”History” section. You may omit a network
location for a work that was published at least four years before the Document itself, or if the original
publisher of the version it refers to gives permission.
• K. For any section Entitled ”Acknowledgements” or ”Dedications”, Preserve the Title of the section,
and preserve in the section all the substance and tone of each of the contributor acknowledgements
and/or dedications given therein.
• L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles.
Section numbers or the equivalent are not considered part of the section titles.
• M. Delete any section Entitled ”Endorsements”. Such a section may not be included in the Modified
Version.
• N. Do not retitle any existing section to be Entitled ”Endorsements” or to conflict in title with any
Invariant Section.
If the Modified Version includes new front-matter sections or appendices that qualify as Secondary
Sections and contain no material copied from the Document, you may at your option designate some or all
of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified
Version's license notice. These titles must be distinct from any other section titles.
You may add a section Entitled ”Endorsements”, provided it contains nothing but endorsements of
your Modified Version by various parties–for example, statements of peer review or that the text has been
approved by an organization as the authoritative definition of a standard.
You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words
as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of
Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any
one entity. If the Document already includes a cover text for the same cover, previously added by you or by
arrangement made by the same entity you are acting on behalf of, you may not add another; but you may
replace the old one, on explicit permission from the previous publisher that added the old one.
The author(s) and publisher(s) of the Document do not by this License give permission to use their
names for publicity for or to assert or imply endorsement of any Modified Version.
5. COMBINING DOCUMENTS
You may combine the Document with other documents released under this License, under the terms
defined in section 4 above for modified versions, provided that you include in the combination all of the
Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of
your combined work in its license notice, and that you preserve all their Warranty Disclaimers.
The combined work need only contain one copy of this License, and multiple identical Invariant Sec-
tions may be replaced with a single copy. If there are multiple Invariant Sections with the same name but
13
different contents, make the title of each such section unique by adding at the end of it, in parentheses, the
name of the original author or publisher of that section if known, or else a unique number. Make the same
adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.
In the combination, you must combine any sections Entitled ”History” in the various original docu-
ments, forming one section Entitled ”History”; likewise combine any sections Entitled ”Acknowledgements”,
and any sections Entitled ”Dedications”. You must delete all sections Entitled ”Endorsements.”
6. COLLECTIONS OF DOCUMENTS
You may make a collection consisting of the Document and other documents released under this Li-
cense, and replace the individual copies of this License in the various documents with a single copy that is
included in the collection, provided that you follow the rules of this License for verbatim copying of each
of the documents in all other respects.
You may extract a single document from such a collection, and distribute it individually under this
License, provided you insert a copy of this License into the extracted document, and follow this License in
all other respects regarding verbatim copying of that document.
7. AGGREGATION WITH INDEPENDENT WORKS
A compilation of the Document or its derivatives with other separate and independent documents or
works, in or on a volume of a storage or distribution medium, is called an ”aggregate” if the copyright
resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what
the individual works permit. When the Document is included in an aggregate, this License does not apply
to the other works in the aggregate which are not themselves derivative works of the Document.
If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the
Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers
that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is
in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.
8. TRANSLATION
Translation is considered a kind of modification, so you may distribute translations of the Document
under the terms of section 4. Replacing Invariant Sections with translations requires special permission
from their copyright holders, but you may include translations of some or all Invariant Sections in addition
to the original versions of these Invariant Sections. You may include a translation of this License, and all
the license notices in the Document, and any Warranty Disclaimers, provided that you also include the
original English version of this License and the original versions of those notices and disclaimers. In case
of a disagreement between the translation and the original version of this License or a notice or disclaimer,
the original version will prevail.
If a section in the Document is Entitled ”Acknowledgements”, ”Dedications”, or ”History”, the re-
quirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.
9. TERMINATION
You may not copy, modify, sublicense, or distribute the Document except as expressly provided for
under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and
will automatically terminate your rights under this License. However, parties who have received copies, or
rights, from you under this License will not have their licenses terminated so long as such parties remain
in full compliance.
10. FUTURE REVISIONS OF THIS LICENSE
The Free Software Foundation may publish new, revised versions of the GNU Free Documentation
License from time to time. Such new versions will be similar in spirit to the present version, but may differ
in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.
Each version of the License is given a distinguishing version number. If the Document specifies that
a particular numbered version of this License ”or any later version” applies to it, you have the option of
following the terms and conditions either of that specified version or of any later version that has been
published (not as a draft) by the Free Software Foundation. If the Document does not specify a version
number of this License, you may choose any version ever published (not as a draft) by the Free Software
Foundation.
14
How to use this License for your documents
To use this License in a document you have written, include a copy of the License in the document and put
the following copyright and license notices just after the title page:
Copyright (c) YEAR YOUR NAME.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
Texts. A copy of the license is included in the section entitled
"GNU Free Documentation License".
If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the ”with...Texts.”
line with this:
with the Invariant Sections being LIST THEIR TITLES, with the
Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
If you have Invariant Sections without Cover Texts, or some other combination of the three, merge
those two alternatives to suit the situation.
If your document contains nontrivial examples of program code, we recommend releasing these exam-
ples in parallel under your choice of free software license, such as the GNU General Public License, to
permit their use in free software.
4 Module Index
4.1 Modules
Here is a list of all modules:
C Language Interface 17
Version Checking 19
Error Handling 20
Timeout Handling 22
Library Datatypes 24
5 Class Index
5.1 Class List
Here are the classes, structs, unions and interfaces with brief descriptions:
15
ppl Congruence System const iterator tag
Types and functions for iterating on congruence systems 33
16
ppl Pointset Powerset C Polyhedron const iterator tag
Types and functions for iterating on the disjuncts of a const ppl Pointset Powerset C←-
Polyhedron tag 59
6 Module Documentation
6.1 C Language Interface
The Parma Polyhedra Library comes equipped with an interface for the C language.
17
6.2 Library Initialization and Finalization
Functions
• int ppl initialize (void)
Initializes the Parma Polyhedra Library. This function must be called before any other function.
• int ppl finalize (void)
Finalizes the Parma Polyhedra Library. This function must be called after any other function.
• int ppl set rounding for PPL (void)
Sets the FPU rounding mode so that the PPL abstractions based on floating point numbers work correctly.
• int ppl restore pre PPL rounding (void)
Sets the FPU rounding mode as it was before initialization of the PPL.
• int ppl irrational precision (unsigned ∗p)
Writes to p the precision parameter used for irrational calculations.
• int ppl set irrational precision (unsigned p)
Sets the precision parameter used for irrational calculations.
int ppl finalize ( void ) Finalizes the Parma Polyhedra Library. This function must be called after any
other function.
Returns
PPL ERROR INVALID ARGUMENT if the library was already finalized.
int ppl set rounding for PPL ( void ) Sets the FPU rounding mode so that the PPL abstractions based
on floating point numbers work correctly.
This is performed automatically at initialization-time. Calling this function is needed only if restore←-
pre PPL rounding() has been previously called.
int ppl restore pre PPL rounding ( void ) Sets the FPU rounding mode as it was before initialization
of the PPL.
After calling this function it is absolutely necessary to call set rounding for PPL() before using any
PPL abstractions based on floating point numbers. This is performed automatically at finalization-time.
int ppl set irrational precision ( unsigned p ) Sets the precision parameter used for irrational calcu-
lations.
If p is less than or equal to INT MAX, sets the precision parameter used for irrational calculations to p.
Then, in the irrational calculations returning an unbounded rational, (e.g., when computing a square root),
the lesser between numerator and denominator will be limited to 2∗∗p.
18
6.3 Version Checking
Macros
• #define PPL VERSION ”1.2”
A string containing the PPL version.
• #define PPL VERSION MAJOR 1
The major number of the PPL version.
• #define PPL VERSION MINOR 2
The minor number of the PPL version.
• #define PPL VERSION REVISION 0
The revision number of the PPL version.
• #define PPL VERSION BETA 0
The beta number of the PPL version. This is zero for official releases and nonzero for development snap-
shots.
Functions
• int ppl version major (void)
Returns the major number of the PPL version.
• int ppl version minor (void)
Returns the minor number of the PPL version.
• int ppl version revision (void)
Returns the revision number of the PPL version.
• int ppl version beta (void)
Returns the beta number of the PPL version.
• int ppl version (const char ∗∗p)
Writes to ∗p a pointer to a character string containing the PPL version.
• int ppl banner (const char ∗∗p)
Writes to ∗p a pointer to a character string containing the PPL banner.
19
6.4 Error Handling
Enumerations
• enum ppl enum error code {
PPL ERROR OUT OF MEMORY, PPL ERROR INVALID ARGUMENT, PPL ERROR DOM←-
AIN ERROR, PPL ERROR LENGTH ERROR,
PPL ARITHMETIC OVERFLOW, PPL STDIO ERROR, PPL ERROR INTERNAL ERROR, P←-
PL ERROR UNKNOWN STANDARD EXCEPTION,
PPL ERROR UNEXPECTED ERROR, PPL TIMEOUT EXCEPTION, PPL ERROR LOGIC ←-
ERROR }
Defines the error codes that any function may return.
Functions
• int ppl set error handler (void(∗h)(enum ppl enum error code code, const char ∗description))
Installs the user-defined error handler pointed at by h.
Enumerator
PPL ERROR OUT OF MEMORY The virtual memory available to the process has been exhausted.
PPL ERROR INVALID ARGUMENT A function has been invoked with an invalid argument.
PPL ERROR DOMAIN ERROR A function has been invoked outside its domain of definition.
PPL ERROR LENGTH ERROR The construction of an object that would exceed its maximum per-
mitted size was attempted.
PPL ARITHMETIC OVERFLOW An arithmetic overflow occurred and the computation was con-
sequently interrupted. This can only happen in library's incarnations using bounded integers as
coefficients.
PPL STDIO ERROR An error occurred during a C input/output operation. A more precise indica-
tion of what went wrong is available via errno.
PPL ERROR INTERNAL ERROR An internal error that was diagnosed by the PPL itself. This
indicates a bug in the PPL.
PPL ERROR UNKNOWN STANDARD EXCEPTION A standard exception has been raised by
the C++ run-time environment. This indicates a bug in the PPL.
PPL ERROR UNEXPECTED ERROR A totally unknown, totally unexpected error happened. This
indicates a bug in the PPL.
PPL TIMEOUT EXCEPTION An exception has been raised by the PPL as a timeout previously set
by the user has expired.
PPL ERROR LOGIC ERROR The client program attempted to use the PPL in a way that violates
its internal logic. This happens, for instance, when the client attempts to use the timeout facilities
on a system that does not support them.
20
6.4.3 Function Documentation
int ppl set error handler ( void(∗)(enum ppl enum error code code, const char ∗description) h )
Installs the user-defined error handler pointed at by h.
The error handler takes an error code and a textual description that gives further information about the
actual error. The C string containing the textual description is read-only and its existence is not guaranteed
after the handler has returned.
21
6.5 Timeout Handling
Functions
• int ppl set timeout (unsigned csecs)
Sets the timeout for computations whose completion could require an exponential amount of time.
• int ppl reset timeout (void)
Resets the timeout time so that the computation is not interrupted.
• int ppl set deterministic timeout (unsigned long unscaled weight, unsigned scale)
Sets a threshold for computations whose completion could require an exponential amount of time.
• int ppl reset deterministic timeout (void)
Resets the deterministic timeout so that the computation is not interrupted.
int ppl set deterministic timeout ( unsigned long unscaled weight, unsigned scale ) Sets a threshold
for computations whose completion could require an exponential amount of time.
Returns
PPL ERROR INVALID ARGUMENT if unscaled weight is zero or if the computed weight thresh-
old exceeds the maximum allowed value.
Parameters
unscaled ←- The unscaled maximum computational weight; it has to be non-zero.
weight
scale The scaling factor to be applied to unscaled weight.
If unscaled weight has value u and scale has value s, then the (scaled) weight threshold is computed
as w = u · 2s . Computations taking exponential time will be interrupted some time after reaching the com-
plexity threshold w. If the computation is interrupted that way, the interrupted function will return error
code PPL TIMEOUT EXCEPTION. Otherwise, if the computation completes without being interrupted,
then the deterministic timeout should be reset by calling ppl reset deterministic timeout().
Note
This ”timeout” checking functionality is said to be deterministic because it is not based on actual
elapsed time. Its behavior will only depend on (some of the) computations performed in the PP←-
L library and it will be otherwise independent from the computation environment (CPU, operating
system, compiler, etc.).
22
Warning
The weight mechanism is under beta testing. In particular, there is still no clear relation between
the weight threshold and the actual computational complexity. As a consequence, client applications
should be ready to reconsider the tuning of these weight thresholds when upgrading to newer version
of the PPL.
23
6.6 Library Datatypes
Typedefs for the library datatypes and related symbolic constants.
Typedefs
• typedef size t ppl dimension type
An unsigned integral type for representing space dimensions.
• typedef const char ∗ ppl io variable output function type(ppl dimension type var)
The type of output functions used for printing variables.
• typedef struct ppl Coefficient tag ∗ ppl Coefficient t
Opaque pointer.
• typedef struct ppl Coefficient tag const ∗ ppl const Coefficient t
Opaque pointer to const object.
• typedef struct ppl Linear Expression tag ∗ ppl Linear Expression t
Opaque pointer.
• typedef struct ppl Linear Expression tag const ∗ ppl const Linear Expression t
Opaque pointer to const object.
• typedef struct ppl Constraint tag ∗ ppl Constraint t
Opaque pointer.
• typedef struct ppl Constraint tag const ∗ ppl const Constraint t
Opaque pointer to const object.
• typedef struct ppl Constraint System tag ∗ ppl Constraint System t
Opaque pointer.
• typedef struct ppl Constraint System tag const ∗ ppl const Constraint System t
Opaque pointer to const object.
• typedef struct ppl Constraint System const iterator tag ∗ ppl Constraint System const iterator t
Opaque pointer.
• typedef struct ppl Constraint System const iterator tag const ∗ ppl const Constraint System const←-
iterator t
Opaque pointer to const object.
• typedef struct ppl Generator tag ∗ ppl Generator t
Opaque pointer.
• typedef struct ppl Generator tag const ∗ ppl const Generator t
Opaque pointer to const object.
• typedef struct ppl Generator System tag ∗ ppl Generator System t
Opaque pointer.
• typedef struct ppl Generator System tag const ∗ ppl const Generator System t
Opaque pointer to const object.
• typedef struct ppl Generator System const iterator tag ∗ ppl Generator System const iterator t
Opaque pointer.
• typedef struct ppl Generator System const iterator tag const ∗ ppl const Generator System const←-
iterator t
Opaque pointer to const object.
• typedef struct ppl Congruence tag ∗ ppl Congruence t
Opaque pointer.
• typedef struct ppl Congruence tag const ∗ ppl const Congruence t
Opaque pointer to const object.
24
• typedef struct ppl Congruence System tag ∗ ppl Congruence System t
Opaque pointer.
• typedef struct ppl Congruence System tag const ∗ ppl const Congruence System t
Opaque pointer to const object.
• typedef struct ppl Congruence System const iterator tag ∗ ppl Congruence System const iterator←-
t
Opaque pointer.
• typedef struct ppl Congruence System const iterator tag const ∗ ppl const Congruence System ←-
const iterator t
Opaque pointer to const object.
• typedef struct ppl Grid Generator tag ∗ ppl Grid Generator t
Opaque pointer.
• typedef struct ppl Grid Generator tag const ∗ ppl const Grid Generator t
Opaque pointer to const object.
• typedef struct ppl Grid Generator System tag ∗ ppl Grid Generator System t
Opaque pointer.
• typedef struct ppl Grid Generator System tag const ∗ ppl const Grid Generator System t
Opaque pointer to const object.
• typedef struct ppl Grid Generator System const iterator tag ∗ ppl Grid Generator System const ←-
iterator t
Opaque pointer.
• typedef struct ppl Grid Generator System const iterator tag const ∗ ppl const Grid Generator ←-
System const iterator t
Opaque pointer to const object.
• typedef struct ppl MIP Problem tag ∗ ppl MIP Problem t
Opaque pointer.
• typedef struct ppl MIP Problem tag const ∗ ppl const MIP Problem t
Opaque pointer to const object.
• typedef struct ppl PIP Problem tag ∗ ppl PIP Problem t
Opaque pointer.
• typedef struct ppl PIP Problem tag const ∗ ppl const PIP Problem t
Opaque pointer to const object.
• typedef struct ppl PIP Tree Node tag ∗ ppl PIP Tree Node t
Opaque pointer.
• typedef struct ppl PIP Tree Node tag const ∗ ppl const PIP Tree Node t
Opaque pointer to const object.
• typedef struct ppl PIP Decision Node tag ∗ ppl PIP Decision Node t
Opaque pointer.
• typedef struct ppl PIP Decision Node tag const ∗ ppl const PIP Decision Node t
Opaque pointer to const object.
• typedef struct ppl PIP Solution Node tag ∗ ppl PIP Solution Node t
Opaque pointer.
• typedef struct ppl PIP Solution Node tag const ∗ ppl const PIP Solution Node t
Opaque pointer to const object.
• typedef struct ppl Artificial Parameter tag ∗ ppl Artificial Parameter t
Opaque pointer.
• typedef struct ppl Artificial Parameter tag const ∗ ppl const Artificial Parameter t
25
Opaque pointer to const object.
• typedef struct ppl Artificial Parameter Sequence tag ∗ ppl Artificial Parameter Sequence t
Opaque pointer.
• typedef struct ppl Artificial Parameter Sequence tag const ∗ ppl const Artificial Parameter Sequence←-
t
Opaque pointer to const object.
• typedef struct ppl Artificial Parameter Sequence const iterator tag ∗ ppl Artificial Parameter Sequence←-
const iterator t
Opaque pointer.
• typedef struct ppl Artificial Parameter Sequence const iterator tag const ∗ ppl const Artificial ←-
Parameter Sequence const iterator t
Opaque pointer to const object.
• typedef struct ppl Polyhedron tag ∗ ppl Polyhedron t
Opaque pointer.
• typedef struct ppl Polyhedron tag const ∗ ppl const Polyhedron t
Opaque pointer to const object.
• typedef struct ppl Pointset Powerset C Polyhedron tag ∗ ppl Pointset Powerset C Polyhedron t
Opaque pointer.
• typedef struct ppl Pointset Powerset C Polyhedron tag const ∗ ppl const Pointset Powerset C ←-
Polyhedron t
Opaque pointer to const object.
• typedef struct ppl Pointset Powerset C Polyhedron iterator tag ∗ ppl Pointset Powerset C Polyhedron←-
iterator t
Opaque pointer.
• typedef struct ppl Pointset Powerset C Polyhedron iterator tag const ∗ ppl const Pointset Powerset←-
C Polyhedron iterator t
Opaque pointer to const object.
• typedef struct ppl Pointset Powerset C Polyhedron const iterator tag ∗ ppl Pointset Powerset C ←-
Polyhedron const iterator t
Opaque pointer.
• typedef struct ppl Pointset Powerset C Polyhedron const iterator tag const ∗ ppl const Pointset ←-
Powerset C Polyhedron const iterator t
Opaque pointer to const object.
Enumerations
• enum ppl enum Constraint Type {
PPL CONSTRAINT TYPE LESS THAN, PPL CONSTRAINT TYPE LESS OR EQUAL, PP←-
L CONSTRAINT TYPE EQUAL, PPL CONSTRAINT TYPE GREATER OR EQUAL,
PPL CONSTRAINT TYPE GREATER THAN }
Describes the relations represented by a constraint.
• enum ppl enum Generator Type { PPL GENERATOR TYPE LINE, PPL GENERATOR TYPE←-
RAY, PPL GENERATOR TYPE POINT, PPL GENERATOR TYPE CLOSURE POINT }
Describes the different kinds of generators.
• enum ppl enum Grid Generator Type { PPL GRID GENERATOR TYPE LINE, PPL GRID G←-
ENERATOR TYPE PARAMETER, PPL GRID GENERATOR TYPE POINT }
Describes the different kinds of grid generators.
• enum ppl enum Bounded Integer Type Width {
PPL BITS 8, PPL BITS 16, PPL BITS 32, PPL BITS 64,
PPL BITS 128 }
26
Widths of bounded integer types.
• enum ppl enum Bounded Integer Type Representation { PPL UNSIGNED, PPL SIGNED 2 CO←-
MPLEMENT }
Representation of bounded integer types.
• enum ppl enum Bounded Integer Type Overflow { PPL OVERFLOW WRAPS, PPL OVERFL←-
OW UNDEFINED, PPL OVERFLOW IMPOSSIBLE }
Overflow behavior of bounded integer types.
Functions
• int ppl max space dimension (ppl dimension type ∗m)
Writes to m the maximum space dimension this library can handle.
• int ppl not a dimension (ppl dimension type ∗m)
Writes to m a value that does not designate a valid dimension.
• int ppl io print variable (ppl dimension type var)
Pretty-prints var to stdout.
• int ppl io fprint variable (FILE ∗stream, ppl dimension type var)
Pretty-prints var to the given output stream.
• int ppl io asprint variable (char ∗∗strp, ppl dimension type var)
Pretty-prints var to a malloc-allocated string, a pointer to which is returned via strp.
• int ppl io set variable output function (ppl io variable output function type ∗p)
Sets the output function to be used for printing variables to p.
• int ppl io get variable output function (ppl io variable output function type ∗∗pp)
Writes a pointer to the current variable output function to pp.
• char ∗ ppl io wrap string (const char ∗src, unsigned indent depth, unsigned preferred first line ←-
length, unsigned preferred line length)
Utility function for the wrapping of lines of text.
Variables
• unsigned int PPL COMPLEXITY CLASS POLYNOMIAL
Code of the worst-case polynomial complexity class.
• unsigned int PPL COMPLEXITY CLASS SIMPLEX
Code of the worst-case exponential but typically polynomial complexity class.
• unsigned int PPL COMPLEXITY CLASS ANY
Code of the universal complexity class.
• unsigned int PPL POLY CON RELATION IS DISJOINT
Individual bit saying that the polyhedron and the set of points satisfying the constraint are disjoint.
• unsigned int PPL POLY CON RELATION STRICTLY INTERSECTS
Individual bit saying that the polyhedron intersects the set of points satisfying the constraint, but it is not
included in it.
• unsigned int PPL POLY CON RELATION IS INCLUDED
Individual bit saying that the polyhedron is included in the set of points satisfying the constraint.
• unsigned int PPL POLY CON RELATION SATURATES
Individual bit saying that the polyhedron is included in the set of points saturating the constraint.
• unsigned int PPL POLY GEN RELATION SUBSUMES
Individual bit saying that adding the generator would not change the polyhedron.
27
6.6.1 Detailed Description
Typedefs for the library datatypes and related symbolic constants.
The datatypes provided by the library should be manipulated by means of the corresponding opaque
pointer types and the functions working on them.
Note
To simplify the detection of common programming mistakes, we provide both pointer-to-const and
pointer-to-nonconst opaque pointers, with implicit conversions mapping each pointer-to-nonconst to
the corresponding pointer-to-const when needed. The user of the C interface is therefore recom-
mended to adopt the pointer-to-const type whenever read-only access is meant.
Enumerator
PPL CONSTRAINT TYPE LESS THAN The constraint is of the form e < 0.
PPL CONSTRAINT TYPE LESS OR EQUAL The constraint is of the form e ≤ 0.
PPL CONSTRAINT TYPE EQUAL The constraint is of the form e = 0.
PPL CONSTRAINT TYPE GREATER OR EQUAL The constraint is of the form e ≥ 0.
PPL CONSTRAINT TYPE GREATER THAN The constraint is of the form e > 0.
enum ppl enum Generator Type Describes the different kinds of generators.
Enumerator
PPL GENERATOR TYPE LINE The generator is a line.
PPL GENERATOR TYPE RAY The generator is a ray.
PPL GENERATOR TYPE POINT The generator is a point.
PPL GENERATOR TYPE CLOSURE POINT The generator is a closure point.
enum ppl enum Grid Generator Type Describes the different kinds of grid generators.
Enumerator
PPL GRID GENERATOR TYPE LINE The grid generator is a line.
PPL GRID GENERATOR TYPE PARAMETER The grid generator is a parameter.
PPL GRID GENERATOR TYPE POINT The grid generator is a point.
28
enum ppl enum Bounded Integer Type Width Widths of bounded integer types.
Enumerator
PPL BITS 8 8 bits.
PPL BITS 16 16 bits.
PPL BITS 32 32 bits.
PPL BITS 64 64 bits.
PPL BITS 128 128 bits.
enum ppl enum Bounded Integer Type Representation Representation of bounded integer types.
Enumerator
PPL UNSIGNED Unsigned binary.
PPL SIGNED 2 COMPLEMENT Signed binary where negative values are represented by the two's
complement of the absolute value.
enum ppl enum Bounded Integer Type Overflow Overflow behavior of bounded integer types.
Enumerator
PPL OVERFLOW WRAPS On overflow, wrapping takes place. This means that, for a w-bit bounded
integer, the computation happens modulo 2w .
PPL OVERFLOW UNDEFINED On overflow, the result is undefined. This simply means that the
result of the operation resulting in an overflow can take any value.
Note
Even though something more serious can happen in the system being analyzed —due to,
e.g., C's undefined behavior—, here we are only concerned with the results of arithmetic
operations. It is the responsibility of the analyzer to ensure that other manifestations of
undefined behavior are conservatively approximated.
PPL OVERFLOW IMPOSSIBLE Overflow is impossible. This is for the analysis of languages
where overflow is trapped before it affects the state, for which, thus, any indication that an over-
flow may have affected the state is necessarily due to the imprecision of the analysis.
29
preferred ←- The preferred length for all the lines but the first one.
line length
Returns
The wrapped string in a malloc-allocated buffer.
30
7 Class Documentation
7.1 ppl Artificial Parameter Sequence const iterator tag Interface Reference
Types and functions for iterating on PIP artificial parameters.
#include <ppl c header.h>
Related Functions
(Note that these are not member functions.)
• int ppl new Artificial Parameter Sequence const iterator (ppl Artificial Parameter Sequence ←-
const iterator t ∗papit)
Builds a new ‘const iterator' and writes a handle to it at address papit.
• int ppl new Artificial Parameter Sequence const iterator from Artificial Parameter Sequence ←-
const iterator (ppl Artificial Parameter Sequence const iterator t ∗papit, ppl const Artificial ←-
Parameter Sequence const iterator t apit)
Builds a const iterator that is a copy of apit; writes a handle for the newly created const iterator at
address papit.
• int ppl assign Artificial Parameter Sequence const iterator from Artificial Parameter Sequence←-
const iterator (ppl Artificial Parameter Sequence const iterator t dst, ppl const Artificial Parameter←-
Sequence const iterator t src)
Assigns a copy of the const iterator src to dst.
• int ppl delete Artificial Parameter Sequence const iterator (ppl const Artificial Parameter Sequence←-
const iterator t apit)
Invalidates the handle apit: this makes sure the corresponding resources will eventually be released.
• int ppl Artificial Parameter Sequence const iterator dereference (ppl const Artificial Parameter←-
Sequence const iterator t apit, ppl const Artificial Parameter t ∗pap)
Dereference apit writing a const handle to the resulting artificial parameter at address pap.
• int ppl Artificial Parameter Sequence const iterator increment (ppl Artificial Parameter Sequence←-
const iterator t apit)
Increment apit so that it ”points” to the next artificial parameter.
• int ppl Artificial Parameter Sequence const iterator equal test (ppl const Artificial Parameter←-
Sequence const iterator t x, ppl const Artificial Parameter Sequence const iterator t y)
Returns a positive integer if the iterators corresponding to x and y are equal; returns 0 if they are
different.
• ppl c header.h
31
Related Functions
(Note that these are not member functions.)
• int ppl Artificial Parameter get Linear Expression (ppl const Artificial Parameter t ap, ppl Linear←-
Expression t le)
Copies into le the linear expression in artificial parameter ap.
• int ppl Artificial Parameter coefficient (ppl const Artificial Parameter t ap, ppl dimension type var,
ppl Coefficient t n)
Copies into n the coefficient of variable var in the artificial parameter ap.
• int ppl Artificial Parameter get inhomogeneous term (ppl const Artificial Parameter t ap, ppl Coefficient←-
t n)
Copies into n the inhomogeneous term of the artificial parameter ap.
• int ppl Artificial Parameter denominator (ppl const Artificial Parameter t ap, ppl Coefficient t n)
Copies into n the denominator in artificial parameter ap.
Input/Output Functions
Related Functions
(Note that these are not member functions.)
Constructors, Assignment and Destructor
32
Builds a coefficient that is a copy of c; writes a handle for the newly created coefficient at address pc.
• int ppl assign Coefficient from mpz t (ppl Coefficient t dst, mpz t z)
Assign to dst the value given by the GMP integer z.
• int ppl assign Coefficient from Coefficient (ppl Coefficient t dst, ppl const Coefficient t src)
Assigns a copy of the coefficient src to dst.
• int ppl delete Coefficient (ppl const Coefficient t c)
Invalidates the handle c: this makes sure the corresponding resources will eventually be released.
I/O Functions
Related Functions
(Note that these are not member functions.)
Constructors, Assignment and Destructor
• int ppl new Congruence System const iterator (ppl Congruence System const iterator t ∗pcit)
33
Builds a new ‘const iterator' and writes a handle to it at address pcit.
• int ppl new Congruence System const iterator from Congruence System const iterator (ppl Congruence←-
System const iterator t ∗pcit, ppl const Congruence System const iterator t cit)
Builds a const iterator that is a copy of cit; writes a handle for the newly created const iterator at
address pcit.
• int ppl assign Congruence System const iterator from Congruence System const iterator (ppl←-
Congruence System const iterator t dst, ppl const Congruence System const iterator t src)
Assigns a copy of the const iterator src to dst.
• int ppl delete Congruence System const iterator (ppl const Congruence System const iterator←-
t cit)
Invalidates the handle cit: this makes sure the corresponding resources will eventually be released.
• int ppl Congruence System const iterator dereference (ppl const Congruence System const iterator←-
t cit, ppl const Congruence t ∗pc)
Dereference cit writing a const handle to the resulting congruence at address pc.
• int ppl Congruence System const iterator increment (ppl Congruence System const iterator ←-
t cit)
Increment cit so that it ”points” to the next congruence.
• int ppl Congruence System const iterator equal test (ppl const Congruence System const iterator←-
t x, ppl const Congruence System const iterator t y)
Returns a positive integer if the iterators corresponding to x and y are equal; returns 0 if they are
different.
Related Functions
(Note that these are not member functions.)
Constructors, Assignment and Destructor
34
Builds a congruence system that is a copy of cs; writes a handle for the newly created system at address
pcs.
• int ppl assign Congruence System from Congruence System (ppl Congruence System t dst, ppl←-
const Congruence System t src)
Assigns a copy of the congruence system src to dst.
• int ppl delete Congruence System (ppl const Congruence System t cs)
Invalidates the handle cs: this makes sure the corresponding resources will eventually be released.
• int ppl Congruence System space dimension (ppl const Congruence System t cs, ppl dimension←-
type ∗m)
Writes to m the dimension of the vector space enclosing cs.
• int ppl Congruence System empty (ppl const Congruence System t cs)
Returns a positive integer if cs contains no (non-trivial) congruence; returns 0 otherwise.
• int ppl Congruence System begin (ppl const Congruence System t cs, ppl Congruence System←-
const iterator t cit)
Assigns to cit a const iterator ”pointing” to the beginning of the congruence system cs.
• int ppl Congruence System end (ppl const Congruence System t cs, ppl Congruence System←-
const iterator t cit)
Assigns to cit a const iterator ”pointing” past the end of the congruence system cs.
• int ppl Congruence System OK (ppl const Congruence System t cs)
Returns a positive integer if cs is well formed, i.e., if it satisfies all its implementation invariants; returns
0 and perhaps makes some noise if cs is broken. Useful for debugging purposes.
Input/Output Functions
• ppl c header.h
35
7.6 ppl Congruence tag Interface Reference
Types and functions for congruences.
#include <ppl c header.h>
Related Functions
(Note that these are not member functions.)
Constructors, Assignment and Destructor
• int ppl new Congruence (ppl Congruence t ∗pc, ppl const Linear Expression t le, ppl const ←-
Coefficient t m)
Creates the new congruence le = 0 (mod m) and writes a handle for it at address pc. The space
dimension of the new congruence is equal to the space dimension of le.
• int ppl new Congruence zero dim false (ppl Congruence t ∗pc)
Creates the unsatisfiable (zero-dimension space) congruence 0 = 1 (mod 0) and writes a handle for it
at address pc.
• int ppl new Congruence zero dim integrality (ppl Congruence t ∗pc)
Creates the true (zero-dimension space) congruence 0 = 1 (mod 1), also known as integrality congru-
ence. A handle for the newly created congruence is written at address pc.
• int ppl new Congruence from Congruence (ppl Congruence t ∗pc, ppl const Congruence t c)
Builds a congruence that is a copy of c; writes a handle for the newly created congruence at address
pc.
• int ppl assign Congruence from Congruence (ppl Congruence t dst, ppl const Congruence t src)
Assigns a copy of the congruence src to dst.
• int ppl delete Congruence (ppl const Congruence t c)
Invalidates the handle c: this makes sure the corresponding resources will eventually be released.
• int ppl Congruence space dimension (ppl const Congruence t c, ppl dimension type ∗m)
Writes to m the space dimension of c.
• int ppl Congruence coefficient (ppl const Congruence t c, ppl dimension type var, ppl Coefficient←-
t n)
Copies into n the coefficient of variable var in congruence c.
• int ppl Congruence inhomogeneous term (ppl const Congruence t c, ppl Coefficient t n)
Copies into n the inhomogeneous term of congruence c.
• int ppl Congruence modulus (ppl const Congruence t c, ppl Coefficient t m)
Copies into m the modulus of congruence c.
• int ppl Congruence OK (ppl const Congruence t c)
Returns a positive integer if c is well formed, i.e., if it satisfies all its implementation invariants; returns
0 and perhaps makes some noise if c is broken. Useful for debugging purposes.
Input/Output Functions
36
7.6.1 Detailed Description
Types and functions for congruences.
The types and functions for congruences provide an interface towards Congruence.
The documentation for this interface was generated from the following file:
• ppl c header.h
Related Functions
(Note that these are not member functions.)
Constructors, Assignment and Destructor
• int ppl new Constraint System const iterator (ppl Constraint System const iterator t ∗pcit)
Builds a new ‘const iterator' and writes a handle to it at address pcit.
• int ppl new Constraint System const iterator from Constraint System const iterator (ppl Constraint←-
System const iterator t ∗pcit, ppl const Constraint System const iterator t cit)
Builds a const iterator that is a copy of cit; writes a handle for the newly created const iterator at
address pcit.
• int ppl assign Constraint System const iterator from Constraint System const iterator (ppl Constraint←-
System const iterator t dst, ppl const Constraint System const iterator t src)
Assigns a copy of the const iterator src to dst.
• int ppl delete Constraint System const iterator (ppl const Constraint System const iterator t cit)
Invalidates the handle cit: this makes sure the corresponding resources will eventually be released.
• int ppl Constraint System const iterator dereference (ppl const Constraint System const iterator←-
t cit, ppl const Constraint t ∗pc)
Dereference cit writing a const handle to the resulting constraint at address pc.
• int ppl Constraint System const iterator increment (ppl Constraint System const iterator t cit)
Increment cit so that it ”points” to the next constraint.
• int ppl Constraint System const iterator equal test (ppl const Constraint System const iterator←-
t x, ppl const Constraint System const iterator t y)
Returns a positive integer if the iterators corresponding to x and y are equal; returns 0 if they are
different.
37
Related Functions
(Note that these are not member functions.)
Constructors, Assignment and Destructor
• int ppl Constraint System space dimension (ppl const Constraint System t cs, ppl dimension←-
type ∗m)
Writes to m the dimension of the vector space enclosing cs.
• int ppl Constraint System empty (ppl const Constraint System t cs)
Returns a positive integer if cs contains no (non-trivial) constraint; returns 0 otherwise.
• int ppl Constraint System has strict inequalities (ppl const Constraint System t cs)
Returns a positive integer if cs contains any (non-trivial) strict inequality; returns 0 otherwise.
• int ppl Constraint System begin (ppl const Constraint System t cs, ppl Constraint System const←-
iterator t cit)
Assigns to cit a const iterator ”pointing” to the beginning of the constraint system cs.
• int ppl Constraint System end (ppl const Constraint System t cs, ppl Constraint System const←-
iterator t cit)
Assigns to cit a const iterator ”pointing” past the end of the constraint system cs.
• int ppl Constraint System OK (ppl const Constraint System t cs)
Returns a positive integer if cs is well formed, i.e., if it satisfies all its implementation invariants; returns
0 and perhaps makes some noise if cs is broken. Useful for debugging purposes.
Input/Output Functions
38
• int ppl io fprint Constraint System (FILE ∗stream, ppl const Constraint System t x)
Prints x to the given output stream.
• int ppl io asprint Constraint System (char ∗∗strp, ppl const Constraint System t x)
Prints x to a malloc-allocated string, a pointer to which is returned via strp.
• int ppl Constraint System ascii dump (ppl const Constraint System t x, FILE ∗stream)
Dumps an ascii representation of x on stream.
• int ppl Constraint System ascii load (ppl Constraint System t x, FILE ∗stream)
Loads an ascii representation of x from stream.
Related Functions
(Note that these are not member functions.)
Constructors, Assignment and Destructor
• int ppl new Constraint (ppl Constraint t ∗pc, ppl const Linear Expression t le, enum ppl enum←-
Constraint Type rel)
Creates the new constraint ‘le rel 0' and writes a handle for it at address pc. The space dimension of
the new constraint is equal to the space dimension of le.
• int ppl new Constraint zero dim false (ppl Constraint t ∗pc)
Creates the unsatisfiable (zero-dimension space) constraint 0 = 1 and writes a handle for it at address
pc.
• int ppl new Constraint zero dim positivity (ppl Constraint t ∗pc)
Creates the true (zero-dimension space) constraint 0 ≤ 1, also known as positivity constraint. A handle
for the newly created constraint is written at address pc.
• int ppl new Constraint from Constraint (ppl Constraint t ∗pc, ppl const Constraint t c)
Builds a constraint that is a copy of c; writes a handle for the newly created constraint at address pc.
• int ppl assign Constraint from Constraint (ppl Constraint t dst, ppl const Constraint t src)
Assigns a copy of the constraint src to dst.
• int ppl delete Constraint (ppl const Constraint t c)
Invalidates the handle c: this makes sure the corresponding resources will eventually be released.
• int ppl Constraint space dimension (ppl const Constraint t c, ppl dimension type ∗m)
Writes to m the space dimension of c.
• int ppl Constraint type (ppl const Constraint t c)
Returns the type of constraint c.
• int ppl Constraint coefficient (ppl const Constraint t c, ppl dimension type var, ppl Coefficient←-
t n)
Copies into n the coefficient of variable var in constraint c.
39
• int ppl Constraint inhomogeneous term (ppl const Constraint t c, ppl Coefficient t n)
Copies into n the inhomogeneous term of constraint c.
• int ppl Constraint OK (ppl const Constraint t c)
Returns a positive integer if c is well formed, i.e., if it satisfies all its implementation invariants; returns
0 and perhaps makes some noise if c is broken. Useful for debugging purposes.
Input/Output Functions
Related Functions
(Note that these are not member functions.)
Constructors, Assignment and Destructor
• int ppl new Generator System const iterator (ppl Generator System const iterator t ∗pgit)
Builds a new ‘const iterator' and writes a handle to it at address pgit.
• int ppl new Generator System const iterator from Generator System const iterator (ppl Generator←-
System const iterator t ∗pgit, ppl const Generator System const iterator t git)
Builds a const iterator that is a copy of git; writes a handle for the newly created const iterator at
address pgit.
• int ppl assign Generator System const iterator from Generator System const iterator (ppl Generator←-
System const iterator t dst, ppl const Generator System const iterator t src)
Assigns a copy of the const iterator src to dst.
• int ppl delete Generator System const iterator (ppl const Generator System const iterator t git)
Invalidates the handle git: this makes sure the corresponding resources will eventually be released.
• int ppl Generator System const iterator dereference (ppl const Generator System const iterator←-
t git, ppl const Generator t ∗pg)
Dereference git writing a const handle to the resulting generator at address pg.
40
• int ppl Generator System const iterator increment (ppl Generator System const iterator t git)
Increment git so that it ”points” to the next generator.
• int ppl Generator System const iterator equal test (ppl const Generator System const iterator←-
t x, ppl const Generator System const iterator t y)
Returns a positive integer if the iterators corresponding to x and y are equal; returns 0 if they are
different.
Related Functions
(Note that these are not member functions.)
Constructors, Assignment and Destructor
• int ppl Generator System space dimension (ppl const Generator System t gs, ppl dimension ←-
type ∗m)
Writes to m the dimension of the vector space enclosing gs.
• int ppl Generator System empty (ppl const Generator System t gs)
Returns a positive integer if gs contains no generators; returns 0 otherwise.
• int ppl Generator System begin (ppl const Generator System t gs, ppl Generator System const←-
iterator t git)
Assigns to git a const iterator ”pointing” to the beginning of the generator system gs.
• int ppl Generator System end (ppl const Generator System t gs, ppl Generator System const←-
iterator t git)
41
Assigns to git a const iterator ”pointing” past the end of the generator system gs.
• int ppl Generator System OK (ppl const Generator System t gs)
Returns a positive integer if gs is well formed, i.e., if it satisfies all its implementation invariants; returns
0 and perhaps makes some noise if gs is broken. Useful for debugging purposes.
Input/Output Functions
Related Functions
(Note that these are not member functions.)
Constructors, Assignment and Destructor
• int ppl new Generator (ppl Generator t ∗pg, ppl const Linear Expression t le, enum ppl enum←-
Generator Type t, ppl const Coefficient t d)
Creates a new generator of direction le and type t. If the generator to be created is a point or a closure
point, the divisor d is applied to le. For other types of generators d is simply disregarded. A handle for
the new generator is written at address pg. The space dimension of the new generator is equal to the
space dimension of le.
• int ppl new Generator zero dim point (ppl Generator t ∗pg)
Creates the point that is the origin of the zero-dimensional space R0 . Writes a handle for the new
generator at address pg.
• int ppl new Generator zero dim closure point (ppl Generator t ∗pg)
Creates, as a closure point, the point that is the origin of the zero-dimensional space R0 . Writes a handle
for the new generator at address pg.
42
• int ppl new Generator from Generator (ppl Generator t ∗pg, ppl const Generator t g)
Builds a generator that is a copy of g; writes a handle for the newly created generator at address pg.
• int ppl assign Generator from Generator (ppl Generator t dst, ppl const Generator t src)
Assigns a copy of the generator src to dst.
• int ppl delete Generator (ppl const Generator t g)
Invalidates the handle g: this makes sure the corresponding resources will eventually be released.
• int ppl Generator space dimension (ppl const Generator t g, ppl dimension type ∗m)
Writes to m the space dimension of g.
• int ppl Generator type (ppl const Generator t g)
Returns the type of generator g.
• int ppl Generator coefficient (ppl const Generator t g, ppl dimension type var, ppl Coefficient←-
t n)
Copies into n the coefficient of variable var in generator g.
• int ppl Generator divisor (ppl const Generator t g, ppl Coefficient t n)
If g is a point or a closure point assigns its divisor to n.
• int ppl Generator OK (ppl const Generator t g)
Returns a positive integer if g is well formed, i.e., if it satisfies all its implementation invariants; returns
0 and perhaps makes some noise if g is broken. Useful for debugging purposes.
Input/Output Functions
• ppl c header.h
7.13 ppl Grid Generator System const iterator tag Interface Reference
Types and functions for iterating on grid generator systems.
#include <ppl c header.h>
43
Related Functions
(Note that these are not member functions.)
Constructors, Assignment and Destructor
• int ppl new Grid Generator System const iterator (ppl Grid Generator System const iterator ←-
t ∗pgit)
Builds a new ‘const iterator' and writes a handle to it at address pgit.
• int ppl new Grid Generator System const iterator from Grid Generator System const iterator (ppl←-
Grid Generator System const iterator t ∗pgit, ppl const Grid Generator System const iterator←-
t git)
Builds a const iterator that is a copy of git; writes a handle for the newly created const iterator at
address pgit.
• int ppl assign Grid Generator System const iterator from Grid Generator System const iterator
(ppl Grid Generator System const iterator t dst, ppl const Grid Generator System const iterator←-
t src)
Assigns a copy of the const iterator src to dst.
• int ppl delete Grid Generator System const iterator (ppl const Grid Generator System const ←-
iterator t git)
Invalidates the handle git: this makes sure the corresponding resources will eventually be released.
• int ppl Grid Generator System const iterator dereference (ppl const Grid Generator System ←-
const iterator t git, ppl const Grid Generator t ∗pg)
Dereference git writing a const handle to the resulting grid generator at address pg.
• int ppl Grid Generator System const iterator increment (ppl Grid Generator System const iterator←-
t git)
Increment git so that it ”points” to the next grid generator.
• int ppl Grid Generator System const iterator equal test (ppl const Grid Generator System const←-
iterator t x, ppl const Grid Generator System const iterator t y)
Returns a positive integer if the iterators corresponding to x and y are equal; returns 0 if they are
different.
Related Functions
(Note that these are not member functions.)
Constructors, Assignment and Destructor
• int ppl new Grid Generator System (ppl Grid Generator System t ∗pgs)
44
Builds an empty system of grid generators and writes a handle to it at address pgs.
• int ppl new Grid Generator System from Grid Generator (ppl Grid Generator System t ∗pgs, ppl←-
const Grid Generator t g)
Builds the singleton grid generator system containing only a copy of generator g; writes a handle for
the newly created system at address pgs.
• int ppl new Grid Generator System from Grid Generator System (ppl Grid Generator System←-
t ∗pgs, ppl const Grid Generator System t gs)
Builds a grid generator system that is a copy of gs; writes a handle for the newly created system at
address pgs.
• int ppl assign Grid Generator System from Grid Generator System (ppl Grid Generator System←-
t dst, ppl const Grid Generator System t src)
Assigns a copy of the grid generator system src to dst.
• int ppl delete Grid Generator System (ppl const Grid Generator System t gs)
Invalidates the handle gs: this makes sure the corresponding resources will eventually be released.
• int ppl Grid Generator System space dimension (ppl const Grid Generator System t gs, ppl ←-
dimension type ∗m)
Writes to m the dimension of the vector space enclosing gs.
• int ppl Grid Generator System empty (ppl const Grid Generator System t gs)
Returns a positive integer if gs contains no generator; returns 0 otherwise.
• int ppl Grid Generator System begin (ppl const Grid Generator System t gs, ppl Grid Generator←-
System const iterator t git)
Assigns to git a const iterator ”pointing” to the beginning of the grid generator system gs.
• int ppl Grid Generator System end (ppl const Grid Generator System t gs, ppl Grid Generator←-
System const iterator t git)
Assigns to git a const iterator ”pointing” past the end of the grid generator system gs.
• int ppl Grid Generator System OK (ppl const Grid Generator System t gs)
Returns a positive integer if gs is well formed, i.e., if it satisfies all its implementation invariants; returns
0 and perhaps makes some noise if gs is broken. Useful for debugging purposes.
• int ppl Grid Generator System clear (ppl Grid Generator System t gs)
Removes all the generators from the grid generator system gs and sets its space dimension to 0.
• int ppl Grid Generator System insert Grid Generator (ppl Grid Generator System t gs, ppl ←-
const Grid Generator t g)
Inserts a copy of the grid generator g into gs; the space dimension is increased, if necessary.
Input/Output Functions
• int ppl io print Grid Generator System (ppl const Grid Generator System t x)
Prints x to stdout.
• int ppl io fprint Grid Generator System (FILE ∗stream, ppl const Grid Generator System t x)
Prints x to the given output stream.
• int ppl io asprint Grid Generator System (char ∗∗strp, ppl const Grid Generator System t x)
Prints x to a malloc-allocated string, a pointer to which is returned via strp.
• int ppl Grid Generator System ascii dump (ppl const Grid Generator System t x, FILE ∗stream)
Dumps an ascii representation of x on stream.
• int ppl Grid Generator System ascii load (ppl Grid Generator System t x, FILE ∗stream)
Loads an ascii representation of x from stream.
45
7.14.1 Detailed Description
Types and functions for grid generator systems.
The types and functions for grid generator systems provide an interface towards Grid Generator ←-
System.
The documentation for this interface was generated from the following file:
• ppl c header.h
Related Functions
(Note that these are not member functions.)
• int ppl new Grid Generator (ppl Grid Generator t ∗pg, ppl const Linear Expression t le, enum
ppl enum Grid Generator Type t, ppl const Coefficient t d)
Creates a new grid generator of direction le and type t. If the grid generator to be created is a point or
a parameter, the divisor d is applied to le. If it is a line, d is simply disregarded. A handle for the new
grid generator is written at address pg. The space dimension of the new grid generator is equal to the
space dimension of le.
• int ppl new Grid Generator zero dim point (ppl Grid Generator t ∗pg)
Creates the point that is the origin of the zero-dimensional space R0 . Writes a handle for the new grid
generator at address pg.
• int ppl new Grid Generator from Grid Generator (ppl Grid Generator t ∗pg, ppl const Grid ←-
Generator t g)
Builds a grid generator that is a copy of g; writes a handle for the newly created grid generator at
address pg.
• int ppl assign Grid Generator from Grid Generator (ppl Grid Generator t dst, ppl const Grid←-
Generator t src)
Assigns a copy of the grid generator src to dst.
• int ppl delete Grid Generator (ppl const Grid Generator t g)
Invalidates the handle g: this makes sure the corresponding resources will eventually be released.
• int ppl Grid Generator space dimension (ppl const Grid Generator t g, ppl dimension type ∗m)
Writes to m the space dimension of g.
• int ppl Grid Generator type (ppl const Grid Generator t g)
Returns the type of grid generator g.
• int ppl Grid Generator coefficient (ppl const Grid Generator t g, ppl dimension type var, ppl ←-
Coefficient t n)
Copies into n the coefficient of variable var in grid generator g.
• int ppl Grid Generator divisor (ppl const Grid Generator t g, ppl Coefficient t n)
If g is a point or a parameter assigns its divisor to n.
• int ppl Grid Generator OK (ppl const Grid Generator t g)
Returns a positive integer if g is well formed, i.e., if it satisfies all its implementation invariants; returns
0 and perhaps makes some noise if g is broken. Useful for debugging purposes.
Input/Output Functions
46
• int ppl io print Grid Generator (ppl const Grid Generator t x)
Prints x to stdout.
• int ppl io fprint Grid Generator (FILE ∗stream, ppl const Grid Generator t x)
Prints x to the given output stream.
• int ppl io asprint Grid Generator (char ∗∗strp, ppl const Grid Generator t x)
Prints x to a malloc-allocated string, a pointer to which is returned via strp.
• int ppl Grid Generator ascii dump (ppl const Grid Generator t x, FILE ∗stream)
Dumps an ascii representation of x on stream.
• int ppl Grid Generator ascii load (ppl Grid Generator t x, FILE ∗stream)
Loads an ascii representation of x from stream.
Related Functions
(Note that these are not member functions.)
Constructors, Assignment and Destructor
47
Builds a linear expression corresponding to grid generator g; writes a handle for the newly created
linear expression at address ple.
• int ppl assign Linear Expression from Linear Expression (ppl Linear Expression t dst, ppl const←-
Linear Expression t src)
Assigns a copy of the linear expression src to dst.
• int ppl delete Linear Expression (ppl const Linear Expression t le)
Invalidates the handle le: this makes sure the corresponding resources will eventually be released.
Functions that Do Not Modify the Linear Expression
• int ppl Linear Expression space dimension (ppl const Linear Expression t le, ppl dimension ←-
type ∗m)
Writes to m the space dimension of le.
• int ppl Linear Expression coefficient (ppl const Linear Expression t le, ppl dimension type var,
ppl Coefficient t n)
Copies into n the coefficient of variable var in the linear expression le.
• int ppl Linear Expression inhomogeneous term (ppl const Linear Expression t le, ppl Coefficient←-
t n)
Copies into n the inhomogeneous term of linear expression le.
• int ppl Linear Expression OK (ppl const Linear Expression t le)
Returns a positive integer if le is well formed, i.e., if it satisfies all its implementation invariants; returns
0 and perhaps makes some noise if le is broken. Useful for debugging purposes.
• int ppl Linear Expression is zero (ppl const Linear Expression t le)
Returns true if and only if ∗this is 0.
• int ppl Linear Expression all homogeneous terms are zero (ppl const Linear Expression t le)
Returns true if and only if all the homogeneous terms of ∗this are 0.
Functions that May Modify the Linear Expression
• int ppl Linear Expression add to coefficient (ppl Linear Expression t le, ppl dimension type var,
ppl const Coefficient t n)
Adds n to the coefficient of variable var in the linear expression le. The space dimension is set to be
the maximum between var + 1 and the old space dimension.
• int ppl Linear Expression add to inhomogeneous (ppl Linear Expression t le, ppl const Coefficient←-
t n)
Adds n to the inhomogeneous term of the linear expression le.
• int ppl add Linear Expression to Linear Expression (ppl Linear Expression t dst, ppl const ←-
Linear Expression t src)
Adds the linear expression src to dst.
• int ppl subtract Linear Expression from Linear Expression (ppl Linear Expression t dst, ppl ←-
const Linear Expression t src)
Subtracts the linear expression src from dst.
• int ppl multiply Linear Expression by Coefficient (ppl Linear Expression t le, ppl const Coefficient←-
t n)
Multiply the linear expression dst by n.
Input/Output Functions
• int ppl io print Linear Expression (ppl const Linear Expression t x)
Prints x to stdout.
• int ppl io fprint Linear Expression (FILE ∗stream, ppl const Linear Expression t x)
Prints x to the given output stream.
• int ppl io asprint Linear Expression (char ∗∗strp, ppl const Linear Expression t x)
Prints x to a malloc-allocated string, a pointer to which is returned via strp.
• int ppl Linear Expression ascii dump (ppl const Linear Expression t x, FILE ∗stream)
Dumps an ascii representation of x on stream.
• int ppl Linear Expression ascii load (ppl Linear Expression t x, FILE ∗stream)
Loads an ascii representation of x from stream.
48
7.16.1 Detailed Description
Types and functions for linear expressions.
The types and functions for linear expression provide an interface towards Linear Expression.
The documentation for this interface was generated from the following file:
• ppl c header.h
Related Functions
(Note that these are not member functions.)
Symbolic Constants
• int ppl new MIP Problem from space dimension (ppl MIP Problem t ∗pmip, ppl dimension ←-
type d)
Builds a trivial MIP problem of dimension d and writes a handle to it at address pmip.
• int ppl new MIP Problem (ppl MIP Problem t ∗pmip, ppl dimension type d, ppl const Constraint←-
System t cs, ppl const Linear Expression t le, int m)
Builds a MIP problem of space dimension d having feasible region cs, objective function le and opti-
mization mode m; writes a handle to it at address pmip.
• int ppl new MIP Problem from MIP Problem (ppl MIP Problem t ∗pmip, ppl const MIP Problem←-
t mip)
Builds a MIP problem that is a copy of mip; writes a handle for the newly created system at address
pmip.
• int ppl assign MIP Problem from MIP Problem (ppl MIP Problem t dst, ppl const MIP Problem←-
t src)
Assigns a copy of the MIP problem src to dst.
49
• int ppl delete MIP Problem (ppl const MIP Problem t mip)
Invalidates the handle mip: this makes sure the corresponding resources will eventually be released.
• int ppl MIP Problem space dimension (ppl const MIP Problem t mip, ppl dimension type ∗m)
Writes to m the dimension of the vector space enclosing mip.
• int ppl MIP Problem number of integer space dimensions (ppl const MIP Problem t mip, ppl←-
dimension type ∗m)
Writes to m the number of integer space dimensions of mip.
• int ppl MIP Problem integer space dimensions (ppl const MIP Problem t mip, ppl dimension←-
type ds[ ])
Writes in the first positions of the array ds all the integer space dimensions of problem mip. If the array
is not big enough to hold all of the integer space dimensions, the behavior is undefined.
• int ppl MIP Problem number of constraints (ppl const MIP Problem t mip, ppl dimension type
∗m)
Writes to m the number of constraints defining the feasible region of mip.
• int ppl MIP Problem constraint at index (ppl const MIP Problem t mip, ppl dimension type i,
ppl const Constraint t ∗pc)
Writes at address pc a const handle to the i-th constraint defining the feasible region of the MIP
problem mip.
• int ppl MIP Problem objective function (ppl const MIP Problem t mip, ppl const Linear Expression←-
t ∗ple)
Writes a const handle to the linear expression defining the objective function of the MIP problem mip at
address ple.
• int ppl MIP Problem optimization mode (ppl const MIP Problem t mip)
Returns the optimization mode of the MIP problem mip.
• int ppl MIP Problem OK (ppl const MIP Problem t mip)
Returns a positive integer if mip is well formed, i.e., if it satisfies all its implementation invariants;
returns 0 and perhaps makes some noise if mip is broken. Useful for debugging purposes.
50
• int ppl MIP Problem is satisfiable (ppl const MIP Problem t mip)
Returns a positive integer if mip is satisfiable; returns 0 otherwise.
• int ppl MIP Problem solve (ppl const MIP Problem t mip)
Solves the MIP problem mip, returning an exit status.
• int ppl MIP Problem evaluate objective function (ppl const MIP Problem t mip, ppl const Generator←-
t g, ppl Coefficient t num, ppl Coefficient t den)
Evaluates the objective function of mip on point g.
• int ppl MIP Problem feasible point (ppl const MIP Problem t mip, ppl const Generator t ∗pg)
Writes a const handle to a feasible point for the MIP problem mip at address pg.
• int ppl MIP Problem optimizing point (ppl const MIP Problem t mip, ppl const Generator ←-
t ∗pg)
Writes a const handle to an optimizing point for the MIP problem mip at address pg.
• int ppl MIP Problem optimal value (ppl const MIP Problem t mip, ppl Coefficient t num, ppl←-
Coefficient t den)
Returns the optimal value for mip.
• int ppl MIP Problem get control parameter (ppl const MIP Problem t mip, int name)
Returns the value of control parameter name in problem mip.
• int ppl MIP Problem set control parameter (ppl MIP Problem t mip, int value)
Sets control parameter value in problem mip.
• int ppl MIP Problem total memory in bytes (ppl const MIP Problem t mip, size t ∗sz)
Writes into ∗sz the size in bytes of the memory occupied by mip.
• int ppl MIP Problem external memory in bytes (ppl const MIP Problem t mip, size t ∗sz)
Writes into ∗sz the size in bytes of the memory managed by mip.
Input/Output Functions
51
int ppl MIP Problem evaluate objective function ( ppl const MIP Problem t mip, ppl const Generator←-
t g, ppl Coefficient t num, ppl Coefficient t den ) [related] Evaluates the objective function
of mip on point g.
52
Parameters
mip The MIP problem defining the objective function;
g The generator on which the objective function will be evaluated;
num Will be assigned the numerator of the objective function value;
den Will be assigned the denominator of the objective function value;
int ppl MIP Problem optimal value ( ppl const MIP Problem t mip, ppl Coefficient t num, ppl←-
Coefficient t den ) [related] Returns the optimal value for mip.
Parameters
mip The MIP problem;
num Will be assigned the numerator of the optimal value;
den Will be assigned the denominator of the optimal value.
The documentation for this interface was generated from the following file:
• ppl c header.h
Related Functions
(Note that these are not member functions.)
• int ppl PIP Decision Node get child node (ppl const PIP Decision Node t pip dec, int b, ppl ←-
const PIP Tree Node t ∗pip tree)
Writes to pip tree a const pointer to either the true branch (if b is not zero) or the false branch (if b is
zero) of pip dec.
Input/Output Functions
• int ppl io print PIP Decision Node (ppl const PIP Decision Node t x)
Prints x to stdout.
• int ppl io fprint PIP Decision Node (FILE ∗stream, ppl const PIP Decision Node t x)
Prints x to the given output stream.
• int ppl io asprint PIP Decision Node (char ∗∗strp, ppl const PIP Decision Node t x)
Prints x to a malloc-allocated string, a pointer to which is returned via strp.
• int ppl PIP Decision Node ascii dump (ppl const PIP Decision Node t x, FILE ∗stream)
Dumps an ascii representation of x on stream.
• int ppl PIP Decision Node ascii load (ppl PIP Decision Node t x, FILE ∗stream)
Loads an ascii representation of x from stream.
• ppl c header.h
53
7.19 ppl PIP Problem tag Interface Reference
Types and functions for PIP problems.
#include <ppl c header.h>
Related Functions
(Note that these are not member functions.)
Symbolic Constants
• int ppl new PIP Problem from space dimension (ppl PIP Problem t ∗ppip, ppl dimension type
d)
Builds a trivial PIP problem of dimension d and writes a handle to it at address ppip.
• int ppl new PIP Problem from PIP Problem (ppl PIP Problem t ∗ppip, ppl const PIP Problem←-
t pip)
Builds a PIP problem that is a copy of pip; writes a handle for the newly created problem at address
ppip.
• int ppl assign PIP Problem from PIP Problem (ppl PIP Problem t dst, ppl const PIP Problem←-
t src)
Assigns a copy of the PIP problem src to dst.
• int ppl new PIP Problem from constraints (ppl PIP Problem t ∗ppip, ppl dimension type d, ppl←-
Constraint System const iterator t first, ppl Constraint System const iterator t last, size t n, ppl←-
dimension type ds[ ])
Builds a PIP problem having space dimension d from the sequence of constraints in the range [first, last);
the n dimensions whose indices occur in ds are interpreted as parameters.
• int ppl delete PIP Problem (ppl const PIP Problem t pip)
Invalidates the handle pip: this makes sure the corresponding resources will eventually be released.
• int ppl PIP Problem space dimension (ppl const PIP Problem t pip, ppl dimension type ∗m)
54
Writes to m the dimension of the vector space enclosing pip.
• int ppl PIP Problem number of parameter space dimensions (ppl const PIP Problem t pip, ppl←-
dimension type ∗m)
Writes to m the number of parameter space dimensions of pip.
• int ppl PIP Problem parameter space dimensions (ppl const PIP Problem t pip, ppl dimension←-
type ds[ ])
Writes in the first positions of the array ds all the parameter space dimensions of problem pip. If the
array is not big enough to hold all of the parameter space dimensions, the behavior is undefined.
• int ppl PIP Problem get big parameter dimension (ppl const PIP Problem t pip, ppl dimension←-
type ∗pd)
Writes into ∗pd the big parameter dimension of PIP problem pip.
• int ppl PIP Problem number of constraints (ppl const PIP Problem t pip, ppl dimension type ∗m)
Writes to m the number of constraints defining the feasible region of pip.
• int ppl PIP Problem constraint at index (ppl const PIP Problem t pip, ppl dimension type i, ppl←-
const Constraint t ∗pc)
Writes at address pc a const handle to the i-th constraint defining the feasible region of the PIP
problem pip.
• int ppl PIP Problem total memory in bytes (ppl const PIP Problem t pip, size t ∗sz)
Writes into ∗sz the size in bytes of the memory occupied by pip.
• int ppl PIP Problem external memory in bytes (ppl const PIP Problem t pip, size t ∗sz)
Writes into ∗sz the size in bytes of the memory managed by pip.
• int ppl PIP Problem OK (ppl const PIP Problem t pip)
Returns a positive integer if pip is well formed, i.e., if it satisfies all its implementation invariants;
returns 0 and perhaps makes some noise if pip is broken. Useful for debugging purposes.
• int ppl PIP Problem is satisfiable (ppl const PIP Problem t pip)
Returns a positive integer if pip is satisfiable and an optimal solution can be found; returns 0 otherwise.
• int ppl PIP Problem solve (ppl const PIP Problem t pip)
Solves the PIP problem pip, returning an exit status.
• int ppl PIP Problem solution (ppl const PIP Problem t pip, ppl const PIP Tree Node t ∗pip ←-
tree)
55
Writes to pip tree a solution for pip, if it exists.
• int ppl PIP Problem optimizing solution (ppl const PIP Problem t pip, ppl const PIP Tree Node←-
t ∗pip tree)
Writes to pip tree an optimizing solution for pip, if it exists.
• int ppl PIP Problem get control parameter (ppl const PIP Problem t pip, int name)
Returns the value of control parameter name in problem pip.
• int ppl PIP Problem set control parameter (ppl PIP Problem t pip, int value)
Sets control parameter value in problem pip.
Input/Output Functions
int ppl PIP Problem space dimension ( ppl const PIP Problem t pip, ppl dimension type ∗ m )
[related] Writes to m the dimension of the vector space enclosing pip.
The vector space dimensions includes both the problem variables and the problem parameters, but they
do not include the artificial parameters.
int ppl PIP Problem add space dimensions and embed ( ppl PIP Problem t pip, ppl dimension←-
type pip vars, ppl dimension type pip params ) [related] Adds pip vars + pip params
new space dimensions and embeds the PIP problem pip in the new vector space.
Parameters
pip The PIP problem to be embedded in the new vector space.
pip vars The number of space dimensions to add that are interpreted as PIP problem variables
(i.e., non parameters). These are added before adding the pip params parameters.
pip params The number of space dimensions to add that are interpreted as PIP problem parame-
ters. These are added after having added the pip vars problem variables.
The new space dimensions will be those having the highest indexes in the new PIP problem; they are ini-
tially unconstrained.
56
int ppl PIP Problem solve ( ppl const PIP Problem t pip ) [related] Solves the PIP problem
pip, returning an exit status.
Returns
PPL PIP PROBLEM STATUS UNFEASIBLE if the PIP problem is not satisfiable; PPL PIP PR←-
OBLEM STATUS OPTIMIZED if the PIP problem admits an optimal solution.
The documentation for this interface was generated from the following file:
• ppl c header.h
Related Functions
(Note that these are not member functions.)
• int ppl PIP Solution Node get parametric values (ppl const PIP Solution Node t pip sol, ppl dimension←-
type var, ppl const Linear Expression t ∗le)
Writes to le a const pointer to the parametric expression of the values of variable var in solution node
pip sol.
Input/Output Functions
• int ppl io print PIP Solution Node (ppl const PIP Solution Node t x)
Prints x to stdout.
• int ppl io fprint PIP Solution Node (FILE ∗stream, ppl const PIP Solution Node t x)
Prints x to the given output stream.
• int ppl io asprint PIP Solution Node (char ∗∗strp, ppl const PIP Solution Node t x)
Prints x to a malloc-allocated string, a pointer to which is returned via strp.
• int ppl PIP Solution Node ascii dump (ppl const PIP Solution Node t x, FILE ∗stream)
Dumps an ascii representation of x on stream.
• int ppl PIP Solution Node ascii load (ppl PIP Solution Node t x, FILE ∗stream)
Loads an ascii representation of x from stream.
57
pip sol The solution tree node.
var The variable which is queried about.
le The returned expression for variable var.
Returns
PPL ERROR INVALID ARGUMENT Returned if var is dimension-incompatible with ∗this or
if var is a problem parameter.
The documentation for this interface was generated from the following file:
• ppl c header.h
Related Functions
(Note that these are not member functions.)
• int ppl PIP Tree Node as solution (ppl const PIP Tree Node t spip tree, ppl const PIP Solution←-
Node t ∗dpip tree)
Writes to dpip tree the solution node if spip tree is a solution node, and 0 otherwise.
• int ppl PIP Tree Node as decision (ppl const PIP Tree Node t spip tree, ppl const PIP Decision←-
Node t ∗dpip tree)
Writes to dpip tree the decision node if spip tree is a decision node, and 0 otherwise.
• int ppl PIP Tree Node get constraints (ppl const PIP Tree Node t pip tree, ppl const Constraint←-
System t ∗pcs)
Writes to pcs the local system of parameter constraints at the pip tree node pip tree.
• int ppl PIP Tree Node OK (ppl const PIP Tree Node t pip)
Returns a positive integer if pip tree is well formed, i.e., if it satisfies all its implementation invariants;
returns 0 and perhaps makes some noise if pip tree is broken. Useful for debugging purposes.
• int ppl PIP Tree Node number of artificials (ppl const PIP Tree Node t pip tree, ppl dimension←-
type ∗m)
Writes to m the number of elements in the artificial parameter sequence in the pip tree node pip tree.
• int ppl PIP Tree Node begin (ppl const PIP Tree Node t pip tree, ppl Artificial Parameter Sequence←-
const iterator t pit)
Assigns to pit a const iterator ”pointing” to the beginning of the artificial parameter sequence in the pip
tree node pip tree.
• int ppl PIP Tree Node end (ppl const PIP Tree Node t pip tree, ppl Artificial Parameter Sequence←-
const iterator t pit)
Assigns to pit a const iterator ”pointing” to the end of the artificial parameter sequence in the pip tree
node pip tree.
Input/Output Functions
• int ppl io print PIP Tree Node (ppl const PIP Tree Node t x)
Prints x to stdout.
• int ppl io fprint PIP Tree Node (FILE ∗stream, ppl const PIP Tree Node t x)
Prints x to the given output stream.
• int ppl io asprint PIP Tree Node (char ∗∗strp, ppl const PIP Tree Node t x)
58
Prints x to a malloc-allocated string, a pointer to which is returned via strp.
• int ppl PIP Tree Node ascii dump (ppl const PIP Tree Node t x, FILE ∗stream)
Dumps an ascii representation of x on stream.
• int ppl PIP Tree Node ascii load (ppl PIP Tree Node t x, FILE ∗stream)
Loads an ascii representation of x from stream.
7.22 ppl Pointset Powerset C Polyhedron const iterator tag Interface Reference
Types and functions for iterating on the disjuncts of a const ppl Pointset Powerset C Polyhedron tag.
Related Functions
(Note that these are not member functions.)
Construction, Initialization and Destruction
• int ppl new Pointset Powerset C Polyhedron const iterator (ppl Pointset Powerset C Polyhedron←-
const iterator t ∗pit)
Builds a new ‘const iterator' and writes a handle to it at address pit.
• int ppl new Pointset Powerset C Polyhedron const iterator from const iterator (ppl Pointset ←-
Powerset C Polyhedron const iterator t ∗pit, ppl const Pointset Powerset C Polyhedron const←-
iterator t y)
Builds a copy of y and writes a handle to it at address pit.
• int ppl Pointset Powerset C Polyhedron const iterator begin (ppl const Pointset Powerset C ←-
Polyhedron t ps, ppl Pointset Powerset C Polyhedron const iterator t psit)
Assigns to psit a const iterator ”pointing” to the beginning of the sequence of disjuncts of ps.
• int ppl Pointset Powerset C Polyhedron const iterator end (ppl const Pointset Powerset C Polyhedron←-
t ps, ppl Pointset Powerset C Polyhedron const iterator t psit)
Assigns to psit a const iterator ”pointing” past the end of the sequence of disjuncts of ps.
• int ppl delete Pointset Powerset C Polyhedron const iterator (ppl const Pointset Powerset C ←-
Polyhedron const iterator t it)
Invalidates the handle it: this makes sure the corresponding resources will eventually be released.
• int ppl Pointset Powerset C Polyhedron const iterator dereference (ppl const Pointset Powerset←-
C Polyhedron const iterator t it, ppl const Polyhedron t ∗d)
Dereferences it writing a const handle to the resulting disjunct at address d.
• int ppl Pointset Powerset C Polyhedron const iterator increment (ppl Pointset Powerset C Polyhedron←-
const iterator t it)
Increments it so that it ”points” to the next disjunct.
• int ppl Pointset Powerset C Polyhedron const iterator decrement (ppl Pointset Powerset C Polyhedron←-
const iterator t it)
Decrements it so that it ”points” to the previous disjunct.
• int ppl Pointset Powerset C Polyhedron const iterator equal test (ppl const Pointset Powerset←-
C Polyhedron const iterator t x, ppl const Pointset Powerset C Polyhedron const iterator t y)
Returns a positive integer if the iterators corresponding to x and y are equal; returns 0 if they are
different.
59
7.22.1 Detailed Description
Types and functions for iterating on the disjuncts of a const ppl Pointset Powerset C Polyhedron tag.
On exit, the disjunct d is still owned by the powerset object: any function call on the owning powerset
object may invalidate it. Moreover, d should not be deleted directly: its resources will be released
when deleting the owning powerset.
The documentation for this interface was generated from the following file:
• C interface.dox
Related Functions
(Note that these are not member functions.)
Construction, Initialization and Destruction
• int ppl new Pointset Powerset C Polyhedron iterator (ppl Pointset Powerset C Polyhedron iterator←-
t ∗pit)
Builds a new ‘iterator' and writes a handle to it at address pit.
• int ppl new Pointset Powerset C Polyhedron iterator from iterator (ppl Pointset Powerset C ←-
Polyhedron iterator t ∗pit, ppl const Pointset Powerset C Polyhedron iterator t y)
Builds a copy of y and writes a handle to it at address pit.
• int ppl Pointset Powerset C Polyhedron iterator begin (ppl Pointset Powerset C Polyhedron ←-
t ps, ppl Pointset Powerset C Polyhedron iterator t psit)
Assigns to psit an iterator ”pointing” to the beginning of the sequence of disjuncts of ps.
• int ppl Pointset Powerset C Polyhedron iterator end (ppl Pointset Powerset C Polyhedron t ps,
ppl Pointset Powerset C Polyhedron iterator t psit)
Assigns to psit an iterator ”pointing” past the end of the sequence of disjuncts of ps.
• int ppl delete Pointset Powerset C Polyhedron iterator (ppl const Pointset Powerset C Polyhedron←-
iterator t it)
Invalidates the handle it: this makes sure the corresponding resources will eventually be released.
• int ppl Pointset Powerset C Polyhedron iterator dereference (ppl const Pointset Powerset C ←-
Polyhedron iterator t it, ppl const Polyhedron t ∗d)
Dereferences it writing a const handle to the resulting disjunct at address d.
• int ppl Pointset Powerset C Polyhedron iterator increment (ppl Pointset Powerset C Polyhedron←-
iterator t it)
Increments it so that it ”points” to the next disjunct.
• int ppl Pointset Powerset C Polyhedron iterator decrement (ppl Pointset Powerset C Polyhedron←-
iterator t it)
60
Decrements it so that it ”points” to the previous disjunct.
• int ppl Pointset Powerset C Polyhedron iterator equal test (ppl const Pointset Powerset C Polyhedron←-
iterator t x, ppl const Pointset Powerset C Polyhedron iterator t y)
Returns a positive integer if the iterators corresponding to x and y are equal; returns 0 if they are
different.
Warning
On exit, the disjunct d is still owned by the powerset object: any function call on the owning powerset
object may invalidate it. Moreover, d should not be deleted directly: its resources will be released
when deleting the owning powerset.
The documentation for this interface was generated from the following file:
• C interface.dox
Related Functions
(Note that these are not member functions.)
Ad Hoc Functions for Pointset Powerset domains
• int ppl Pointset Powerset C Polyhedron omega reduce (ppl const Pointset Powerset C Polyhedron←-
t ps)
Drops from the sequence of disjuncts in ps all the non-maximal elements so that ps is non-redundant.
• int ppl Pointset Powerset C Polyhedron size (ppl const Pointset Powerset C Polyhedron t ps, size←-
t ∗sz)
Writes to sz the number of disjuncts in ps.
• int ppl Pointset Powerset C Polyhedron geometrically covers Pointset Powerset C Polyhedron (ppl←-
const Pointset Powerset C Polyhedron t x, ppl const Pointset Powerset C Polyhedron t y)
Returns a positive integer if powerset x geometrically covers powerset y; returns 0 otherwise.
• int ppl Pointset Powerset C Polyhedron geometrically equals Pointset Powerset C Polyhedron (ppl←-
const Pointset Powerset C Polyhedron t x, ppl const Pointset Powerset C Polyhedron t y)
Returns a positive integer if powerset x is geometrically equal to powerset y; returns 0 otherwise.
• int ppl Pointset Powerset C Polyhedron add disjunct (ppl Pointset Powerset C Polyhedron t ps,
ppl const Polyhedron t d)
61
Adds to ps a copy of disjunct d.
• int ppl Pointset Powerset C Polyhedron drop disjunct (ppl Pointset Powerset C Polyhedron ←-
t ps, ppl const Pointset Powerset C Polyhedron iterator t cit, ppl Pointset Powerset C Polyhedron←-
iterator t it)
Drops from ps the disjunct pointed to by cit, assigning to it an iterator to the disjunct following cit.
• int ppl Pointset Powerset C Polyhedron drop disjuncts (ppl Pointset Powerset C Polyhedron←-
t ps, ppl const Pointset Powerset C Polyhedron iterator t first, ppl const Pointset Powerset ←-
C Polyhedron iterator t last)
Drops from ps all the disjuncts from first to last (excluded).
• int ppl Pointset Powerset C Polyhedron pairwise reduce (ppl Pointset Powerset C Polyhedron←-
t ps)
Modifies ps by (recursively) merging together the pairs of disjuncts whose upper-bound is the same as
their set-theoretical union.
The documentation for this interface was generated from the following file:
• C interface.dox
Related Functions
(Note that these are not member functions.)
Constructors and Assignment for C Polyhedron
• int ppl new C Polyhedron from space dimension (ppl Polyhedron t ∗pph, ppl dimension type d,
int empty)
Builds a C polyhedron of dimension d and writes an handle to it at address pph. If empty is different
from zero, the newly created polyhedron will be empty; otherwise, it will be a universe polyhedron.
• int ppl new C Polyhedron from C Polyhedron (ppl Polyhedron t ∗pph, ppl const Polyhedron←-
t ph)
Builds a C polyhedron that is a copy of ph; writes a handle for the newly created polyhedron at address
pph.
62
• int ppl new C Polyhedron from C Polyhedron with complexity (ppl Polyhedron t ∗pph, ppl ←-
const Polyhedron t ph, int complexity)
Builds a C polyhedron that is a copy of ph; writes a handle for the newly created polyhedron at address
pph.
• int ppl new C Polyhedron from Constraint System (ppl Polyhedron t ∗pph, ppl const Constraint←-
System t cs)
Builds a new C polyhedron from the system of constraints cs and writes a handle for the newly created
polyhedron at address pph.
• int ppl new C Polyhedron recycle Constraint System (ppl Polyhedron t ∗pph, ppl Constraint ←-
System t cs)
Builds a new C polyhedron recycling the system of constraints cs and writes a handle for the newly
created polyhedron at address pph.
• int ppl new C Polyhedron from Congruence System (ppl Polyhedron t ∗pph, ppl const Congruence←-
System t cs)
Builds a new C polyhedron from the system of congruences cs and writes a handle for the newly created
polyhedron at address pph.
• int ppl new C Polyhedron recycle Congruence System (ppl Polyhedron t ∗pph, ppl Congruence←-
System t cs)
Builds a new C polyhedron recycling the system of congruences cs and writes a handle for the newly
created polyhedron at address pph.
• int ppl assign C Polyhedron from C Polyhedron (ppl Polyhedron t dst, ppl const Polyhedron←-
t src)
Assigns a copy of the C polyhedron src to the C polyhedron dst.
• int ppl new NNC Polyhedron from space dimension (ppl Polyhedron t ∗pph, ppl dimension ←-
type d, int empty)
Builds an NNC polyhedron of dimension d and writes an handle to it at address pph. If empty is differ-
ent from zero, the newly created polyhedron will be empty; otherwise, it will be a universe polyhedron.
• int ppl new NNC Polyhedron from NNC Polyhedron (ppl Polyhedron t ∗pph, ppl const Polyhedron←-
t ph)
Builds an NNC polyhedron that is a copy of ph; writes a handle for the newly created polyhedron at
address pph.
• int ppl new NNC Polyhedron from NNC Polyhedron with complexity (ppl Polyhedron t ∗pph,
ppl const Polyhedron t ph, int complexity)
Builds an NNC polyhedron that is a copy of ph; writes a handle for the newly created polyhedron at
address pph.
• int ppl new NNC Polyhedron from Constraint System (ppl Polyhedron t ∗pph, ppl const Constraint←-
System t cs)
Builds a new NNC polyhedron from the system of constraints cs and writes a handle for the newly
created polyhedron at address pph.
• int ppl new NNC Polyhedron recycle Constraint System (ppl Polyhedron t ∗pph, ppl Constraint←-
System t cs)
Builds a new NNC polyhedron recycling the system of constraints cs and writes a handle for the newly
created polyhedron at address pph.
• int ppl new NNC Polyhedron from Congruence System (ppl Polyhedron t ∗pph, ppl const ←-
Congruence System t cs)
Builds a new NNC polyhedron from the system of congruences cs and writes a handle for the newly
created polyhedron at address pph.
• int ppl new NNC Polyhedron recycle Congruence System (ppl Polyhedron t ∗pph, ppl Congruence←-
System t cs)
Builds a new NNC polyhedron recycling the system of congruences cs and writes a handle for the newly
created polyhedron at address pph.
63
• int ppl assign NNC Polyhedron from NNC Polyhedron (ppl Polyhedron t dst, ppl const Polyhedron←-
t src)
Assigns a copy of the NNC polyhedron src to the NNC polyhedron dst.
• int ppl new C Polyhedron from NNC Polyhedron (ppl Polyhedron t ∗pph, ppl const Polyhedron←-
t ph)
Builds a C polyhedron that is a copy of the topological closure of the NNC polyhedron ph; writes a
handle for the newly created polyhedron at address pph.
• int ppl new C Polyhedron from NNC Polyhedron with complexity (ppl Polyhedron t ∗pph, ppl←-
const Polyhedron t ph, int complexity)
Builds a C polyhedron that approximates NNC Polyhedron ph, using an algorithm whose complexity
does not exceed complexity; writes a handle for the newly created polyhedron at address pph.
• int ppl new NNC Polyhedron from C Polyhedron (ppl Polyhedron t ∗pph, ppl const Polyhedron←-
t ph)
Builds an NNC polyhedron that is a copy of the C polyhedron ph; writes a handle for the newly created
polyhedron at address pph.
• int ppl new NNC Polyhedron from C Polyhedron with complexity (ppl Polyhedron t ∗pph, ppl←-
const Polyhedron t ph, int complexity)
Builds an NNC polyhedron that approximates C Polyhedron ph, using an algorithm whose complexity
does not exceed complexity; writes a handle for the newly created polyhedron at address pph.
• int ppl Polyhedron space dimension (ppl const Polyhedron t ph, ppl dimension type ∗m)
Writes to m the dimension of the vector space enclosing ph.
• int ppl Polyhedron affine dimension (ppl const Polyhedron t ph, ppl dimension type ∗m)
Writes to m the affine dimension of ph (not to be confused with the dimension of its enclosing vector
space) or 0, if ph is empty.
• int ppl Polyhedron relation with Constraint (ppl const Polyhedron t ph, ppl const Constraint ←-
t c)
Checks the relation between the polyhedron ph and the constraint c.
• int ppl Polyhedron relation with Generator (ppl const Polyhedron t ph, ppl const Generator t g)
Checks the relation between the polyhedron ph and the generator g.
• int ppl Polyhedron get constraints (ppl const Polyhedron t ph, ppl const Constraint System ←-
t ∗pcs)
Writes a const handle to the constraint system defining the polyhedron ph at address pcs.
• int ppl Polyhedron get congruences (ppl const Polyhedron t ph, ppl const Congruence System←-
t ∗pcs)
Writes at address pcs a const handle to a system of congruences approximating the polyhedron ph.
• int ppl Polyhedron get minimized constraints (ppl const Polyhedron t ph, ppl const Constraint←-
System t ∗pcs)
64
Writes a const handle to the minimized constraint system defining the polyhedron ph at address pcs.
• int ppl Polyhedron get minimized congruences (ppl const Polyhedron t ph, ppl const Congruence←-
System t ∗pcs)
Writes at address pcs a const handle to a system of minimized congruences approximating the polyhe-
dron ph.
• int ppl Polyhedron is empty (ppl const Polyhedron t ph)
Returns a positive integer if ph is empty; returns 0 if ph is not empty.
• int ppl Polyhedron is universe (ppl const Polyhedron t ph)
Returns a positive integer if ph is a universe polyhedron; returns 0 if it is not.
• int ppl Polyhedron is bounded (ppl const Polyhedron t ph)
Returns a positive integer if ph is bounded; returns 0 if ph is unbounded.
• int ppl Polyhedron contains integer point (ppl const Polyhedron t ph)
Returns a positive integer if ph contains at least one integer point; returns 0 otherwise.
• int ppl Polyhedron is topologically closed (ppl const Polyhedron t ph)
Returns a positive integer if ph is topologically closed; returns 0 if ph is not topologically closed.
• int ppl Polyhedron is discrete (ppl const Polyhedron t ph)
Returns a positive integer if ph is a discrete set; returns 0 if ph is not a discrete set.
• int ppl Polyhedron constrains (ppl Polyhedron t ph, ppl dimension type var)
Returns a positive integer if ph constrains var; returns 0 if ph does not constrain var.
• int ppl Polyhedron bounds from above (ppl const Polyhedron t ph, ppl const Linear Expression←-
t le)
Returns a positive integer if le is bounded from above in ph; returns 0 otherwise.
• int ppl Polyhedron bounds from below (ppl const Polyhedron t ph, ppl const Linear Expression←-
t le)
Returns a positive integer if le is bounded from below in ph; returns 0 otherwise.
• int ppl Polyhedron maximize with point (ppl const Polyhedron t ph, ppl const Linear Expression←-
t le, ppl Coefficient t sup n, ppl Coefficient t sup d, int ∗pmaximum, ppl Generator t point)
Returns a positive integer if ph is not empty and le is bounded from above in ph, in which case the
supremum value and a point where le reaches it are computed.
• int ppl Polyhedron maximize (ppl const Polyhedron t ph, ppl const Linear Expression t le, ppl←-
Coefficient t sup n, ppl Coefficient t sup d, int ∗pmaximum)
The same as ppl Polyhedron maximize with point, but without the output argument for the location
where the supremum value is reached.
• int ppl Polyhedron minimize with point (ppl const Polyhedron t ph, ppl const Linear Expression←-
t le, ppl Coefficient t inf n, ppl Coefficient t inf d, int ∗pminimum, ppl Generator t point)
Returns a positive integer if ph is not empty and le is bounded from below in ph, in which case the
infimum value and a point where le reaches it are computed.
• int ppl Polyhedron minimize with point (ppl const Polyhedron t ph, ppl const Linear Expression←-
t le, ppl Coefficient t inf n, ppl Coefficient t inf d, int ∗pminimum)
The same as ppl Polyhedron minimize with point, but without the output argument for the location where
the infimum value is reached.
• int ppl Polyhedron contains Polyhedron (ppl const Polyhedron t x, ppl const Polyhedron t y)
Returns a positive integer if x contains or is equal to y; returns 0 if it does not.
• int ppl Polyhedron strictly contains Polyhedron (ppl const Polyhedron t x, ppl const Polyhedron←-
t y)
Returns a positive integer if x strictly contains y; returns 0 if it does not.
• int ppl Polyhedron is disjoint from Polyhedron (ppl const Polyhedron t x, ppl const Polyhedron←-
t y)
Returns a positive integer if x and y are disjoint; returns 0 if they are not.
• int ppl Polyhedron equals Polyhedron (ppl const Polyhedron t x, ppl const Polyhedron t y)
Returns a positive integer if x and y are the same polyhedron; returns 0 if they are different.
• int ppl Polyhedron OK (ppl const Polyhedron t ph)
65
Returns a positive integer if ph is well formed, i.e., if it satisfies all its implementation invariants; returns
0 and perhaps makes some noise if ph is broken. Useful for debugging purposes.
• int ppl Polyhedron external memory in bytes (ppl const Polyhedron t ph, size t ∗sz)
Writes to sz a lower bound to the size in bytes of the memory managed by ph.
• int ppl Polyhedron total memory in bytes (ppl const Polyhedron t ph, size t ∗sz)
Writes to sz a lower bound to the size in bytes of the memory managed by ph.
• int ppl Polyhedron add constraint (ppl Polyhedron t ph, ppl const Constraint t c)
Adds a copy of the constraint c to the system of constraints of ph.
• int ppl Polyhedron add congruence (ppl Polyhedron t ph, ppl const Congruence t c)
Adds a copy of the congruence c to polyhedron of ph.
• int ppl Polyhedron add constraints (ppl Polyhedron t ph, ppl const Constraint System t cs)
Adds a copy of the system of constraints cs to the system of constraints of ph.
• int ppl Polyhedron add congruences (ppl Polyhedron t ph, ppl const Congruence System t cs)
Adds a copy of the system of congruences cs to the polyhedron ph.
• int ppl Polyhedron add recycled constraints (ppl Polyhedron t ph, ppl Constraint System t cs)
Adds the system of constraints cs to the system of constraints of ph.
• int ppl Polyhedron add recycled congruences (ppl Polyhedron t ph, ppl Congruence System ←-
t cs)
Adds the system of congruences cs to the polyhedron ph.
• int ppl Polyhedron refine with constraint (ppl Polyhedron t ph, ppl const Constraint t c)
Refines ph using constraint c.
• int ppl Polyhedron refine with congruence (ppl Polyhedron t ph, ppl const Congruence t c)
Refines ph using congruence c.
• int ppl Polyhedron refine with constraints (ppl Polyhedron t ph, ppl const Constraint System←-
t cs)
Refines ph using the constraints in cs.
• int ppl Polyhedron refine with congruences (ppl Polyhedron t ph, ppl const Congruence System←-
t cs)
Refines ph using the congruences in cs.
• int ppl Polyhedron intersection assign (ppl Polyhedron t x, ppl const Polyhedron t y)
Intersects x with polyhedron y and assigns the result to x.
• int ppl Polyhedron upper bound assign (ppl Polyhedron t x, ppl const Polyhedron t y)
Assigns to x an upper bound of x and y.
• int ppl Polyhedron difference assign (ppl Polyhedron t x, ppl const Polyhedron t y)
Same as ppl Polyhedron poly difference assign(x, y).
• int ppl Polyhedron simplify using context assign (ppl Polyhedron t x, ppl const Polyhedron t y)
Assigns to x the meet-preserving simplification of x with respect to context y. Returns a positive integer
if x and y have a nonempty intersection; returns 0 if they are disjoint.
• int ppl Polyhedron time elapse assign (ppl Polyhedron t x, ppl const Polyhedron t y)
Assigns to x the time-elapse between the polyhedra x and y.
• int ppl Polyhedron topological closure assign (ppl Polyhedron t ph)
Assigns to ph its topological closure.
• int ppl Polyhedron unconstrain space dimension (ppl Polyhedron t ph, ppl dimension type var)
Modifies ph by unconstraining the space dimension var.
• int ppl Polyhedron unconstrain space dimensions (ppl Polyhedron t ph, ppl dimension type ds[ ],
size t n)
Modifies ph by unconstraining the space dimensions that are specified in the first n positions of the array
ds. The presence of duplicates in ds is a waste but an innocuous one.
• int ppl Polyhedron affine image (ppl Polyhedron t ph, ppl dimension type var, ppl const Linear←-
Expression t le, ppl const Coefficient t d)
66
Transforms the polyhedron ph, assigning an affine expression to the specified variable.
• int ppl Polyhedron affine preimage (ppl Polyhedron t ph, ppl dimension type var, ppl const ←-
Linear Expression t le, ppl const Coefficient t d)
Transforms the polyhedron ph, substituting an affine expression to the specified variable.
• int ppl Polyhedron bounded affine image (ppl Polyhedron t ph, ppl dimension type var, ppl ←-
const Linear Expression t lb, ppl const Linear Expression t ub, ppl const Coefficient t d)
Assigns to ph the image of ph with respect to the generalized affine transfer relation lb
d
≤ var0 ≤ ub
d
.
• int ppl Polyhedron bounded affine preimage (ppl Polyhedron t ph, ppl dimension type var, ppl←-
const Linear Expression t lb, ppl const Linear Expression t ub, ppl const Coefficient t d)
Assigns to ph the preimage of ph with respect to the generalized affine transfer relation lb
d
≤ var0 ≤ ub
d
.
• int ppl Polyhedron generalized affine image (ppl Polyhedron t ph, ppl dimension type var, enum
ppl enum Constraint Type relsym, ppl const Linear Expression t le, ppl const Coefficient t d)
Assigns to ph the image of ph with respect to the generalized affine transfer relation var0 ./ le
d
, where
./ is the relation symbol encoded by relsym.
• int ppl Polyhedron generalized affine preimage (ppl Polyhedron t ph, ppl dimension type var,
enum ppl enum Constraint Type relsym, ppl const Linear Expression t le, ppl const Coefficient←-
t d)
Assigns to ph the preimage of ph with respect to the generalized affine transfer relation var0 ./ le
d
,
where ./ is the relation symbol encoded by relsym.
• int ppl Polyhedron generalized affine image lhs rhs (ppl Polyhedron t ph, ppl const Linear ←-
Expression t lhs, enum ppl enum Constraint Type relsym, ppl const Linear Expression t rhs)
Assigns to ph the image of ph with respect to the generalized affine transfer relation lhs0 ./ rhs, where
./ is the relation symbol encoded by relsym.
• int ppl Polyhedron generalized affine preimage lhs rhs (ppl Polyhedron t ph, ppl const Linear←-
Expression t lhs, enum ppl enum Constraint Type relsym, ppl const Linear Expression t rhs)
Assigns to ph the preimage of ph with respect to the generalized affine transfer relation lhs0 ./ rhs,
where ./ is the relation symbol encoded by relsym.
• int ppl Polyhedron concatenate assign (ppl Polyhedron t x, ppl const Polyhedron t y)
Seeing a polyhedron as a set of tuples (its points), assigns to x all the tuples that can be obtained by
concatenating, in the order given, a tuple of x with a tuple of y.
• int ppl Polyhedron add space dimensions and embed (ppl Polyhedron t ph, ppl dimension type
d)
Adds d new dimensions to the space enclosing the polyhedron ph and to ph itself.
• int ppl Polyhedron add space dimensions and project (ppl Polyhedron t ph, ppl dimension type
d)
Adds d new dimensions to the space enclosing the polyhedron ph.
• int ppl Polyhedron remove space dimensions (ppl Polyhedron t ph, ppl dimension type ds[ ], size←-
t n)
Removes from the vector space enclosing ph the space dimensions that are specified in first n positions
of the array ds. The presence of duplicates in ds is a waste but an innocuous one.
• int ppl Polyhedron remove higher space dimensions (ppl Polyhedron t ph, ppl dimension type
d)
Removes the higher dimensions from the vector space enclosing ph so that, upon successful return, the
new space dimension is d.
• int ppl Polyhedron map space dimensions (ppl Polyhedron t ph, ppl dimension type maps[ ], size←-
t n)
Remaps the dimensions of the vector space according to a partial function. This function is specified by
means of the maps array, which has n entries.
• int ppl Polyhedron expand space dimension (ppl Polyhedron t ph, ppl dimension type d, ppl ←-
dimension type m)
Expands the d-th dimension of the vector space enclosing ph to m new space dimensions.
67
• int ppl Polyhedron fold space dimensions (ppl Polyhedron t ph, ppl dimension type ds[ ], size←-
t n, ppl dimension type d)
Modifies ph by folding the space dimensions contained in the first n positions of the array ds into
dimension d. The presence of duplicates in ds is a waste but an innocuous one.
Input/Output Functions
68
• int wrap assign (ppl Polyhedron t ph, ppl dimension type ds[ ], size t n, ppl enum Bounded ←-
Integer Type Width w, ppl enum Bounded Integer Type Representation r, ppl enum Bounded←-
Integer Type Overflow o, const ppl const Constraint System t ∗pcs, unsigned complexity threshold,
int wrap individually)
Assigns to ph the polyhedron obtained from ph by ”wrapping” the vector space defined by the first n
space dimensions in ds[].
• int ppl Polyhedron BHRZ03 widening assign with tokens (ppl Polyhedron t x, ppl const Polyhedron←-
t y, unsigned ∗tp)
If the polyhedron y is contained in (or equal to) the polyhedron x, assigns to x the BHRZ03-widening
of x and y. If tp is not the null pointer, the widening with tokens delay technique is applied with ∗tp
available tokens.
• int ppl Polyhedron H79 widening assign with tokens (ppl Polyhedron t x, ppl const Polyhedron←-
t y, unsigned ∗tp)
If the polyhedron y is contained in (or equal to) the polyhedron x, assigns to x the H79-widening of
x and y. If tp is not the null pointer, the widening with tokens delay technique is applied with ∗tp
available tokens.
• int ppl Polyhedron BHRZ03 widening assign (ppl Polyhedron t x, ppl const Polyhedron t y)
If the polyhedron y is contained in (or equal to) the polyhedron x, assigns to x the BHRZ03-widening of
x and y.
• int ppl Polyhedron H79 widening assign (ppl Polyhedron t x, ppl const Polyhedron t y)
If the polyhedron y is contained in (or equal to) the polyhedron x, assigns to x the H79-widening of x
and y.
• int ppl Polyhedron limited BHRZ03 extrapolation assign with tokens (ppl Polyhedron t x, ppl←-
const Polyhedron t y, ppl const Constraint System t cs, unsigned ∗tp)
If the polyhedron y is contained in (or equal to) the polyhedron x, assigns to x the BHRZ03-widening
of x and y intersected with the constraints in cs that are satisfied by all the points of x. If tp is not the
null pointer, the widening with tokens delay technique is applied with ∗tp available tokens.
• int ppl Polyhedron limited H79 extrapolation assign with tokens (ppl Polyhedron t x, ppl const←-
Polyhedron t y, ppl const Constraint System t cs, unsigned ∗tp)
If the polyhedron y is contained in (or equal to) the polyhedron x, assigns to x the H79-widening of x
and y intersected with the constraints in cs that are satisfied by all the points of x. If tp is not the null
pointer, the widening with tokens delay technique is applied with ∗tp available tokens.
• int ppl Polyhedron limited BHRZ03 extrapolation assign (ppl Polyhedron t x, ppl const Polyhedron←-
t y, ppl const Constraint System t cs)
If the polyhedron y is contained in (or equal to) the polyhedron x, assigns to x the BHRZ03-widening of
x and y intersected with the constraints in cs that are satisfied by all the points of x.
• int ppl Polyhedron limited H79 extrapolation assign (ppl Polyhedron t x, ppl const Polyhedron←-
t y, ppl const Constraint System t cs)
If the polyhedron y is contained in (or equal to) the polyhedron x, assigns to x the H79-widening of x
and y intersected with the constraints in cs that are satisfied by all the points of x.
• int ppl Polyhedron bounded BHRZ03 extrapolation assign with tokens (ppl Polyhedron t x, ppl←-
const Polyhedron t y, ppl const Constraint System t cs, unsigned ∗tp)
If the polyhedron y is contained in (or equal to) the polyhedron x, assigns to x the BHRZ03-widening of
x and y intersected with the constraints in cs that are satisfied by all the points of x, further intersected
with all the constraints of the form ±v ≤ r and ±v < r, with r ∈ Q, that are satisfied by all the points
of x. If tp is not the null pointer, the widening with tokens delay technique is applied with ∗tp available
tokens.
• int ppl Polyhedron bounded H79 extrapolation assign with tokens (ppl Polyhedron t x, ppl ←-
const Polyhedron t y, ppl const Constraint System t cs, unsigned ∗tp)
If the polyhedron y is contained in (or equal to) the polyhedron x, assigns to x the H79-widening of x
and y intersected with the constraints in cs that are satisfied by all the points of x, further intersected
with all the constraints of the form ±v ≤ r and ±v < r, with r ∈ Q, that are satisfied by all the points
of x. If tp is not the null pointer, the widening with tokens delay technique is applied with ∗tp available
tokens.
69
• int ppl Polyhedron bounded BHRZ03 extrapolation assign (ppl Polyhedron t x, ppl const Polyhedron←-
t y, ppl const Constraint System t cs)
If the polyhedron y is contained in (or equal to) the polyhedron x, assigns to x the BHRZ03-widening of
x and y intersected with the constraints in cs that are satisfied by all the points of x, further intersected
with all the constraints of the form ±v ≤ r and ±v < r, with r ∈ Q, that are satisfied by all the points
of x.
• int ppl Polyhedron bounded H79 extrapolation assign (ppl Polyhedron t x, ppl const Polyhedron←-
t y, ppl const Constraint System t cs)
If the polyhedron y is contained in (or equal to) the polyhedron x, assigns to x the H79-widening of x
and y intersected with the constraints in cs that are satisfied by all the points of x, further intersected
with all the constraints of the form ±v ≤ r and ±v < r, with r ∈ Q, that are satisfied by all the points
of x.
Note
The complexity argument is ignored.
int ppl new C Polyhedron from Constraint System ( ppl Polyhedron t ∗ pph, ppl const Constraint←-
System t cs ) [related] Builds a new C polyhedron from the system of constraints cs and writes
a handle for the newly created polyhedron at address pph.
The new polyhedron will inherit the space dimension of cs.
int ppl new C Polyhedron recycle Constraint System ( ppl Polyhedron t ∗ pph, ppl Constraint←-
System t cs ) [related] Builds a new C polyhedron recycling the system of constraints cs and
writes a handle for the newly created polyhedron at address pph.
The new polyhedron will inherit the space dimension of cs.
Warning
This function modifies the constraint system referenced by cs: upon return, no assumption can be
made on its value.
int ppl new C Polyhedron from Congruence System ( ppl Polyhedron t ∗ pph, ppl const Congruence←-
System t cs ) [related] Builds a new C polyhedron from the system of congruences cs and writes
a handle for the newly created polyhedron at address pph.
The new polyhedron will inherit the space dimension of cs.
70
int ppl new C Polyhedron recycle Congruence System ( ppl Polyhedron t ∗ pph, ppl Congruence←-
System t cs ) [related] Builds a new C polyhedron recycling the system of congruences cs and
writes a handle for the newly created polyhedron at address pph.
The new polyhedron will inherit the space dimension of cs.
Warning
This function modifies the congruence system referenced by cs: upon return, no assumption can be
made on its value.
int ppl new NNC Polyhedron from NNC Polyhedron with complexity ( ppl Polyhedron t ∗ pph,
ppl const Polyhedron t ph, int complexity ) [related] Builds an NNC polyhedron that is a copy
of ph; writes a handle for the newly created polyhedron at address pph.
Note
The complexity argument is ignored.
int ppl new NNC Polyhedron from Constraint System ( ppl Polyhedron t ∗ pph, ppl const Constraint←-
System t cs ) [related] Builds a new NNC polyhedron from the system of constraints cs and
writes a handle for the newly created polyhedron at address pph.
The new polyhedron will inherit the space dimension of cs.
int ppl new NNC Polyhedron recycle Constraint System ( ppl Polyhedron t ∗ pph, ppl Constraint←-
System t cs ) [related] Builds a new NNC polyhedron recycling the system of constraints cs and
writes a handle for the newly created polyhedron at address pph.
The new polyhedron will inherit the space dimension of cs.
Warning
This function modifies the constraint system referenced by cs: upon return, no assumption can be
made on its value.
int ppl new NNC Polyhedron from Congruence System ( ppl Polyhedron t ∗ pph, ppl const ←-
Congruence System t cs ) [related] Builds a new NNC polyhedron from the system of congru-
ences cs and writes a handle for the newly created polyhedron at address pph.
The new polyhedron will inherit the space dimension of cs.
int ppl new NNC Polyhedron recycle Congruence System ( ppl Polyhedron t ∗ pph, ppl Congruence←-
System t cs ) [related] Builds a new NNC polyhedron recycling the system of congruences cs
and writes a handle for the newly created polyhedron at address pph.
The new polyhedron will inherit the space dimension of cs.
Warning
This function modifies the congruence system referenced by cs: upon return, no assumption can be
made on its value.
71
int ppl new C Polyhedron from NNC Polyhedron with complexity ( ppl Polyhedron t ∗ pph, ppl←-
const Polyhedron t ph, int complexity ) [related] Builds a C polyhedron that approximates N←-
NC Polyhedron ph, using an algorithm whose complexity does not exceed complexity; writes a handle
for the newly created polyhedron at address pph.
Note
The complexity argument, which can take values PPL COMPLEXITY CLASS POLYNOMIAL, P←-
PL COMPLEXITY CLASS SIMPLEX and PPL COMPLEXITY CLASS ANY, is ignored since the
exact constructor has polynomial complexity.
int ppl new NNC Polyhedron from C Polyhedron with complexity ( ppl Polyhedron t ∗ pph, ppl←-
const Polyhedron t ph, int complexity ) [related] Builds an NNC polyhedron that approximates
C Polyhedron ph, using an algorithm whose complexity does not exceed complexity; writes a handle
for the newly created polyhedron at address pph.
Note
The complexity argument, which can take values PPL COMPLEXITY CLASS POLYNOMIAL, P←-
PL COMPLEXITY CLASS SIMPLEX and PPL COMPLEXITY CLASS ANY, is ignored since the
exact constructor has polynomial complexity.
int ppl Polyhedron relation with Constraint ( ppl const Polyhedron t ph, ppl const Constraint t c
) [related] Checks the relation between the polyhedron ph and the constraint c.
If successful, returns a non-negative integer that is obtained as the bitwise or of the bits (chosen among
PPL POLY CON RELATION IS DISJOINT PPL POLY CON RELATION STRICTLY INTERSEC←-
TS, PPL POLY CON RELATION IS INCLUDED, and PPL POLY CON RELATION SATURATES)
that describe the relation between ph and c.
int ppl Polyhedron relation with Generator ( ppl const Polyhedron t ph, ppl const Generator t g
) [related] Checks the relation between the polyhedron ph and the generator g.
If successful, returns a non-negative integer that is obtained as the bitwise or of the bits (only PPL P←-
OLY GEN RELATION SUBSUMES, at present) that describe the relation between ph and g.
int ppl Polyhedron maximize with point ( ppl const Polyhedron t ph, ppl const Linear Expression←-
t le, ppl Coefficient t sup n, ppl Coefficient t sup d, int ∗ pmaximum, ppl Generator t point )
[related] Returns a positive integer if ph is not empty and le is bounded from above in ph, in
which case the supremum value and a point where le reaches it are computed.
Parameters
ph The polyhedron constraining le;
le The linear expression to be maximized subject to ph;
sup n Will be assigned the numerator of the supremum value;
sup d Will be assigned the denominator of the supremum value;
pmaximum Will store 1 in this location if the supremum is also the maximum, will store 0 other-
wise;
point Will be assigned the point or closure point where le reaches the extremum value.
If ph is empty or le is not bounded from above, 0 will be returned and sup n, sup d, ∗pmaximum and
point will be left untouched.
int ppl Polyhedron minimize with point ( ppl const Polyhedron t ph, ppl const Linear Expression←-
t le, ppl Coefficient t inf n, ppl Coefficient t inf d, int ∗ pminimum, ppl Generator t point )
[related] Returns a positive integer if ph is not empty and le is bounded from below in ph, in
which case the infimum value and a point where le reaches it are computed.
72
Parameters
ph The polyhedron constraining le;
le The linear expression to be minimized subject to ph;
inf n Will be assigned the numerator of the infimum value;
inf d Will be assigned the denominator of the infimum value;
pminimum Will store 1 in this location if the infimum is also the minimum, will store 0 otherwise;
point Will be assigned the point or closure point where le reaches the extremum value.
If ph is empty or le is not bounded from below, 0 will be returned and sup n, sup d, ∗pmaximum and
point will be left untouched.
int ppl Polyhedron equals Polyhedron ( ppl const Polyhedron t x, ppl const Polyhedron t y ) [related]
Returns a positive integer if x and y are the same polyhedron; returns 0 if they are different.
Note that x and y may be topology- and/or dimension-incompatible polyhedra: in those cases, the
value 0 is returned.
int ppl Polyhedron add recycled constraints ( ppl Polyhedron t ph, ppl Constraint System t cs )
[related] Adds the system of constraints cs to the system of constraints of ph.
Warning
This function modifies the constraint system referenced by cs: upon return, no assumption can be
made on its value.
int ppl Polyhedron add recycled congruences ( ppl Polyhedron t ph, ppl Congruence System t cs
) [related] Adds the system of congruences cs to the polyhedron ph.
Warning
This function modifies the congruence system referenced by cs: upon return, no assumption can be
made on its value.
int ppl Polyhedron upper bound assign ( ppl Polyhedron t x, ppl const Polyhedron t y ) [related]
Assigns to x an upper bound of x and y.
For the domain of polyhedra, this is the same as ppl Polyhedron poly hull assign(x, y).
int ppl Polyhedron affine image ( ppl Polyhedron t ph, ppl dimension type var, ppl const Linear←-
Expression t le, ppl const Coefficient t d ) [related] Transforms the polyhedron ph, assigning
an affine expression to the specified variable.
Parameters
ph The polyhedron that is transformed;
var The variable to which the affine expression is assigned;
le The numerator of the affine expression;
d The denominator of the affine expression.
int ppl Polyhedron affine preimage ( ppl Polyhedron t ph, ppl dimension type var, ppl const ←-
Linear Expression t le, ppl const Coefficient t d ) [related] Transforms the polyhedron ph,
substituting an affine expression to the specified variable.
73
Parameters
ph The polyhedron that is transformed;
var The variable to which the affine expression is substituted;
le The numerator of the affine expression;
d The denominator of the affine expression.
int ppl Polyhedron bounded affine image ( ppl Polyhedron t ph, ppl dimension type var, ppl ←-
const Linear Expression t lb, ppl const Linear Expression t ub, ppl const Coefficient t d ) [related]
0
Assigns to ph the image of ph with respect to the generalized affine transfer relation lb ub
d ≤ var ≤ d .
Parameters
ph The polyhedron that is transformed;
var The variable bounded by the generalized affine transfer relation;
lb The numerator of the lower bounding affine expression;
ub The numerator of the upper bounding affine expression;
d The (common) denominator of the lower and upper bounding affine expressions.
int ppl Polyhedron bounded affine preimage ( ppl Polyhedron t ph, ppl dimension type var, ppl ←-
const Linear Expression t lb, ppl const Linear Expression t ub, ppl const Coefficient t d ) [related]
0
Assigns to ph the preimage of ph with respect to the generalized affine transfer relation lb ub
d ≤ var ≤ d .
Parameters
ph The polyhedron that is transformed;
var The variable bounded by the generalized affine transfer relation;
lb The numerator of the lower bounding affine expression;
ub The numerator of the upper bounding affine expression;
d The (common) denominator of the lower and upper bounding affine expressions.
int ppl Polyhedron generalized affine image ( ppl Polyhedron t ph, ppl dimension type var, enum
ppl enum Constraint Type relsym, ppl const Linear Expression t le, ppl const Coefficient t d )
[related] Assigns to ph the image of ph with respect to the generalized affine transfer relation
var0 ./ le
d , where ./ is the relation symbol encoded by relsym.
Parameters
ph The polyhedron that is transformed;
var The left hand side variable of the generalized affine transfer relation;
relsym The relation symbol;
le The numerator of the right hand side affine expression;
d The denominator of the right hand side affine expression.
int ppl Polyhedron generalized affine preimage ( ppl Polyhedron t ph, ppl dimension type var,
enum ppl enum Constraint Type relsym, ppl const Linear Expression t le, ppl const Coefficient←-
t d ) [related] Assigns to ph the preimage of ph with respect to the generalized affine transfer
relation var0 ./ le
d , where ./ is the relation symbol encoded by relsym.
Parameters
74
ph The polyhedron that is transformed;
var The left hand side variable of the generalized affine transfer relation;
relsym The relation symbol;
le The numerator of the right hand side affine expression;
d The denominator of the right hand side affine expression.
int ppl Polyhedron generalized affine image lhs rhs ( ppl Polyhedron t ph, ppl const Linear ←-
Expression t lhs, enum ppl enum Constraint Type relsym, ppl const Linear Expression t rhs )
[related] Assigns to ph the image of ph with respect to the generalized affine transfer relation
lhs0 ./ rhs, where ./ is the relation symbol encoded by relsym.
Parameters
ph The polyhedron that is transformed;
lhs The left hand side affine expression;
relsym The relation symbol;
rhs The right hand side affine expression.
int ppl Polyhedron generalized affine preimage lhs rhs ( ppl Polyhedron t ph, ppl const Linear←-
Expression t lhs, enum ppl enum Constraint Type relsym, ppl const Linear Expression t rhs )
[related] Assigns to ph the preimage of ph with respect to the generalized affine transfer relation
lhs0 ./ rhs, where ./ is the relation symbol encoded by relsym.
Parameters
ph The polyhedron that is transformed;
lhs The left hand side affine expression;
relsym The relation symbol;
rhs The right hand side affine expression.
int ppl Polyhedron map space dimensions ( ppl Polyhedron t ph, ppl dimension type maps[ ], size←-
t n ) [related] Remaps the dimensions of the vector space according to a partial function. This
function is specified by means of the maps array, which has n entries.
The partial function is defined on dimension i if i < n and maps[i] != ppl not a dimension;
otherwise it is undefined on dimension i. If the function is defined on dimension i, then dimension i is
mapped onto dimension maps[i].
The result is undefined if maps does not encode a partial function with the properties described in the
specification of the mapping operator.
int ppl new C Polyhedron from Generator System ( ppl Polyhedron t ∗ pph, ppl const Generator←-
System t gs ) [related] Builds a new C polyhedron from the system of generators gs and writes
a handle for the newly created polyhedron at address pph.
The new polyhedron will inherit the space dimension of gs.
int ppl new C Polyhedron recycle Generator System ( ppl Polyhedron t ∗ pph, ppl Generator←-
System t gs ) [related] Builds a new C polyhedron recycling the system of generators gs and
writes a handle for the newly created polyhedron at address pph.
The new polyhedron will inherit the space dimension of gs.
Warning
This function modifies the generator system referenced by gs: upon return, no assumption can be
made on its value.
75
int ppl new NNC Polyhedron from Generator System ( ppl Polyhedron t ∗ pph, ppl const Generator←-
System t gs ) [related] Builds a new NNC polyhedron from the system of generators gs and
writes a handle for the newly created polyhedron at address pph.
The new polyhedron will inherit the space dimension of gs.
int ppl new NNC Polyhedron recycle Generator System ( ppl Polyhedron t ∗ pph, ppl Generator←-
System t gs ) [related] Builds a new NNC polyhedron recycling the system of generators gs and
writes a handle for the newly created polyhedron at address pph.
The new polyhedron will inherit the space dimension of gs.
Warning
This function modifies the generator system referenced by gs: upon return, no assumption can be
made on its value.
int ppl Polyhedron add recycled generators ( ppl Polyhedron t ph, ppl Generator System t gs )
[related] Adds the system of generators gs to the system of generators of ph.
Warning
This function modifies the generator system referenced by gs: upon return, no assumption can be
made on its value.
int wrap assign ( ppl Polyhedron t ph, ppl dimension type ds[ ], size t n, ppl enum Bounded ←-
Integer Type Width w, ppl enum Bounded Integer Type Representation r, ppl enum Bounded ←-
Integer Type Overflow o, const ppl const Constraint System t ∗ pcs, unsigned complexity threshold,
int wrap individually ) [related] Assigns to ph the polyhedron obtained from ph by ”wrapping”
the vector space defined by the first n space dimensions in ds[].
Parameters
ph The polyhedron that is transformed;
ds[ ] Specifies the space dimensions to be wrapped.
n The first n space dimensions in the array ds[] will be wrapped.
w The width of the bounded integer type corresponding to all the dimensions to be
wrapped.
r The representation of the bounded integer type corresponding to all the dimensions to
be wrapped.
o The overflow behavior of the bounded integer type corresponding to all the dimensions
to be wrapped.
pcs Possibly null pointer to a constraint system whose space dimensions are the first n
dimensions in ds[]. If ∗pcs depends on variables not in vars, the behavior is unde-
fined. When non-null, the constraint system is assumed to represent the conditional or
looping construct guard with respect to which wrapping is performed. Since wrapping
requires the computation of upper bounds and due to non-distributivity of constraint
refinement over upper bounds, passing a constraint system in this way can be more
precise than refining the result of the wrapping operation with the constraints in cs.
76
complexity ←- A precision parameter where higher values result in possibly improved precision.
threshold
wrap ←- Non-zero if the dimensions should be wrapped individually (something that results in
individually much greater efficiency to the detriment of precision).
The documentation for this interface was generated from the following file:
• C interface.dox
77
Index
C Language Interface, 17 ppl enum Generator Type, 28
ppl enum Grid Generator Type, 28
Error Handling, 20 ppl io variable output function type, 28
PPL ARITHMETIC OVERFLOW, 20 ppl io wrap string, 29
PPL ERROR DOMAIN ERROR, 20 Library Initialization and Finalization, 18
PPL ERROR INTERNAL ERROR, 20 ppl finalize, 18
PPL ERROR INVALID ARGUMENT, 20 ppl initialize, 18
PPL ERROR LENGTH ERROR, 20 ppl restore pre PPL rounding, 18
PPL ERROR LOGIC ERROR, 20 ppl set irrational precision, 18
PPL ERROR OUT OF MEMORY, 20 ppl set rounding for PPL, 18
PPL ERROR UNEXPECTED ERROR, 20
PPL ERROR UNKNOWN STANDARD EX←- PPL ARITHMETIC OVERFLOW
CEPTION, 20 Error Handling, 20
PPL STDIO ERROR, 20 PPL BITS 128
PPL TIMEOUT EXCEPTION, 20 Library Datatypes, 29
ppl enum error code, 20 PPL BITS 16
ppl set error handler, 21 Library Datatypes, 29
PPL BITS 32
Library Datatypes, 24 Library Datatypes, 29
PPL BITS 128, 29 PPL BITS 64
PPL BITS 16, 29 Library Datatypes, 29
PPL BITS 32, 29 PPL BITS 8
PPL BITS 64, 29 Library Datatypes, 29
PPL BITS 8, 29 PPL CONSTRAINT TYPE EQUAL
PPL CONSTRAINT TYPE EQUAL, 28 Library Datatypes, 28
PPL CONSTRAINT TYPE GREATER OR←- PPL CONSTRAINT TYPE GREATER OR EQU←-
EQUAL, 28 AL
PPL CONSTRAINT TYPE GREATER TH←- Library Datatypes, 28
AN, 28 PPL CONSTRAINT TYPE GREATER THAN
PPL CONSTRAINT TYPE LESS OR EQU←- Library Datatypes, 28
AL, 28 PPL CONSTRAINT TYPE LESS OR EQUAL
PPL CONSTRAINT TYPE LESS THAN, 28 Library Datatypes, 28
PPL GENERATOR TYPE CLOSURE POI←- PPL CONSTRAINT TYPE LESS THAN
NT, 28 Library Datatypes, 28
PPL GENERATOR TYPE LINE, 28 PPL ERROR DOMAIN ERROR
PPL GENERATOR TYPE POINT, 28 Error Handling, 20
PPL GENERATOR TYPE RAY, 28 PPL ERROR INTERNAL ERROR
PPL GRID GENERATOR TYPE LINE, 28 Error Handling, 20
PPL GRID GENERATOR TYPE PARAME←- PPL ERROR INVALID ARGUMENT
TER, 28 Error Handling, 20
PPL GRID GENERATOR TYPE POINT, 28 PPL ERROR LENGTH ERROR
PPL OVERFLOW IMPOSSIBLE, 29 Error Handling, 20
PPL OVERFLOW UNDEFINED, 29 PPL ERROR LOGIC ERROR
PPL OVERFLOW WRAPS, 29 Error Handling, 20
PPL SIGNED 2 COMPLEMENT, 29 PPL ERROR OUT OF MEMORY
PPL UNSIGNED, 29 Error Handling, 20
ppl enum Bounded Integer Type Overflow, 29 PPL ERROR UNEXPECTED ERROR
ppl enum Bounded Integer Type Representation, Error Handling, 20
29 PPL ERROR UNKNOWN STANDARD EXCEP←-
ppl enum Bounded Integer Type Width, 28 TION
ppl enum Constraint Type, 28 Error Handling, 20
79
PPL GENERATOR TYPE CLOSURE POINT ppl MIP Problem evaluate objective function,
Library Datatypes, 28 51
PPL GENERATOR TYPE LINE ppl MIP Problem optimal value, 53
Library Datatypes, 28 ppl MIP Problem solve, 51
PPL GENERATOR TYPE POINT ppl PIP Decision Node tag, 53
Library Datatypes, 28 ppl PIP Problem add space dimensions and embed
PPL GENERATOR TYPE RAY ppl PIP Problem tag, 56
Library Datatypes, 28 ppl PIP Problem solve
PPL GRID GENERATOR TYPE LINE ppl PIP Problem tag, 56
Library Datatypes, 28 ppl PIP Problem space dimension
PPL GRID GENERATOR TYPE PARAMETER ppl PIP Problem tag, 56
Library Datatypes, 28 ppl PIP Problem tag, 54
PPL GRID GENERATOR TYPE POINT ppl PIP Problem add space dimensions and←-
Library Datatypes, 28 embed, 56
PPL OVERFLOW IMPOSSIBLE ppl PIP Problem solve, 56
Library Datatypes, 29 ppl PIP Problem space dimension, 56
PPL OVERFLOW UNDEFINED ppl PIP Solution Node get parametric values
Library Datatypes, 29 ppl PIP Solution Node tag, 57
PPL OVERFLOW WRAPS ppl PIP Solution Node tag, 57
Library Datatypes, 29 ppl PIP Solution Node get parametric values, 57
PPL SIGNED 2 COMPLEMENT ppl PIP Tree Node tag, 58
Library Datatypes, 29 ppl Pointset Powerset C Polyhedron const iterator←-
PPL STDIO ERROR dereference
Error Handling, 20 ppl Pointset Powerset C Polyhedron const iterator←-
PPL TIMEOUT EXCEPTION tag, 60
Error Handling, 20 ppl Pointset Powerset C Polyhedron const iterator←-
PPL UNSIGNED tag, 59
Library Datatypes, 29 ppl Pointset Powerset C Polyhedron const iterator←-
PPL VERSION dereference, 60
Version Checking, 19 ppl Pointset Powerset C Polyhedron iterator dereference
ppl Artificial Parameter Sequence const iterator ←- ppl Pointset Powerset C Polyhedron iterator←-
tag, 31 tag, 61
ppl Artificial Parameter tag, 31 ppl Pointset Powerset C Polyhedron iterator tag, 60
ppl Coefficient tag, 32 ppl Pointset Powerset C Polyhedron iterator←-
ppl Congruence System const iterator tag, 33 dereference, 61
ppl Congruence System tag, 34 ppl Pointset Powerset C Polyhedron size
ppl Congruence tag, 36 ppl Pointset Powerset C Polyhedron tag, 62
ppl Constraint System const iterator tag, 37 ppl Pointset Powerset C Polyhedron tag, 61
ppl Constraint System tag, 37 ppl Pointset Powerset C Polyhedron size, 62
ppl Constraint tag, 39 ppl Polyhedron add recycled congruences
ppl Generator System const iterator tag, 40 ppl Polyhedron tag, 73
ppl Generator System tag, 41 ppl Polyhedron add recycled constraints
ppl Generator tag, 42 ppl Polyhedron tag, 73
ppl Grid Generator System const iterator tag, 43 ppl Polyhedron add recycled generators
ppl Grid Generator System tag, 44 ppl Polyhedron tag, 76
ppl Grid Generator tag, 46 ppl Polyhedron affine image
ppl Linear Expression tag, 47 ppl Polyhedron tag, 73
ppl MIP Problem evaluate objective function ppl Polyhedron affine preimage
ppl MIP Problem tag, 51 ppl Polyhedron tag, 73
ppl MIP Problem optimal value ppl Polyhedron bounded affine image
ppl MIP Problem tag, 53 ppl Polyhedron tag, 74
ppl MIP Problem solve ppl Polyhedron bounded affine preimage
ppl MIP Problem tag, 51 ppl Polyhedron tag, 74
ppl MIP Problem tag, 49 ppl Polyhedron equals Polyhedron
80
ppl Polyhedron tag, 73 ppl new C Polyhedron recycle Generator System,
ppl Polyhedron generalized affine image 75
ppl Polyhedron tag, 74 ppl new NNC Polyhedron from C Polyhedron←-
ppl Polyhedron generalized affine image lhs rhs with complexity, 72
ppl Polyhedron tag, 75 ppl new NNC Polyhedron from Congruence←-
ppl Polyhedron generalized affine preimage System, 71
ppl Polyhedron tag, 74 ppl new NNC Polyhedron from Constraint ←-
ppl Polyhedron generalized affine preimage lhs rhs System, 71
ppl Polyhedron tag, 75 ppl new NNC Polyhedron from Generator System,
ppl Polyhedron map space dimensions 75
ppl Polyhedron tag, 75 ppl new NNC Polyhedron from NNC Polyhedron←-
ppl Polyhedron maximize with point with complexity, 71
ppl Polyhedron tag, 72 ppl new NNC Polyhedron recycle Congruence←-
ppl Polyhedron minimize with point System, 71
ppl Polyhedron tag, 72 ppl new NNC Polyhedron recycle Constraint←-
ppl Polyhedron relation with Constraint System, 71
ppl Polyhedron tag, 72 ppl new NNC Polyhedron recycle Generator←-
ppl Polyhedron relation with Generator System, 76
ppl Polyhedron tag, 72 wrap assign, 76
ppl Polyhedron tag, 62 ppl Polyhedron upper bound assign
ppl Polyhedron add recycled congruences, 73 ppl Polyhedron tag, 73
ppl Polyhedron add recycled constraints, 73 ppl banner
ppl Polyhedron add recycled generators, 76 Version Checking, 19
ppl Polyhedron affine image, 73 ppl enum Bounded Integer Type Overflow
ppl Polyhedron affine preimage, 73 Library Datatypes, 29
ppl Polyhedron bounded affine image, 74 ppl enum Bounded Integer Type Representation
ppl Polyhedron bounded affine preimage, 74 Library Datatypes, 29
ppl Polyhedron equals Polyhedron, 73 ppl enum Bounded Integer Type Width
ppl Polyhedron generalized affine image, 74 Library Datatypes, 28
ppl Polyhedron generalized affine image lhs←- ppl enum Constraint Type
rhs, 75 Library Datatypes, 28
ppl Polyhedron generalized affine preimage, 74 ppl enum Generator Type
ppl Polyhedron generalized affine preimage←- Library Datatypes, 28
lhs rhs, 75 ppl enum Grid Generator Type
ppl Polyhedron map space dimensions, 75 Library Datatypes, 28
ppl Polyhedron maximize with point, 72 ppl enum error code
ppl Polyhedron minimize with point, 72 Error Handling, 20
ppl Polyhedron relation with Constraint, 72 ppl finalize
ppl Polyhedron relation with Generator, 72 Library Initialization and Finalization, 18
ppl Polyhedron upper bound assign, 73 ppl initialize
ppl new C Polyhedron from C Polyhedron ←- Library Initialization and Finalization, 18
with complexity, 70 ppl io variable output function type
ppl new C Polyhedron from Congruence System, Library Datatypes, 28
70 ppl io wrap string
ppl new C Polyhedron from Constraint System, Library Datatypes, 29
70 ppl new C Polyhedron from C Polyhedron with ←-
ppl new C Polyhedron from Generator System, complexity
75 ppl Polyhedron tag, 70
ppl new C Polyhedron from NNC Polyhedron←-ppl new C Polyhedron from Congruence System
with complexity, 71 ppl Polyhedron tag, 70
ppl new C Polyhedron recycle Congruence ←- ppl new C Polyhedron from Constraint System
System, 70 ppl Polyhedron tag, 70
ppl new C Polyhedron recycle Constraint System,ppl new C Polyhedron from Generator System
70 ppl Polyhedron tag, 75
81
ppl new C Polyhedron from NNC Polyhedron with←-
complexity
ppl Polyhedron tag, 71
ppl new C Polyhedron recycle Congruence System
ppl Polyhedron tag, 70
ppl new C Polyhedron recycle Constraint System
ppl Polyhedron tag, 70
ppl new C Polyhedron recycle Generator System
ppl Polyhedron tag, 75
ppl new NNC Polyhedron from C Polyhedron with←-
complexity
ppl Polyhedron tag, 72
ppl new NNC Polyhedron from Congruence System
ppl Polyhedron tag, 71
ppl new NNC Polyhedron from Constraint System
ppl Polyhedron tag, 71
ppl new NNC Polyhedron from Generator System
ppl Polyhedron tag, 75
ppl new NNC Polyhedron from NNC Polyhedron←-
with complexity
ppl Polyhedron tag, 71
ppl new NNC Polyhedron recycle Congruence System
ppl Polyhedron tag, 71
ppl new NNC Polyhedron recycle Constraint System
ppl Polyhedron tag, 71
ppl new NNC Polyhedron recycle Generator System
ppl Polyhedron tag, 76
ppl restore pre PPL rounding
Library Initialization and Finalization, 18
ppl set deterministic timeout
Timeout Handling, 22
ppl set error handler
Error Handling, 21
ppl set irrational precision
Library Initialization and Finalization, 18
ppl set rounding for PPL
Library Initialization and Finalization, 18
ppl set timeout
Timeout Handling, 22
Timeout Handling, 22
ppl set deterministic timeout, 22
ppl set timeout, 22
Version Checking, 19
PPL VERSION, 19
ppl banner, 19
wrap assign
ppl Polyhedron tag, 76
82