APRONXX 0.9.12
/builddir/build/BUILD/apron-0.9.13/apronxx/apxx_tcons0.hh
Go to the documentation of this file.
1/* -*- C++ -*-
2 * apxx_tcons0.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_TCONS0_HH
17#define __APXX_TCONS0_HH
18
19#include "ap_tcons0.h"
20#include "apxx_texpr0.hh"
21#include "apxx_lincons0.hh"
22
23
24namespace apron {
25
26/* ================================= */
27/* tcons0 */
28/* ================================= */
29
30
47class tcons0 : public use_malloc {
48
49protected:
50
51 ap_tcons0_t l;
52
54 tcons0(ap_tcons0_t& l);
55
56 friend class abstract0;
57
58public:
59
60
61 /* constructors */
62 /* ============ */
63
66
73 tcons0(ap_constyp_t constyp=AP_CONS_SUPEQ);
74
80 tcons0(ap_constyp_t constyp, const texpr0::builder& t);
81
86 tcons0(ap_constyp_t constyp, const texpr0::builder& t, const scalar& modulo);
87
89 tcons0(const tcons0& x);
90
95 tcons0(const tcons0& x, const dimchange& d, bool add=true);
96
98 tcons0(const tcons0& x, const dimperm& d);
99
101 tcons0(unsat x);
102
107 tcons0(const lincons0& x);
108
109
111
112 /* destructor */
113 /* ========== */
114
117
119 ~tcons0();
120
122
123 /* 'Intelligent' constructors */
124 /* ========================== */
125
128
131
134
137
140
143
146
148
149 /* assignment */
150 /* ========== */
151
154
156 tcons0& operator= (const tcons0& x);
157
160
165 tcons0& operator= (const lincons0& x);
166
172 void set_modulo(const scalar& c);
173
179 void set_texpr(const texpr0::builder& c);
180
182
183
184 /* dimension operations */
185 /* ==================== */
186
189
194 void add_dimensions(const dimchange& d);
195
200 void remove_dimensions(const dimchange& d);
201
206 void permute_dimensions(const dimperm& d);
207
209
210
211 /* access */
212 /* ====== */
213
216
217 /* get */
218
223 ap_constyp_t& get_constyp();
224
229 const ap_constyp_t& get_constyp() const;
230
232 bool has_modulo() const;
233
235 bool has_texpr() const;
236
242
247 const scalar& get_modulo() const;
248
254
260
262
263
264 /* print */
265 /* ===== */
266
269
277 friend std::ostream& operator<< (std::ostream& os, const tcons0& s);
278
280 void print(char** name_of_dim=NULL, FILE* stream=stdout) const;
281
283
284 /* tests */
285 /* ===== */
286
289
294 bool is_interval_cst() const;
295
300 bool is_interval_linear() const;
301
306 bool is_interval_polynomial() const;
307
312 bool is_interval_polyfrac() const;
313
318 bool is_scalar() const;
319
321
322
323 /* C-level compatibility */
324 /* ===================== */
325
328
330 const ap_tcons0_t* get_ap_tcons0_t() const;
331
333 ap_tcons0_t* get_ap_tcons0_t();
334
336
337};
338
339
340
341/* ================================= */
342/* tcons0_array */
343/* ================================= */
344
345
350class tcons0_array : public use_malloc {
351
352protected:
353
354 ap_tcons0_array_t a;
355
357 tcons0_array(ap_tcons0_array_t& a) : a(a) {}
358
359 friend class abstract0;
360 friend class tcons1_array;
361
362public:
363
364 /* constructors */
365 /* ============ */
366
369
374 tcons0_array(size_t size);
375
377 tcons0_array(const tcons0_array& x);
378
380 tcons0_array(const tcons0_array& x, const dimchange& d, bool add=true);
381
383 tcons0_array(const tcons0_array& x, const dimperm& d);
384
386 tcons0_array(size_t size, const tcons0 x[]);
387
389 tcons0_array(const std::vector<tcons0>& x);
390
396
398
399
400 /* destructor */
401 /* ========== */
402
405
408
410
411
412 /* assignment */
413 /* ========== */
414
417
420
425 tcons0_array& operator= (const tcons0 x[]);
426
428 tcons0_array& operator= (const std::vector<tcons0>& x);
429
435
437
438
439 /* dimension operations */
440 /* ==================== */
441
444
446 void resize(size_t size);
447
449 void add_dimensions(const dimchange& d);
450
452 void remove_dimensions(const dimchange& d);
453
455 void permute_dimensions(const dimperm& d);
456
458
459
460 /* access */
461 /* ====== */
462
465
467 size_t size() const;
468
470 tcons0* contents();
471
473 const tcons0* contents() const;
474
476 tcons0& operator[](size_t i);
477
479 const tcons0& operator[](size_t i) const;
480
485 tcons0& get(size_t i);
486
491 const tcons0& get(size_t i) const;
492
494
495
496 /* conversion */
497 /* ========== */
498
501
503 operator std::vector<tcons0>() const;
504
506
507
508 /* print */
509 /* ===== */
510
513
514
522 friend std::ostream& operator<< (std::ostream& os, const tcons0_array& s);
523
525 void print(char** name_of_dim = NULL, FILE* stream=stdout) const;
526
528
529
530 /* tests */
531 /* ===== */
532
535
537 bool is_interval_linear() const;
538
540
541
542 /* C-level compatibility */
543 /* ===================== */
544
547
549 const ap_tcons0_array_t* get_ap_tcons0_array_t() const;
550
552 ap_tcons0_array_t* get_ap_tcons0_array_t();
553
555};
556
557#include "apxx_tcons0_inline.hh"
558
559}
560
561#endif /* __APXX_TCONS0_HH */
texpr0::builder add(const texpr0::builder &a, const texpr0::builder &b, ap_texpr_rtype_t rtype=AP_RTYPE_REAL, ap_texpr_rdir_t rdir=AP_RDIR_NEAREST)
Definition: apxx_texpr0_inline.hh:771
Level 0 abstract value (ap_abstract0_t* wrapper).
Definition: apxx_abstract0.hh:78
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
Level 0 linear constraint (ap_lincons0_t wrapper).
Definition: apxx_lincons0.hh:43
Scalar (ap_scalar_t wrapper).
Definition: apxx_scalar.hh:89
Array of arbitrary constraints (ap_tcons0_array_t wrapper).
Definition: apxx_tcons0.hh:350
tcons0_array & operator=(const tcons0_array &x)
(Deep) copy.
Definition: apxx_tcons0_inline.hh:382
bool is_interval_linear() const
Whether all constraints are linear.
Definition: apxx_tcons0_inline.hh:522
ap_tcons0_array_t a
Structure managed by APRON.
Definition: apxx_tcons0.hh:354
void add_dimensions(const dimchange &d)
Applies add_dimensions to all constraints in the array.
Definition: apxx_tcons0_inline.hh:431
size_t size() const
Returns the size of the array.
Definition: apxx_tcons0_inline.hh:450
void print(char **name_of_dim=NULL, FILE *stream=stdout) const
Prints to a C stream.
Definition: apxx_tcons0_inline.hh:513
const ap_tcons0_array_t * get_ap_tcons0_array_t() const
Returns a pointer to the internal APRON object stored in *this.
Definition: apxx_tcons0_inline.hh:530
tcons0_array(ap_tcons0_array_t &a)
Internal use only. Performs a shallow copy and takes ownership of the contents.
Definition: apxx_tcons0.hh:357
tcons0 & operator[](size_t i)
Returns a (modifiable) reference to an element, no bound checking.
Definition: apxx_tcons0_inline.hh:465
tcons0 & get(size_t i)
Returns a (modifiable) reference to an element (bound-checked).
Definition: apxx_tcons0_inline.hh:475
friend std::ostream & operator<<(std::ostream &os, const tcons0_array &s)
Printing.
tcons0 * contents()
Returns a pointer to the start of the internal array holding the constraints.
Definition: apxx_tcons0_inline.hh:455
void permute_dimensions(const dimperm &d)
Applies permute_dimensions to all constraints in the array.
Definition: apxx_tcons0_inline.hh:441
~tcons0_array()
Frees the space used by the array and all its constraints.
Definition: apxx_tcons0_inline.hh:373
void resize(size_t size)
Resizes the array.
Definition: apxx_tcons0_inline.hh:426
void remove_dimensions(const dimchange &d)
Applies remove_dimensions to all constraints in the array.
Definition: apxx_tcons0_inline.hh:436
Level 0 arbitrary constraint (ap_tcons0_t wrapper).
Definition: apxx_tcons0.hh:47
bool is_interval_polyfrac() const
Whether the expression is a polynomial fraction and there is no rounding.
Definition: apxx_tcons0_inline.hh:286
ap_tcons0_t l
Structure managed by APRON.
Definition: apxx_tcons0.hh:51
~tcons0()
Frees the constraint, including the embedded expression tree and optional modulo scalar.
Definition: apxx_tcons0_inline.hh:81
friend tcons0 operator!=(const texpr0::builder &a, const texpr0::builder &b)
Makes a constraint a-b != 0.
bool is_interval_cst() const
Whether the expression is constant (i.e., has no dimension leaves).
Definition: apxx_tcons0_inline.hh:271
bool has_modulo() const
Returns whether the constraint has a valid extra scalar (used in modulo constraints).
Definition: apxx_tcons0_inline.hh:197
friend tcons0 operator>(const texpr0::builder &a, const texpr0::builder &b)
Makes a constraint a-b > 0.
bool is_scalar() const
Whether all occurring constants are scalar.
Definition: apxx_tcons0_inline.hh:291
void remove_dimensions(const dimchange &d)
Removes dimensions to the underlying expression tree.
Definition: apxx_tcons0_inline.hh:169
bool is_interval_linear() const
Whether the expression is linear and there is no rounding.
Definition: apxx_tcons0_inline.hh:276
friend tcons0 operator<=(const texpr0::builder &a, const texpr0::builder &b)
Makes a constraint b-a >= 0.
void set_texpr(const texpr0::builder &c)
Sets the underlying expression tree to c (copied).
Definition: apxx_tcons0_inline.hh:238
ap_constyp_t & get_constyp()
Returns a (modifiable) reference to the constraint type.
Definition: apxx_tcons0_inline.hh:187
bool has_texpr() const
Whether the constraint contains a valid expression tree.
Definition: apxx_tcons0_inline.hh:202
void permute_dimensions(const dimperm &d)
Applies a permutation to the underlying expression tree.
Definition: apxx_tcons0_inline.hh:175
void set_modulo(const scalar &c)
Sets the extra scalar modulo to c (copied).
Definition: apxx_tcons0_inline.hh:219
void print(char **name_of_dim=NULL, FILE *stream=stdout) const
Prints to a C stream.
Definition: apxx_tcons0_inline.hh:262
friend tcons0 operator>=(const texpr0::builder &a, const texpr0::builder &b)
Makes a constraint a-b >= 0.
texpr0::iterator get_texpr()
Returns an iterator to the root of the underlying expression tree.
Definition: apxx_tcons0_inline.hh:232
void add_dimensions(const dimchange &d)
Adds dimensions to the underlying expression tree.
Definition: apxx_tcons0_inline.hh:163
bool is_interval_polynomial() const
Whether the expression is polynomial and there is no rounding.
Definition: apxx_tcons0_inline.hh:281
const ap_tcons0_t * get_ap_tcons0_t() const
Returns a pointer to the internal APRON object stored in *this.
Definition: apxx_tcons0_inline.hh:301
friend tcons0 operator<(const texpr0::builder &a, const texpr0::builder &b)
Makes a constraint b-a > 0.
tcons0 & operator=(const tcons0 &x)
(Deep) copy.
Definition: apxx_tcons0_inline.hh:136
friend tcons0 operator==(const texpr0::builder &a, const texpr0::builder &b)
Makes a constraint a-b == 0.
friend std::ostream & operator<<(std::ostream &os, const tcons0 &s)
Printing.
scalar & get_modulo()
Returns a (modifiable) reference to the extra scalar.
Definition: apxx_tcons0_inline.hh:207
Array of arbitrary constraints (ap_tcons1_array_t wrapper).
Definition: apxx_tcons1.hh:337
Temporary expression nodes used when constructing a texpr0.
Definition: apxx_texpr0.hh:581
Iterators to traverse a constant expression tree.
Definition: apxx_texpr0.hh:211
Iterators to traverse and mutate an expression tree.
Definition: apxx_texpr0.hh:413
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