Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
libppl_c(3)			libppl_c overview		     libppl_c(3)

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 in-
     terfaces 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 config-
     ure 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  func-
     tion

     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 exam-
     ples  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 li-
     braries,  something  that the linker ought to deal with gracefully.  Other-
     wise 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  Inter-
     face 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 pos-
     sibility 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  er-
     ror  code.   You  can  then take the appropriate corrective measures (e.g.,
     simplify the polyhedra and/or select less precise though less complex algo-
     rithms), and restart the computation.  In order to do that, you should  de-
     fine   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  con-
     servative	(i.e.,	possibly  approximated but correct) and reasonably effi-
     cient.  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 func-
     tion

     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  Polyhe-
     dra  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  Polyhe-
     dra 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-con-
     fig --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 PARTIC-
     ULAR PURPOSE.

PPL 1.2 			  February 2016 		     libppl_c(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=libppl_c&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help