NAME¶
libppl_c - the C interface of the Parma Polyhedra Library
SYNOPSIS¶
#include <ppl_c.h>
cc file.c
-lppl
DESCRIPTION¶
This is a short overview on how to use the Parma Polyhedra Library (PPL) in your
C programs on Unix-like operating systems. Note that the PPL has interfaces
also for C++, Java, OCaml and a number of Prolog systems: look elsewhere for
documentation on those. Note also that the present document does not describe
the library functionality, its classes or its methods and functions: see
The Parma Polyhedra Library User's Manual (version 0.11.2) and
The
Parma Polyhedra Library C Language Interface User's Manual (version
0.11.2) for this kind of information.
The C interface of the PPL has only one header file, named
ppl_c.h. So
your program should contain a directive of the form
#include <ppl_c.h>
Of course, you must make sure you installed the PPL in a place where the
compiler can find it, either by itself or with the help of a suitable
-Idir command line option (see the file
INSTALL for information
on how to configure the library so that it is installed in the place of your
choice).
INITIALIZING AND FINALIZING THE LIBRARY¶
In order to initialize the Parma Polyhedra Library you must call the function
int ppl_initialize(void)
before using any of its functionalities. It is also a good norm to call the
function
int ppl_finalize(void)
when you are done with the library.
USING THE LIBRARY¶
Keeping in mind that there is no substitute for a careful reading of
The
Parma Polyhedra Library User's Manual (version 0.11.2) and
The Parma
Polyhedra Library C Language Interface User's Manual (version 0.11.2) you
can find examples of use in the directories
interfaces/C/tests and
demos/ppl_lpsol of the source distribution.
LINKING WITH THE LIBRARY¶
Linking with the C interface of the Parma Polyhedra Library is best done using
the C compiler itself: usually, specifying the
-lppl_c command line
option is enough. In fact, if you use a shared version of the library, this
automatically records the dependency from the PPL core and the GMP libraries,
something that the linker ought to deal with gracefully. Otherwise you will
have to add
-lppl -lgmpxx -lgmp to the command line. Things are more
complex if you installed the PPL into some nonstandard place. In this case you
will have to use the
-Ldir option and, if you use a shared version of
the library, possible take further steps: see the documentation of your system
for more information on this subject (the
Program Library HOWTO is
especially valuable for GNU/Linux users).
RETURN VALUES¶
All the PPL C interface functions return an int: a negative value means that an
error occurred. See
The Parma Polyhedra Library C Language Interface User's
Manual (version 0.11.2) for the error codes.
IMPLEMENTING MEMORY-GUARDED COMPUTATIONS¶
One of the interesting features of the Parma Polyhedra Library is the
possibility to implement memory-guarded computations. The idea is that you can
limit the amount of virtual memory available to the process, launch a PPL
computation, and be ready to be returned a
PPL_ERROR_OUT_OF_MEMORY
error code. You can then take the appropriate corrective measures (e.g.,
simplify the polyhedra and/or select less precise though less complex
algorithms), and restart the computation. In order to do that, you should
define alternative memory allocation functions for GMP that throw
std::bad_alloc upon memory exhaustion. See
libppl(3) for instructions on how to do that.
USING NATIVE FLOATING POINT NUMBERS¶
At initialization time, the Parma Polyhedra Library sets the FPU rounding mode
in a way that allows its floating-point-based computations to be conservative
(i.e., possibly approximated but correct) and reasonably efficient. In case
your application itself uses native floating point numbers and relies on a
particular rounding mode (if you are in doubt, assume that it does rely on
round-to-nearest to be in effect), you should use the function
int ppl_restore_pre_PPL_rounding()
after the PPL initialization and before using native floating point numbers in
the application. If your application does not use any floating-point-based PPL
abstraction, no further measure should be taken. Otherwise, it is imperative
to call the function
int ppl_set_rounding_for_PPL()
before invoking any PPL interface related to such abstractions.
SEE ALSO¶
ppl-config(1)
libppl(3)
Roberto Bagnara, Patricia M. Hill, and Enea Zaffanella.
The Parma Polyhedra
Library User's Manual (version 0.11.2), available (in several formats) at
http://www.cs.unipr.it/ppl/ .
Roberto Bagnara, Patricia M. Hill, and Enea Zaffanella.
The Parma Polyhedra
Library C Language Interface User's Manual (version 0.11.2), available (in
several formats) at
http://www.cs.unipr.it/ppl/ .
David A. Wheeler.
Program Library HOWTO, available (in several formats)
at
http://www.dwheeler.com/program-library/ .
AVAILABILITY¶
The latest version of the Parma Polyhedra Library and all the documentation is
available at
http://www.cs.unipr.it/ppl/ .
AUTHOR¶
See the file
CREDITS in the source distribution or use the command
ppl-config --credits for a list of contributors.
REPORTING BUGS¶
Report bugs to <ppl-devel@cs.unipr.it>.
COPYRIGHT¶
Copyright (C) 2001-2010 Roberto Bagnara <bagnara@cs.unipr.it> Copyright
(C) 2010-2011 BUGSENG srl (
http://bugseng.com)
This is free software; see the file
COPYING in the source distribution or
use the command
ppl-config --copying to obtain the copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE.