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

FreeBSD Manual Pages

  
 
  

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 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 suit-
       able -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  com-
       mand  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 in-
       formation 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 In-
       terface 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_ER-
       ROR_OUT_OF_MEMORY error code.  You can then take	the  appropriate  cor-
       rective	measures (e.g.,	simplify the polyhedra and/or select less pre-
       cise though less	complex	algorithms), and restart the computation.   In
       order to	do that, you should define alternative memory allocation func-
       tions  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	round-
       ing mode	in a way that allows its floating-point-based computations  to
       be  conservative	 (i.e.,	possibly approximated but correct) and reason-
       ably 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  for-
       mats) at	http://www.dwheeler.com/program-library/ .

AVAILABILITY
       The  latest version of the Parma	Polyhedra Library and all the documen-
       tation 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	condi-
       tions.	There  is NO warranty; not even	for MERCHANTABILITY or FITNESS
       FOR A PARTICULAR	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+14.3.quarterly>

home | help