Man Linux: Main Page and Category List

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.10.2)  and  The  Parma  Polyhedra Library C
       Language Interface User's Manual (version  0.10.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 0.10.2) and The
       Parma Polyhedra Library C Language  Interface  User's  Manual  (version
       0.10.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.10.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.10.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.10.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-2009 Roberto Bagnara <bagnara@cs.unipr.it>
       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.