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 
24 namespace apron {
25 
26 /* ================================= */
27 /* tcons0 */
28 /* ================================= */
29 
30 
47 class tcons0 : public use_malloc {
48 
49 protected:
50 
51  ap_tcons0_t l;
52 
54  tcons0(ap_tcons0_t& l);
55 
56  friend class abstract0;
57 
58 public:
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 
130  friend tcons0 operator>=(const texpr0::builder& a, const texpr0::builder& b);
131 
133  friend tcons0 operator<=(const texpr0::builder& a, const texpr0::builder& b);
134 
136  friend tcons0 operator> (const texpr0::builder& a, const texpr0::builder& b);
137 
139  friend tcons0 operator< (const texpr0::builder& a, const texpr0::builder& b);
140 
142  friend tcons0 operator==(const texpr0::builder& a, const texpr0::builder& b);
143 
145  friend tcons0 operator!=(const texpr0::builder& a, const texpr0::builder& b);
146 
148 
149  /* assignment */
150  /* ========== */
151 
154 
156  tcons0& operator= (const tcons0& x);
157 
159  tcons0& operator= (unsat x);
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 
241  scalar& get_modulo();
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 
350 class tcons0_array : public use_malloc {
351 
352 protected:
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 
362 public:
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 
395  tcons0_array(const lincons0_array& x);
396 
398 
399 
400  /* destructor */
401  /* ========== */
402 
405 
407  ~tcons0_array();
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(const tcons0_array &x, const dimchange &d, bool add=true)
Makes a (deep) copy of the array and applies add_dimensions to all constraints.
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
friend std::ostream & operator<<(std::ostream &os, const tcons0_array &s)
Printing.
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
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
tcons0(ap_tcons0_t &l)
Internal use only. Performs a shallow copy and takes ownership of the contents.
Definition: apxx_tcons0_inline.hh:23
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
tcons0(const tcons0 &x, const dimchange &d, bool add=true)
Makes a (deep) copy of a constraint, and applies a dimension change to the underlying expression.
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
tcons0(ap_constyp_t constyp=AP_CONS_SUPEQ)
Creates an empty constraint.
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.
friend std::ostream & operator<<(std::ostream &os, const tcons0 &s)
Printing.
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.
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