File: libppl_c.3

package info (click to toggle)
ppl 1%3A1.2-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 43,952 kB
  • ctags: 19,973
  • sloc: cpp: 212,085; sh: 12,176; makefile: 7,289; perl: 6,333; java: 2,220; ansic: 1,842; ml: 1,132; sed: 80
file content (162 lines) | stat: -rw-r--r-- 6,004 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
.TH libppl_c "3" "February 2016" "PPL 1.2" "libppl_c overview"

.SH NAME
libppl_c \- the C interface of the Parma Polyhedra Library
.SH SYNOPSIS
.B #include <ppl_c.h>
.sp
cc file.c
.B -lppl

.SH 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
.IR "The Parma Polyhedra Library User's Manual (version 1.2)"
and
.IR "The Parma Polyhedra Library C Language Interface User's Manual (version 1.2)"
for this kind of information.

.SH "INCLUDING THE HEADER FILE"
The C interface of the PPL has only one header file, named
\fIppl_c.h\fP.  So your program should contain a directive of the form
.sp
.B #include <ppl_c.h>
.sp
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
.B -Idir
command line option (see the file \fIINSTALL\fP for information
on how to configure the library so that it is installed in the
place of your choice).

.SH "INITIALIZING AND FINALIZING THE LIBRARY"
In order to initialize the Parma Polyhedra Library you must
call the function
.sp
.B int ppl_initialize(void)
.sp
before using any of its functionalities.
It is also a good norm to call the function
.sp
.B int ppl_finalize(void)
.sp
when you are done with the library.

.SH "USING THE LIBRARY"
Keeping in mind that there is no substitute for a careful reading of
.IR "The Parma Polyhedra Library User's Manual (version 1.2)"
and
.IR "The Parma Polyhedra Library C Language Interface User's Manual (version 1.2)"
you can find examples of use in the directories
.B interfaces/C/tests
and
.B demos/ppl_lpsol
of the source distribution.

.SH "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
.B -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
.B -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
.B -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
.IR "Program Library HOWTO"
is especially valuable for GNU/Linux users).

.SH "RETURN VALUES"
All the PPL C interface functions return an int: a negative value means
that an error occurred.  See
.IR "The Parma Polyhedra Library C Language Interface User's Manual (version 1.2)"
for the error codes.

.SH "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
.B 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
.B std::bad_alloc
upon memory exhaustion.
See \fB\f(BIlibppl\fB\|(3)\fR for instructions on how to do that.

.SH "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
.sp
.B int ppl_restore_pre_PPL_rounding()
.sp
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
.sp
.B int ppl_set_rounding_for_PPL()
.sp
before invoking any PPL interface related to such abstractions.


.SH "SEE ALSO"
.BR ppl-config(1)
.sp
.BR libppl(3)
.sp
Roberto Bagnara, Patricia M. Hill, and Enea Zaffanella.
.IR "The Parma Polyhedra Library User's Manual (version 1.2)",
available (in several formats) at
\fBhttp://bugseng.com/products/ppl/\fR .
.sp
Roberto Bagnara, Patricia M. Hill, and Enea Zaffanella.
.IR "The Parma Polyhedra Library C Language Interface User's Manual (version 1.2)",
available (in several formats) at
\fBhttp://bugseng.com/products/ppl/\fR .
.sp
David A. Wheeler.
.IR "Program Library HOWTO",
available (in several formats) at
\fBhttp://www.dwheeler.com/program-library/\fR .

.SH AVAILABILITY
The latest version of the Parma Polyhedra Library and all the documentation
is available at \fBhttp://bugseng.com/products/ppl/\fR .

.SH AUTHOR
See the file \fBCREDITS\fR in the source distribution or use the command
\fBppl\-config \-\-credits\fR for a list of contributors.

.SH "REPORTING BUGS"
Report bugs to <ppl\-devel@cs.unipr.it>.

.SH "COPYRIGHT AND NO WARRANTY"
Copyright (C) 2001\-2010 Roberto Bagnara <bagnara@cs.unipr.it>
Copyright (C) 2010\-2016 BUGSENG srl (http://bugseng.com)
.br
This is free software; see the file \fBCOPYING\fR in the source
distribution or use the command \fBppl\-config \-\-copying\fR to
obtain the copying conditions.  There is NO warranty; not even for
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.