Provided by: libppl-dev_1.2-8.1build1_amd64 

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 1.2) and The Parma Polyhedra Library C Language Interface User's Manual
(version 1.2) for this kind of information.
INCLUDING THE HEADER FILE
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 1.2) and The Parma Polyhedra Library C Language Interface User's Manual (version 1.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 1.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 1.2), available (in several formats) at http://bugseng.com/products/ppl/ .
Roberto Bagnara, Patricia M. Hill, and Enea Zaffanella. The Parma Polyhedra Library C Language Interface
User's Manual (version 1.2), available (in several formats) at http://bugseng.com/products/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://bugseng.com/products/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 AND NO WARRANTY
Copyright (C) 2001-2010 Roberto Bagnara <bagnara@cs.unipr.it> Copyright (C) 2010-2016 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.
PPL 1.2 February 2016 libppl_c(3)