APRONXX  0.9.12
/home/mine/apron/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 
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);
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;
235  bool has_texpr() const;
236 
241  scalar& get_modulo();
242 
247  const scalar& get_modulo() const;
248 
254 
260 
262 
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;
312  bool is_interval_polyfrac() const;
313 
318  bool is_scalar() const;
319 
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 
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 
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 
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);
458 
459 
460  /* access */
461  /* ====== */
462 
465 
467  size_t size() const;
468 
470  tcons0* contents();
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;
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);
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 */
void permute_dimensions(const dimperm &d)
Applies a permutation to the underlying expression tree.
Definition: apxx_tcons0.hh:176
Iterators to traverse and mutate an expression tree.
Definition: apxx_texpr0.hh:413
Dimension permutation object (ap_dimperm_t wrapper).
Definition: apxx_dimension.hh:292
Dimension change object (ap_dimchange_t wrapper).
Definition: apxx_dimension.hh:102
void remove_dimensions(const dimchange &d)
Removes dimensions to the underlying expression tree.
Definition: apxx_tcons0.hh:170
Definition: apxx_abstract0.hh:27
~tcons0()
Frees the constraint, including the embedded expression tree and optional modulo scalar.
Definition: apxx_tcons0.hh:82
void set_modulo(const scalar &c)
Sets the extra scalar modulo to c (copied).
Definition: apxx_tcons0.hh:220
~tcons0_array()
Frees the space used by the array and all its constraints.
Definition: apxx_tcons0.hh:374
Array of arbitrary constraints (ap_tcons1_array_t wrapper).
Definition: apxx_tcons1.hh:337
size_t size() const
Returns the size of the array.
Definition: apxx_tcons0.hh:451
ap_tcons0_array_t a
Structure managed by APRON.
Definition: apxx_tcons0.hh:354
bool has_texpr() const
Whether the constraint contains a valid expression tree.
Definition: apxx_tcons0.hh:203
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
texpr0::iterator get_texpr()
Returns an iterator to the root of the underlying expression tree.
Definition: apxx_tcons0.hh:233
friend tcons0 operator>(const texpr0::builder &a, const texpr0::builder &b)
Makes a constraint a-b > 0.
Definition: apxx_tcons0.hh:105
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.hh:772
tcons0 & operator[](size_t i)
Returns a (modifiable) reference to an element, no bound checking.
Definition: apxx_tcons0.hh:466
bool is_interval_polyfrac() const
Whether the expression is a polynomial fraction and there is no rounding.
Definition: apxx_tcons0.hh:287
bool is_interval_linear() const
Whether the expression is linear and there is no rounding.
Definition: apxx_tcons0.hh:277
bool is_interval_polynomial() const
Whether the expression is polynomial and there is no rounding.
Definition: apxx_tcons0.hh:282
friend tcons0 operator!=(const texpr0::builder &a, const texpr0::builder &b)
Makes a constraint a-b != 0.
Definition: apxx_tcons0.hh:126
Level 0 abstract value (ap_abstract0_t* wrapper).
Definition: apxx_abstract0.hh:78
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.hh:531
void add_dimensions(const dimchange &d)
Applies add_dimensions to all constraints in the array.
Definition: apxx_tcons0.hh:432
bool is_scalar() const
Whether all occurring constants are scalar.
Definition: apxx_tcons0.hh:292
tcons0 * contents()
Returns a pointer to the start of the internal array holding the constraints.
Definition: apxx_tcons0.hh:456
friend std::ostream & operator<<(std::ostream &os, const tcons0 &s)
Printing.
Definition: apxx_tcons0.hh:250
tcons0_array & operator=(const tcons0_array &x)
(Deep) copy.
Definition: apxx_tcons0.hh:383
bool is_interval_cst() const
Whether the expression is constant (i.e., has no dimension leaves).
Definition: apxx_tcons0.hh:272
tcons0(ap_tcons0_t &l)
Internal use only. Performs a shallow copy and takes ownership of the contents.
Definition: apxx_tcons0.hh:24
void permute_dimensions(const dimperm &d)
Applies permute_dimensions to all constraints in the array.
Definition: apxx_tcons0.hh:442
ap_constyp_t & get_constyp()
Returns a (modifiable) reference to the constraint type.
Definition: apxx_tcons0.hh:188
void set_texpr(const texpr0::builder &c)
Sets the underlying expression tree to c (copied).
Definition: apxx_tcons0.hh:239
Iterators to traverse a constant expression tree.
Definition: apxx_texpr0.hh:211
tcons0 & operator=(const tcons0 &x)
(Deep) copy.
Definition: apxx_tcons0.hh:137
friend tcons0 operator>=(const texpr0::builder &a, const texpr0::builder &b)
Makes a constraint a-b >= 0.
Definition: apxx_tcons0.hh:91
tcons0 & get(size_t i)
Returns a (modifiable) reference to an element (bound-checked).
Definition: apxx_tcons0.hh:476
friend tcons0 operator==(const texpr0::builder &a, const texpr0::builder &b)
Makes a constraint a-b == 0.
Definition: apxx_tcons0.hh:119
Level 0 arbitrary constraint (ap_tcons0_t wrapper).
Definition: apxx_tcons0.hh:47
Inherited by most wrappers to map new and delete to malloc and free.
Definition: apxx_scalar.hh:69
Array of linear constraints (ap_lincons0_array_t wrapper).
Definition: apxx_lincons0.hh:341
void add_dimensions(const dimchange &d)
Adds dimensions to the underlying expression tree.
Definition: apxx_tcons0.hh:164
const ap_tcons0_t * get_ap_tcons0_t() const
Returns a pointer to the internal APRON object stored in *this.
Definition: apxx_tcons0.hh:302
friend tcons0 operator<(const texpr0::builder &a, const texpr0::builder &b)
Makes a constraint b-a > 0.
Definition: apxx_tcons0.hh:112
friend tcons0 operator<=(const texpr0::builder &a, const texpr0::builder &b)
Makes a constraint b-a >= 0.
Definition: apxx_tcons0.hh:98
ap_tcons0_t l
Structure managed by APRON.
Definition: apxx_tcons0.hh:51
scalar & get_modulo()
Returns a (modifiable) reference to the extra scalar.
Definition: apxx_tcons0.hh:208
void resize(size_t size)
Resizes the array.
Definition: apxx_tcons0.hh:427
Array of arbitrary constraints (ap_tcons0_array_t wrapper).
Definition: apxx_tcons0.hh:350
void print(char **name_of_dim=NULL, FILE *stream=stdout) const
Prints to a C stream.
Definition: apxx_tcons0.hh:263
Unsatisfiable constraint, to simplify initialisations and assignments.
Definition: apxx_lincons0.hh:28
bool is_interval_linear() const
Whether all constraints are linear.
Definition: apxx_tcons0.hh:523
Level 0 linear constraint (ap_lincons0_t wrapper).
Definition: apxx_lincons0.hh:43
bool has_modulo() const
Returns whether the constraint has a valid extra scalar (used in modulo constraints).
Definition: apxx_tcons0.hh:198
Temporary expression nodes used when constructing a texpr0.
Definition: apxx_texpr0.hh:581
void remove_dimensions(const dimchange &d)
Applies remove_dimensions to all constraints in the array.
Definition: apxx_tcons0.hh:437
friend std::ostream & operator<<(std::ostream &os, const tcons0_array &s)
Printing.
Definition: apxx_tcons0.hh:505
void print(char **name_of_dim=NULL, FILE *stream=stdout) const
Prints to a C stream.
Definition: apxx_tcons0.hh:514
Scalar (ap_scalar_t wrapper).
Definition: apxx_scalar.hh:89