APRONXX  0.9.12
/builddir/build/BUILD/apron-0.9.13/apronxx/apxx_texpr1.hh
Go to the documentation of this file.
1 /* -*- C++ -*-
2  * apxx_texpr1.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_TEXPR1_HH
17 #define __APXX_TEXPR1_HH
18 
19 #include "ap_texpr1.h"
20 
21 #include "apxx_linexpr1.hh"
22 #include "apxx_texpr0.hh"
23 
24 
25 namespace apron {
26 
27 /* ================================= */
28 /* texpr1 */
29 /* ================================= */
30 
31 
42 class texpr1 : public use_malloc {
43 
44 protected:
45 
46  ap_texpr1_t l;
47 
49  texpr1(ap_texpr1_t* x);
50 
52  void init_from(ap_environment_t* e, ap_texpr0_t* x);
53 
55  void init_from(ap_texpr1_t* x);
56 
57 public:
58 
59  class builder;
60  class iterator;
61  class const_iterator;
62 
63 
64  /* constructors */
65  /* ============ */
66 
69 
71  texpr1(const builder& c);
72 
74  texpr1(const const_iterator& x);
75 
77  texpr1(const texpr1& x);
78 
83  texpr1(const environment& e, const var& v);
84 
88  texpr1(const environment& e, const texpr0::const_iterator& x);
89 
93  texpr1(const environment& e, const texpr0& x);
94 
96  texpr1(const environment& e, const texpr0::builder& c);
97 
98 #if 0
100  template<class T> texpr1(const T& x);
101 
103  template<class T> texpr1(const environment& e, const T& x);
104 #endif
105 
110  texpr1(const linexpr1& l);
111 
116  texpr1(const texpr1& x, const environment& e);
117 
123  texpr1(const texpr1& x, const var& src, const texpr1& dst);
124 
126 
127 
128  /* destructor */
129  /* ========== */
130 
133 
135  ~texpr1();
136 
138 
139  /* assignment */
140  /* ========== */
141 
144 
146  texpr1& operator=(const texpr1& x);
147 
149  texpr1& operator=(const const_iterator& x);
150 
154  texpr1& operator=(const builder& x);
155 
156 
157 #if 0
159  template<class T> texpr1& operator=(const T& x);
160 #endif
161 
166  texpr1& operator= (const linexpr1& x);
167 
169 
170 
171 
172  /* iterators */
173  /* ========= */
174 
175 
178 
184 
185  protected:
186 
187  ap_texpr1_t l;
188 
190  const_iterator(ap_texpr1_t* l);
191 
193  const_iterator(ap_texpr0_t* t, ap_environment_t* e);
194 
195  friend class texpr1;
196  friend class tcons1;
197 
198  public:
199 
200  /* constructors */
201  /* ============ */
202 
205 
207  const_iterator(const texpr1& e);
208 
210  const_iterator(const const_iterator& i);
211 
213 
214 
215  /* access */
216  /* ====== */
217 
220 
223 
226 
232  ap_texpr_discr_t get_discr() const;
233 
238  const coeff& get_coeff() const;
239 
244  const var& get_var() const;
245 
250  ap_dim_t get_dim() const;
251 
258  ap_texpr_op_t get_op() const;
259 
266  ap_texpr_rtype_t get_rtype() const;
267 
273  ap_texpr_rdir_t get_rdir() const;
274 
276 
277 
278  /* traversal */
279  /* ========= */
280 
283 
286 
291  const_iterator child() const;
292 
298  const_iterator left() const;
299 
305  const_iterator right() const;
306 
308 
309 
310  /* tests, size, dimensions */
311  /* ======================= */
312 
315 
316 
318  bool equal(const texpr1& x) const;
319 
321  bool is_zero() const;
322 
324  size_t depth() const;
325 
327  size_t size() const;
328 
330  bool has_var(const var& v) const;
331 
333  bool is_interval_cst() const;
334 
336  bool is_interval_linear() const;
337 
339  bool is_interval_polynomial() const;
340 
342  bool is_interval_polyfrac() const;
343 
345  bool is_scalar() const;
346 
348 
349 
350  /* print */
351  /* ===== */
352 
355 
357  friend std::ostream& operator<< (std::ostream& os, const const_iterator& s);
358 
360  void print(FILE* stream=stdout) const;
361 
363 
364 
365  /* C-level compatibility */
366  /* ===================== */
367 
370 
372  ap_texpr1_t* get_ap_texpr1_t();
373 
375  const ap_texpr1_t* get_ap_texpr1_t() const;
376 
378 
379  };
380 
381 
386  class iterator : public const_iterator {
387 
388  protected:
389 
391  iterator(ap_texpr1_t* l);
392 
394  iterator(ap_texpr0_t* t, ap_environment_t* e);
395 
396  friend class texpr1;
397  friend class tcons1;
398 
399  public:
400 
401  /* constructors */
402  /* ============ */
403 
406 
408  iterator(texpr1& e);
409 
411  iterator(const iterator& i);
412 
414 
415 
416  /* substitution */
417  /* ============ */
418 
421 
427 
428 #if 0
430  template<class T> iterator& operator= (const T& c);
431 #endif
432 
434 
435 
436  /* access */
437  /* ====== */
438 
441 
444 
449  coeff& get_coeff() const;
450 
456  void set_var(const var& v) const;
457 
462  ap_dim_t& get_dim() const;
463 
470  ap_texpr_op_t& get_op() const;
471 
478  ap_texpr_rtype_t& get_rtype() const;
479 
485  ap_texpr_rdir_t& get_rdir() const;
486 
488 
489 
490  /* traversal */
491  /* ========= */
492 
495 
497  iterator& operator=(const iterator& i);
498 
503  iterator child() const;
504 
510  iterator left() const;
511 
517  iterator right() const;
518 
520 
521 
522  /* C-level compatibility */
523  /* ===================== */
524 
527 
529  ap_texpr1_t* get_ap_texpr1_t();
530 
532  const ap_texpr1_t* get_ap_texpr1_t() const;
533 
535 
536  };
537 
538 
540  const_iterator root() const;
541 
543  iterator root();
544 
546 
547 
548  /* builders */
549  /* ======== */
550 
553 
561  class builder : public use_malloc {
562 
563  friend class texpr1;
564 
565  protected:
566 
567  ap_texpr1_t l;
568 
570  builder& operator= (const builder& x) { assert(0); return *this; }
571 
573  void init_from(ap_texpr1_t* x);
574 
576  void init_from(ap_environment_t* e, ap_texpr0_t* x);
577 
579  builder(ap_texpr1_t* x);
580 
581  public:
582 
583  /* constructors */
584  /* ============ */
585 
588 
590  builder(const builder& x);
591 
593  builder(const const_iterator& x);
594 
596  builder(const texpr1& x);
597 
599  builder(const environment& e, const texpr0::builder& b);
600 
602  builder(const environment& e, const texpr0::const_iterator& b);
603 
605  builder(const environment& e, const texpr0& b);
606 
607 
609  builder(const environment& e, const coeff& x);
610 
612  builder(const environment& e, const scalar& x);
613 
615  builder(const environment& e, const mpq_class& x);
616 
618  builder(const environment& e, mpfr_t x);
619 
621  builder(const environment& e, int x);
622 
624  builder(const environment& e, long x);
625 
627  builder(const environment& e, double x);
628 
630  builder(const environment& e, const frac& x);
631 
633  builder(const environment& e, const interval& x);
634 
636  builder(const environment& e, const scalar& inf, const scalar& sup);
637 
639  builder(const environment& e, const mpq_class& inf, const mpq_class& sup);
640 
642  builder(const environment& e, mpfr_t inf, mpfr_t sup);
643 
645  builder(const environment& e, int inf, int sup);
646 
648  builder(const environment& e, long inf, long sup);
649 
651  builder(const environment& e, double inf, double sup);
652 
654  builder(const environment& e, const frac& inf, const frac& sup);
655 
657  builder(const environment& e, top t);
658 
660  builder(const environment& e, const var& v);
661 
663  builder(ap_texpr_op_t op, const builder& argA, ap_texpr_rtype_t rtype, ap_texpr_rdir_t rdir);
664 
666  builder(ap_texpr_op_t op, const builder& argA, const builder& argB, ap_texpr_rtype_t rtype, ap_texpr_rdir_t rdir);
667 
669 
670 
671  /* destructor */
672  /* ========== */
673 
676 
678  ~builder();
679 
681 
682 
683  /* tests */
684  /* ===== */
685 
686 
689 
691  bool is_zero() const;
692 
694 
695  /* C-level compatibility */
696  /* ===================== */
697 
700 
702  ap_texpr1_t* get_ap_texpr1_t();
703 
705  const ap_texpr1_t* get_ap_texpr1_t() const;
706 
708 
709 
710  /* 'Intelligent' constructors */
711  /* ========================== */
712 
715 
731  friend builder unary(ap_texpr_op_t op, const builder& a,
732  ap_texpr_rtype_t rtype, ap_texpr_rdir_t rdir);
733 
749  friend builder binary(ap_texpr_op_t op, const builder& a, const builder& b,
750  ap_texpr_rtype_t rtype, ap_texpr_rdir_t rdir);
751 
753  friend builder add(const builder& a, const builder& b,
754  ap_texpr_rtype_t rtype, ap_texpr_rdir_t rdir);
755 
757  friend builder sub(const builder& a, const builder& b,
758  ap_texpr_rtype_t rtype, ap_texpr_rdir_t rdir);
759 
761  friend builder mul(const builder& a, const builder& b,
762  ap_texpr_rtype_t rtype, ap_texpr_rdir_t rdir);
763 
765  friend builder div(const builder& a, const builder& b,
766  ap_texpr_rtype_t rtype, ap_texpr_rdir_t rdir);
767 
769  friend builder mod(const builder& a, const builder& b,
770  ap_texpr_rtype_t rtype, ap_texpr_rdir_t rdir);
771 
773  friend builder pow(const builder& a, const builder& b,
774  ap_texpr_rtype_t rtype, ap_texpr_rdir_t rdir);
775 
777  friend builder neg(const builder& a,
778  ap_texpr_rtype_t rtype, ap_texpr_rdir_t rdir);
779 
781  friend builder cast(const builder& a, ap_texpr_rtype_t rtype, ap_texpr_rdir_t rdir);
782 
784  friend builder floor(const builder& a);
785 
787  friend builder ceil(const builder& a);
788 
790  friend builder trunc(const builder& a);
791 
793  friend builder sqrt(const builder& a,
794  ap_texpr_rtype_t rtype, ap_texpr_rdir_t rdir);
795 
797  friend builder operator+(const builder& a);
798 
800  friend builder operator-(const builder& a);
801 
803  friend builder operator+(const builder& a, const builder& b);
804 
806  friend builder operator-(const builder& a, const builder& b);
807 
809  friend builder operator*(const builder& a, const builder& b);
810 
812  friend builder operator/(const builder& a, const builder& b);
813 
815  friend builder operator%(const builder& a, const builder& b);
816 
818  friend builder operator^(const builder& a, const builder& b);
819 
821  };
822 
823 
824  /* print */
825  /* ===== */
826 
829 
831  friend std::ostream& operator<< (std::ostream& os, const texpr1& s);
832 
834  void print(FILE* stream=stdout) const;
835 
837 
838 
839  /* dimension operations */
840  /* ==================== */
841 
844 
849  void extend_environment(const environment& e);
850 
852 
853 
854  /* access */
855  /* ====== */
856 
859 
862 
865 
868 
870  bool is_zero() const;
871 
873  bool equal(const texpr1& x) const;
874 
876  size_t depth() const;
877 
879  size_t size() const;
880 
882  bool has_var(const var& v) const;
883 
885  bool is_interval_cst() const;
886 
888  bool is_interval_linear() const;
889 
891  bool is_interval_polynomial() const;
892 
894  bool is_interval_polyfrac() const;
895 
897  bool is_scalar() const;
898 
900 
901  /* operations */
902  /* ========== */
903 
906 
911  void substitute(const var& src, const texpr1& dst);
912 
914 
915 
916 
917  /* C-level compatibility */
918  /* ===================== */
919 
922 
924  ap_texpr1_t* get_ap_texpr1_t();
925 
927  const ap_texpr1_t* get_ap_texpr1_t() const;
928 
930 
931 };
932 
933 #include "apxx_texpr1_inline.hh"
934 
935 }
936 
937 #endif /* __APXX_TEXPR1_HH */
Coefficient (ap_coeff_t wrapper).
Definition: apxx_coeff.hh:36
Level 1 environment (ap_environment_t wrapper).
Definition: apxx_environment.hh:51
Interval (ap_interval_t wrapper).
Definition: apxx_interval.hh:47
Level 1 linear expression (ap_linexpr1_t wrapper).
Definition: apxx_linexpr1.hh:39
Scalar (ap_scalar_t wrapper).
Definition: apxx_scalar.hh:89
Level 1 arbitrary constraint (ap_tcons1_t wrapper).
Definition: apxx_tcons1.hh:39
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
Level 0 arbitrary expression tree (ap_texpr0_t wrapper).
Definition: apxx_texpr0.hh:92
Temporary expression nodes used when constructing a texpr1.
Definition: apxx_texpr1.hh:561
friend builder sub(const builder &a, const builder &b, ap_texpr_rtype_t rtype, ap_texpr_rdir_t rdir)
Makes an AP_TEXPR_SUB expression node.
friend builder unary(ap_texpr_op_t op, const builder &a, ap_texpr_rtype_t rtype, ap_texpr_rdir_t rdir)
Makes a unary expression node.
builder(ap_texpr1_t *x)
Internal use only: makes a shallow copy, copying only the root node and referencing the environment.
Definition: apxx_texpr1_inline.hh:653
builder & operator=(const builder &x)
Not to be used. (Temporaries are not to be re-assigned).
Definition: apxx_texpr1.hh:570
friend builder neg(const builder &a, ap_texpr_rtype_t rtype, ap_texpr_rdir_t rdir)
Makes an AP_TEXPR_NEG expression node.
friend builder trunc(const builder &a)
Makes an AP_TEXPR_CAST expression node to AP_RTYPE_INT type rounded towards AP_RDIR_ZERO.
void init_from(ap_texpr1_t *x)
Internal use only: makes a shallow copy, copying only the root node and referencing the environment.
Definition: apxx_texpr1_inline.hh:630
friend builder cast(const builder &a, ap_texpr_rtype_t rtype, ap_texpr_rdir_t rdir)
Makes an AP_TEXPR_CAST expression node.
friend builder mul(const builder &a, const builder &b, ap_texpr_rtype_t rtype, ap_texpr_rdir_t rdir)
Makes an AP_TEXPR_MUL expression node.
~builder()
Frees the memory occupied by the node, not its sub-expressions.
Definition: apxx_texpr1_inline.hh:973
friend builder sqrt(const builder &a, ap_texpr_rtype_t rtype, ap_texpr_rdir_t rdir)
Makes an AP_TEXPR_SQRT expression node.
ap_texpr1_t l
Definition: apxx_texpr1.hh:567
friend builder operator-(const builder &a, const builder &b)
Makes a AP_TEXPR_SUB expression node using AP_RTYPE_REAL type (no rounding).
bool is_zero() const
Whether the expression is a single coefficient node with 0 value.
Definition: apxx_texpr1_inline.hh:964
friend builder operator+(const builder &a, const builder &b)
Makes a AP_TEXPR_ADD expression node using AP_RTYPE_REAL type (no rounding).
friend builder operator*(const builder &a, const builder &b)
Makes a AP_TEXPR_MUL expression node using AP_RTYPE_REAL type (no rounding).
friend builder pow(const builder &a, const builder &b, ap_texpr_rtype_t rtype, ap_texpr_rdir_t rdir)
Makes an AP_TEXPR_POW expression node.
friend builder operator^(const builder &a, const builder &b)
Makes a AP_TEXPR_POW expression node using AP_RTYPE_REAL type (no rounding).
friend builder floor(const builder &a)
Makes an AP_TEXPR_CAST expression node to AP_RTYPE_INT type rounded towards AP_RDIR_DOWN.
friend builder operator/(const builder &a, const builder &b)
Makes a AP_TEXPR_DIV expression node using AP_RTYPE_REAL type (no rounding).
friend builder add(const builder &a, const builder &b, ap_texpr_rtype_t rtype, ap_texpr_rdir_t rdir)
Makes an AP_TEXPR_ADD expression node.
friend builder operator+(const builder &a)
Makes a copy of the node.
ap_texpr1_t * get_ap_texpr1_t()
Returns a pointer to the internal APRON object stored in *this.
Definition: apxx_texpr1_inline.hh:988
friend builder binary(ap_texpr_op_t op, const builder &a, const builder &b, ap_texpr_rtype_t rtype, ap_texpr_rdir_t rdir)
Makes a binary expression node.
friend builder ceil(const builder &a)
Makes an AP_TEXPR_CAST expression node to AP_RTYPE_INT type rounded towards AP_RDIR_UP.
friend builder operator-(const builder &a)
Makes a AP_TEXPR_NEG expression node using AP_RTYPE_REAL type (no rounding).
friend builder mod(const builder &a, const builder &b, ap_texpr_rtype_t rtype, ap_texpr_rdir_t rdir)
Makes an AP_TEXPR_MOD expression node.
friend builder operator%(const builder &a, const builder &b)
Makes a AP_TEXPR_MOD expression node using AP_RTYPE_REAL type (no rounding).
friend builder div(const builder &a, const builder &b, ap_texpr_rtype_t rtype, ap_texpr_rdir_t rdir)
Makes an AP_TEXPR_DIV expression node.
Iterators to traverse a constant expression tree.
Definition: apxx_texpr1.hh:183
const coeff & get_coeff() const
Returns a reference to the coefficient of a constant node.
Definition: apxx_texpr1_inline.hh:337
const_iterator right() const
Constructs a const_iterator to the right sub-expression argument of a binary operator node.
Definition: apxx_texpr1_inline.hh:397
ap_texpr_rdir_t get_rdir() const
Returns the rounding direction of an operator node.
Definition: apxx_texpr1_inline.hh:367
ap_texpr_op_t get_op() const
Returns the operator kind of an operator node.
Definition: apxx_texpr1_inline.hh:355
const_iterator left() const
Constructs a const_iterator to the only of left sub-expression of an operator node.
Definition: apxx_texpr1_inline.hh:390
bool is_scalar() const
Whether all occurring constants are scalar.
Definition: apxx_texpr1_inline.hh:473
bool is_interval_linear() const
Whether the expression is linear and there is no rounding.
Definition: apxx_texpr1_inline.hh:458
friend std::ostream & operator<<(std::ostream &os, const const_iterator &s)
Printing.
bool is_zero() const
Whether the expression is a single coefficient node with 0 value.
Definition: apxx_texpr1_inline.hh:437
const_iterator(ap_texpr1_t *l)
Internal use only.
Definition: apxx_texpr1_inline.hh:306
bool has_var(const var &v) const
Whether the given variable name occurs in the expression.
Definition: apxx_texpr1_inline.hh:447
const_iterator(ap_texpr0_t *t, ap_environment_t *e)
Internal use only.
bool equal(const texpr1 &x) const
Whether two expressions are syntactically, structurally equal.
Definition: apxx_texpr1_inline.hh:426
const_iterator & operator=(const const_iterator &i)
Resets the const_iterator at position i.
Definition: apxx_texpr1_inline.hh:377
ap_dim_t get_dim() const
Returns the dimension of a dimension node.
Definition: apxx_texpr1_inline.hh:349
ap_texpr1_t * get_ap_texpr1_t()
Returns a pointer to the internal APRON object stored in *this.
Definition: apxx_texpr1_inline.hh:482
texpr0::const_iterator get_texpr0() const
Returns a constant iterator at the root of the underlying texpr0.
Definition: apxx_texpr1_inline.hh:327
const var & get_var() const
Returns a (unmodifiable) reference to the variable name of a dimension node.
Definition: apxx_texpr1_inline.hh:343
void print(FILE *stream=stdout) const
Prints to a C stream.
Definition: apxx_texpr1_inline.hh:417
ap_texpr1_t l
Definition: apxx_texpr1.hh:187
bool is_interval_cst() const
Whether the expression is constant (i.e., has no dimension leaves).
Definition: apxx_texpr1_inline.hh:453
size_t size() const
Returns the number of operator nodes in the expression tree.
Definition: apxx_texpr1_inline.hh:442
ap_texpr_discr_t get_discr() const
Returns the node kind.
Definition: apxx_texpr1_inline.hh:332
environment get_environment() const
Returns (a copy of) the environment associated with the expression.
Definition: apxx_texpr1_inline.hh:322
bool is_interval_polynomial() const
Whether the expression is polynomial and there is no rounding.
Definition: apxx_texpr1_inline.hh:463
size_t depth() const
Returns the depth of the expression tree (counting only operator nodes).
Definition: apxx_texpr1_inline.hh:432
bool is_interval_polyfrac() const
Whether the expression is a polynomial fraction and there is no rounding.
Definition: apxx_texpr1_inline.hh:468
const_iterator child() const
Constructs a const_iterator to the only or left sub-expression of an operator node.
Definition: apxx_texpr1_inline.hh:383
ap_texpr_rtype_t get_rtype() const
Returns the destination type of an operator node.
Definition: apxx_texpr1_inline.hh:361
Iterators to traverse and mutate an expression tree.
Definition: apxx_texpr1.hh:386
iterator child() const
Constructs an iterator to the only or left sub-expression of an operator node.
Definition: apxx_texpr1_inline.hh:590
iterator right() const
Constructs an iterator to the right sub-expression argument of a binary operator node.
Definition: apxx_texpr1_inline.hh:604
texpr0::iterator get_texpr0() const
Returns an iterator at the root of the underlying texpr0.
Definition: apxx_texpr1_inline.hh:536
iterator(ap_texpr1_t *l)
Internal use only.
Definition: apxx_texpr1_inline.hh:505
iterator(ap_texpr0_t *t, ap_environment_t *e)
Internal use only.
iterator left() const
Constructs an iterator to the only of left sub-expression of an operator node.
Definition: apxx_texpr1_inline.hh:597
coeff & get_coeff() const
Returns a (modifiable) reference to the coefficient of a constant node.
Definition: apxx_texpr1_inline.hh:542
ap_dim_t & get_dim() const
Returns a (modifiable) reference to the dimension of a dimension node.
Definition: apxx_texpr1_inline.hh:556
ap_texpr_rtype_t & get_rtype() const
Returns a (modifiable) reference to the destination type of an operator node.
Definition: apxx_texpr1_inline.hh:568
iterator & operator=(const builder &x)
Replace the sub-expression at the iterator position with a (deep) copy of c.
ap_texpr1_t * get_ap_texpr1_t()
Returns a pointer to the internal APRON object stored in *this.
Definition: apxx_texpr1_inline.hh:615
ap_texpr_op_t & get_op() const
Returns a (modifiable) reference to the operator kind of an operator node.
Definition: apxx_texpr1_inline.hh:562
void set_var(const var &v) const
Sets the variable name of a dimension node.
Definition: apxx_texpr1_inline.hh:548
ap_texpr_rdir_t & get_rdir() const
Returns a (modifiable) reference to the rounding direction of an operator node.
Definition: apxx_texpr1_inline.hh:574
Level 1 arbitrary expression tree (ap_texpr1_t wrapper).
Definition: apxx_texpr1.hh:42
friend std::ostream & operator<<(std::ostream &os, const texpr1 &s)
Printing.
const_iterator root() const
Returns a new iterator at the root of a constant expression tree.
Definition: apxx_texpr1_inline.hh:295
bool is_interval_polyfrac() const
Whether the expression is a polynomial fraction and there is no rounding.
Definition: apxx_texpr1_inline.hh:242
texpr1(const builder &c)
Makes an expression from a temporary.
size_t size() const
Returns the number of operator nodes in the expression tree.
Definition: apxx_texpr1_inline.hh:217
texpr1 & operator=(const texpr1 &x)
Makes a (deep) copy of the expression.
Definition: apxx_texpr1_inline.hh:117
bool has_var(const var &v) const
Whether the given variable name occurs in the expression.
Definition: apxx_texpr1_inline.hh:222
bool is_interval_linear() const
Whether the expression is linear and there is no rounding.
Definition: apxx_texpr1_inline.hh:232
bool is_zero() const
Whether the expression is a single coefficient node with 0 value.
Definition: apxx_texpr1_inline.hh:212
bool equal(const texpr1 &x) const
Whether two expressions are syntactically, structurally equal.
Definition: apxx_texpr1_inline.hh:202
bool is_scalar() const
Whether all occurring constants are scalar.
Definition: apxx_texpr1_inline.hh:247
void substitute(const var &src, const texpr1 &dst)
Substitutes each occurrence of src with (a fresh copy of) dst.
Definition: apxx_texpr1_inline.hh:256
texpr0::const_iterator get_texpr0() const
Returns a constant iterator at the root of the underlying texpr0.
Definition: apxx_texpr1_inline.hh:192
void print(FILE *stream=stdout) const
Prints to a C stream.
Definition: apxx_texpr1_inline.hh:164
bool is_interval_polynomial() const
Whether the expression is polynomial and there is no rounding.
Definition: apxx_texpr1_inline.hh:237
bool is_interval_cst() const
Whether the expression is constant (i.e., has no dimension leaves).
Definition: apxx_texpr1_inline.hh:227
void init_from(ap_environment_t *e, ap_texpr0_t *x)
Internal use only. Shallow copy.
Definition: apxx_texpr1_inline.hh:18
environment get_environment() const
Returns the environment of the expression (with incremented reference count).
Definition: apxx_texpr1_inline.hh:187
void extend_environment(const environment &e)
Extends the environment of the expression.
Definition: apxx_texpr1_inline.hh:174
ap_texpr1_t l
Structure managed by APRON.
Definition: apxx_texpr1.hh:46
~texpr1()
Frees the memory occupied by the expression and decrements the reference count of the environment.
Definition: apxx_texpr1_inline.hh:107
texpr1(ap_texpr1_t *x)
Internal use only. Shallow copy.
Definition: apxx_texpr1_inline.hh:30
size_t depth() const
Returns the depth of the expression tree (counting only operator nodes).
Definition: apxx_texpr1_inline.hh:207
ap_texpr1_t * get_ap_texpr1_t()
Returns a pointer to the internal APRON object stored in *this.
Definition: apxx_texpr1_inline.hh:271
Variable name (ap_var_t wrapper).
Definition: apxx_var.hh:39
Definition: apxx_abstract0.hh:27
A fraction with native int coefficients, to simplify initialisations and assignments.
Definition: apxx_scalar.hh:41
Full interval (]-oo,+oo[) or domain, to simplify initialisations and assignments.
Definition: apxx_interval.hh:27
Inherited by most wrappers to map new and delete to malloc and free.
Definition: apxx_scalar.hh:69