APRONXX 0.9.14
/builddir/build/BUILD/apron-0.9.15-build/apron-0.9.15/apronxx/apxx_lincons0.hh
Go to the documentation of this file.
1/* -*- C++ -*-
2 * apxx_lincons0.hh
3 *
4 * APRON Library / C++ class wrappers
5 *
6 * Copyright (C) Antoine Mine' 2007
7 *
8 */
9/* This file is part of the APRON Library, released under LGPL license
10 with an exception allowing the redistribution of statically linked
11 executables.
12
13 Please read the COPYING file packaged in the distribution.
14*/
15
16#ifndef __APXX_LINCONS0_HH
17#define __APXX_LINCONS0_HH
18
19#include <vector>
20#include "ap_lincons0.h"
21#include "apxx_linexpr0.hh"
22
23
24namespace apron {
25
26
28struct unsat {};
29
30
31
32/* ================================= */
33/* lincons0 */
34/* ================================= */
35
36
43class lincons0 : public use_malloc {
44
45protected:
46
47 ap_lincons0_t l;
48
50 lincons0(ap_lincons0_t l);
51
52 friend class abstract0;
53
54public:
55
56
57 /* constructors */
58 /* ============ */
59
62
69 lincons0(ap_constyp_t constyp=AP_CONS_SUPEQ);
70
76 lincons0(ap_constyp_t constyp, const linexpr0& lin);
77
82 lincons0(ap_constyp_t constyp, const linexpr0& lin, const scalar& modulo);
83
85 lincons0(const lincons0& x);
86
88 lincons0(const lincons0& x, const dimchange& d);
89
91 lincons0(const lincons0& x, const dimperm& d);
92
94 lincons0(unsat x);
95
97
98
99 /* destructor */
100 /* ========== */
101
104
106 ~lincons0();
107
109
110
111 /* assignment */
112 /* ========== */
113
116
118 lincons0& operator= (const lincons0& x);
119
122
128 void set_modulo(const scalar& c);
129
135 void set_linexpr(const linexpr0& c);
136
138
139
140 /* dimension operations */
141 /* ==================== */
142
145
150 void resize(size_t size);
151
156 void add_dimensions(const dimchange& d);
157
162 void permute_dimensions(const dimperm& d);
163
165
166
167 /* access */
168 /* ====== */
169
172
173 /* size */
174
179 size_t size() const;
180
181
182 /* get */
183
188 ap_constyp_t& get_constyp();
189
194 const ap_constyp_t& get_constyp() const;
195
197 bool has_modulo() const;
198
204 bool has_linexpr() const;
205
211
216 const scalar& get_modulo() const;
217
223
228 const linexpr0& get_linexpr() const;
229
234 coeff& get_cst();
235
240 const coeff& get_cst() const;
241
248 coeff& operator[](ap_dim_t dim);
249
256 const coeff& operator[](ap_dim_t dim) const;
257
259
260
261 /* print */
262 /* ===== */
263
266
274 friend std::ostream& operator<< (std::ostream& os, const lincons0& s);
275
277 void print(char** name_of_dim=NULL, FILE* stream=stdout) const;
278
280
281
282 /* tests */
283 /* ===== */
284
287
293 bool is_unsat() const;
294
299 bool is_linear() const;
300
306 bool is_quasilinear() const;
307
308 // TODO: equal, compare (currently not in ap_lincons0.h) ???
309
311
312 /* TODO: evaluation, linearization, intelligent constructors */
313
314
315 /* C-level compatibility */
316 /* ===================== */
317
320
322 const ap_lincons0_t* get_ap_lincons0_t() const;
323
325 ap_lincons0_t* get_ap_lincons0_t();
326
328};
329
330
331
332/* ================================= */
333/* lincons0_array */
334/* ================================= */
335
336
342
343protected:
344
345 ap_lincons0_array_t a;
346
348 lincons0_array(ap_lincons0_array_t& a) : a(a) {}
349
350 friend class lincons1_array;
351 friend class abstract0;
352
353public:
354
355 /* constructors */
356 /* ============ */
357
360
365 lincons0_array(size_t size);
366
369
371 lincons0_array(const lincons0_array& x, const dimchange& d);
372
374 lincons0_array(const lincons0_array& x, const dimperm& d);
375
377 lincons0_array(size_t size, const lincons0 x[]);
378
380 lincons0_array(const std::vector<lincons0>& x);
381
383
384
385 /* destructor */
386 /* ========== */
387
390
393
395
396
397 /* assignment */
398 /* ========== */
399
402
405
411
413 lincons0_array& operator= (const std::vector<lincons0>& x);
414
416
417
418 /* dimension operations */
419 /* ==================== */
420
423
425 void resize(size_t size);
426
428 void add_dimensions(const dimchange& d);
429
431 void permute_dimensions(const dimperm& d);
432
434
435
436 /* access */
437 /* ====== */
438
441
443 size_t size() const;
444
447
449 const lincons0* contents() const;
450
452 lincons0& operator[](size_t i);
453
455 const lincons0& operator[](size_t i) const;
456
461 lincons0& get(size_t i);
462
467 const lincons0& get(size_t i) const;
468
470
471
472 /* conversion */
473 /* ========== */
474
477
479 operator std::vector<lincons0>() const;
480
482
483
484 /* print */
485 /* ===== */
486
489
497 friend std::ostream& operator<< (std::ostream& os, const lincons0_array& s);
498
500 void print(char** name_of_dim = NULL, FILE* stream=stdout) const;
501
503
504
505 /* tests */
506 /* ===== */
507
510
512 bool is_linear() const;
513
515 bool is_quasilinear() const;
516
518
519
520 /* C-level compatibility */
521 /* ===================== */
522
525
527 const ap_lincons0_array_t* get_ap_lincons0_array_t() const;
528
530 ap_lincons0_array_t* get_ap_lincons0_array_t();
531
533
534};
535
537
538}
539
540#endif /* __APXX_LINCONS0_HH */
Level 0 abstract value (ap_abstract0_t* wrapper).
Definition apxx_abstract0.hh:78
Coefficient (ap_coeff_t wrapper).
Definition apxx_coeff.hh:36
Represents a dimension (i.e., variable by index) in an expression tree.
Definition apxx_texpr0.hh:33
Dimension change object (ap_dimchange_t wrapper).
Definition apxx_dimension.hh:102
Dimension permutation object (ap_dimperm_t wrapper).
Definition apxx_dimension.hh:292
Array of linear constraints (ap_lincons0_array_t wrapper).
Definition apxx_lincons0.hh:341
size_t size() const
Returns the size of the array.
Definition apxx_lincons0_inline.hh:375
~lincons0_array()
Frees the space used by the array and all its constraints.
Definition apxx_lincons0_inline.hh:313
lincons0 & get(size_t i)
Returns a (modifiable) reference to an element (bound-checked).
Definition apxx_lincons0_inline.hh:400
const ap_lincons0_array_t * get_ap_lincons0_array_t() const
Returns a pointer to the internal APRON object stored in *this.
Definition apxx_lincons0_inline.hh:462
void permute_dimensions(const dimperm &d)
Applies permute_dimensions to all constraints in the array.
Definition apxx_lincons0_inline.hh:366
lincons0 * contents()
Returns a pointer to the start of the internal array holding the constraints.
Definition apxx_lincons0_inline.hh:380
ap_lincons0_array_t a
Structure managed by APRON.
Definition apxx_lincons0.hh:345
lincons0_array(ap_lincons0_array_t &a)
Internal use only. Performs a shallow copy and takes ownership of the contents.
Definition apxx_lincons0.hh:348
void print(char **name_of_dim=NULL, FILE *stream=stdout) const
Prints to a C stream.
Definition apxx_lincons0_inline.hh:438
bool is_linear() const
Whether all constraints are linear.
Definition apxx_lincons0_inline.hh:447
bool is_quasilinear() const
Whether all constraints are quasi-linear.
Definition apxx_lincons0_inline.hh:452
lincons0 & operator[](size_t i)
Returns a (modifiable) reference to an element, no bound checking.
Definition apxx_lincons0_inline.hh:390
void resize(size_t size)
Resizes the array.
Definition apxx_lincons0_inline.hh:356
friend std::ostream & operator<<(std::ostream &os, const lincons0_array &s)
Printing.
lincons0_array & operator=(const lincons0_array &x)
(Deep) copy.
Definition apxx_lincons0_inline.hh:322
void add_dimensions(const dimchange &d)
Applies add_dimensions to all constraints in the array.
Definition apxx_lincons0_inline.hh:361
Level 0 linear constraint (ap_lincons0_t wrapper).
Definition apxx_lincons0.hh:43
coeff & operator[](ap_dim_t dim)
Returns a (modifiable) reference to the coefficient corresponding to the given dimension.
Definition apxx_lincons0_inline.hh:197
bool has_modulo() const
Whether the constraint has a valid auxiliary scalar (used in modulo constraints).
Definition apxx_lincons0_inline.hh:145
bool has_linexpr() const
Whether the constraint has a valid linear expression.
Definition apxx_lincons0_inline.hh:150
void add_dimensions(const dimchange &d)
Changes the dimension of the underlying linear expression.
Definition apxx_lincons0_inline.hh:108
void resize(size_t size)
Resizes the underlying linear expression.
Definition apxx_lincons0_inline.hh:101
void set_linexpr(const linexpr0 &c)
Sets the underlying linear expression to c (copied).
Definition apxx_lincons0_inline.hh:185
lincons0(ap_lincons0_t l)
Internal use only. Performs a shallow copy and takes ownership of the contents.
Definition apxx_lincons0_inline.hh:23
bool is_unsat() const
Whether the constraint is unsatisfiable.
Definition apxx_lincons0_inline.hh:229
bool is_quasilinear() const
Whether the underlying linear expression has only scalar coefficients, except maybe for the constant ...
Definition apxx_lincons0_inline.hh:241
bool is_linear() const
Whether the underlying linear expression has only scalar coefficients.
Definition apxx_lincons0_inline.hh:235
const ap_lincons0_t * get_ap_lincons0_t() const
Returns a pointer to the internal APRON object stored in *this.
Definition apxx_lincons0_inline.hh:252
friend std::ostream & operator<<(std::ostream &os, const lincons0 &s)
Printing.
ap_lincons0_t l
Structure managed by APRON.
Definition apxx_lincons0.hh:47
coeff & get_cst()
Returns a (modifiable) reference to the constant coefficient.
Definition apxx_lincons0_inline.hh:191
scalar & get_modulo()
Returns a (modifiable) reference to the auxiliary scalar.
Definition apxx_lincons0_inline.hh:155
~lincons0()
Frees the constraint, including the embedded linear expression and optional modulo scalar.
Definition apxx_lincons0_inline.hh:72
void set_modulo(const scalar &c)
Sets the auxiliary scalar modulo to c (copied).
Definition apxx_lincons0_inline.hh:167
ap_constyp_t & get_constyp()
Returns a (modifiable) reference to the constraint type.
Definition apxx_lincons0_inline.hh:135
void print(char **name_of_dim=NULL, FILE *stream=stdout) const
Prints to a C stream.
Definition apxx_lincons0_inline.hh:220
void permute_dimensions(const dimperm &d)
Applies a permutation to the underlying linear expression.
Definition apxx_lincons0_inline.hh:114
size_t size() const
Returns the size of the underlying linear expression.
Definition apxx_lincons0_inline.hh:126
linexpr0 & get_linexpr()
Returns a (modifiable) reference to the underlying linear expression.
Definition apxx_lincons0_inline.hh:173
lincons0 & operator=(const lincons0 &x)
(Deep) copy.
Definition apxx_lincons0_inline.hh:81
Array of linear constraints (ap_lincons1_array_t wrapper).
Definition apxx_lincons1.hh:331
Level 0 linear expression (ap_linexpr0_t wrapper).
Definition apxx_linexpr0.hh:44
Scalar (ap_scalar_t wrapper).
Definition apxx_scalar.hh:89
Definition apxx_abstract0.hh:27
Unsatisfiable constraint, to simplify initialisations and assignments.
Definition apxx_lincons0.hh:28
Inherited by most wrappers to map new and delete to malloc and free.
Definition apxx_scalar.hh:69