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
99  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
158  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
429  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 */
apron::texpr1::const_iterator::operator<<
friend std::ostream & operator<<(std::ostream &os, const const_iterator &s)
Printing.
apron::texpr1::const_iterator::const_iterator
const_iterator(ap_texpr1_t *l)
Internal use only.
Definition: apxx_texpr1_inline.hh:306
apron::texpr1::const_iterator::get_dim
ap_dim_t get_dim() const
Returns the dimension of a dimension node.
Definition: apxx_texpr1_inline.hh:349
apron::texpr1::const_iterator::is_interval_polyfrac
bool is_interval_polyfrac() const
Whether the expression is a polynomial fraction and there is no rounding.
Definition: apxx_texpr1_inline.hh:468
apron::texpr1::is_zero
bool is_zero() const
Whether the expression is a single coefficient node with 0 value.
Definition: apxx_texpr1_inline.hh:212
apron::texpr1::texpr1
texpr1(ap_texpr1_t *x)
Internal use only. Shallow copy.
Definition: apxx_texpr1_inline.hh:30
apron::texpr1::const_iterator::get_ap_texpr1_t
ap_texpr1_t * get_ap_texpr1_t()
Returns a pointer to the internal APRON object stored in *this.
Definition: apxx_texpr1_inline.hh:482
apron::environment
Level 1 environment (ap_environment_t wrapper).
Definition: apxx_environment.hh:51
apron::texpr1::is_interval_cst
bool is_interval_cst() const
Whether the expression is constant (i.e., has no dimension leaves).
Definition: apxx_texpr1_inline.hh:227
apron::texpr1::extend_environment
void extend_environment(const environment &e)
Extends the environment of the expression.
Definition: apxx_texpr1_inline.hh:174
apron::texpr1::iterator::get_op
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
apron::texpr1::builder::get_ap_texpr1_t
ap_texpr1_t * get_ap_texpr1_t()
Returns a pointer to the internal APRON object stored in *this.
Definition: apxx_texpr1_inline.hh:988
apxx_linexpr1.hh
apron::interval
Interval (ap_interval_t wrapper).
Definition: apxx_interval.hh:47
apron::coeff
Coefficient (ap_coeff_t wrapper).
Definition: apxx_coeff.hh:36
apron::var
Variable name (ap_var_t wrapper).
Definition: apxx_var.hh:39
apron::texpr1::iterator::iterator
iterator(ap_texpr0_t *t, ap_environment_t *e)
Internal use only.
apron::texpr1::const_iterator::const_iterator
const_iterator(ap_texpr0_t *t, ap_environment_t *e)
Internal use only.
apron::texpr1::iterator::right
iterator right() const
Constructs an iterator to the right sub-expression argument of a binary operator node.
Definition: apxx_texpr1_inline.hh:604
apron::texpr1::builder::floor
friend builder floor(const builder &a)
Makes an AP_TEXPR_CAST expression node to AP_RTYPE_INT type rounded towards AP_RDIR_DOWN.
apron::texpr1::builder::div
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.
apron::texpr1::operator=
texpr1 & operator=(const texpr1 &x)
Makes a (deep) copy of the expression.
Definition: apxx_texpr1_inline.hh:117
apron::linexpr1
Level 1 linear expression (ap_linexpr1_t wrapper).
Definition: apxx_linexpr1.hh:39
apron::texpr1::builder::operator^
friend builder operator^(const builder &a, const builder &b)
Makes a AP_TEXPR_POW expression node using AP_RTYPE_REAL type (no rounding).
apron::texpr0::const_iterator
Iterators to traverse a constant expression tree.
Definition: apxx_texpr0.hh:211
apron::texpr1::builder::ceil
friend builder ceil(const builder &a)
Makes an AP_TEXPR_CAST expression node to AP_RTYPE_INT type rounded towards AP_RDIR_UP.
apron::texpr1::iterator::iterator
iterator(ap_texpr1_t *l)
Internal use only.
Definition: apxx_texpr1_inline.hh:505
apron::use_malloc
Inherited by most wrappers to map new and delete to malloc and free.
Definition: apxx_scalar.hh:69
apron::texpr1::builder::unary
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.
apron::texpr1::iterator::left
iterator left() const
Constructs an iterator to the only of left sub-expression of an operator node.
Definition: apxx_texpr1_inline.hh:597
apron::texpr1::builder::operator+
friend builder operator+(const builder &a)
Makes a copy of the node.
apron::texpr1::iterator::get_ap_texpr1_t
ap_texpr1_t * get_ap_texpr1_t()
Returns a pointer to the internal APRON object stored in *this.
Definition: apxx_texpr1_inline.hh:615
apron::texpr1::iterator::set_var
void set_var(const var &v) const
Sets the variable name of a dimension node.
Definition: apxx_texpr1_inline.hh:548
apron::texpr1::const_iterator::is_interval_polynomial
bool is_interval_polynomial() const
Whether the expression is polynomial and there is no rounding.
Definition: apxx_texpr1_inline.hh:463
apron::texpr1::builder::operator-
friend builder operator-(const builder &a, const builder &b)
Makes a AP_TEXPR_SUB expression node using AP_RTYPE_REAL type (no rounding).
apron::texpr1::is_scalar
bool is_scalar() const
Whether all occurring constants are scalar.
Definition: apxx_texpr1_inline.hh:247
apron::texpr1::texpr1
texpr1(const builder &c)
Makes an expression from a temporary.
apron::texpr1::builder::mod
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.
apxx_texpr1_inline.hh
apron::texpr1::size
size_t size() const
Returns the number of operator nodes in the expression tree.
Definition: apxx_texpr1_inline.hh:217
apron::texpr1::builder::trunc
friend builder trunc(const builder &a)
Makes an AP_TEXPR_CAST expression node to AP_RTYPE_INT type rounded towards AP_RDIR_ZERO.
apron::texpr1::const_iterator::get_coeff
const coeff & get_coeff() const
Returns a reference to the coefficient of a constant node.
Definition: apxx_texpr1_inline.hh:337
apron::texpr1::iterator::get_coeff
coeff & get_coeff() const
Returns a (modifiable) reference to the coefficient of a constant node.
Definition: apxx_texpr1_inline.hh:542
apron::texpr0
Level 0 arbitrary expression tree (ap_texpr0_t wrapper).
Definition: apxx_texpr0.hh:92
apron::texpr1::depth
size_t depth() const
Returns the depth of the expression tree (counting only operator nodes).
Definition: apxx_texpr1_inline.hh:207
apron::texpr1::const_iterator::get_var
const var & get_var() const
Returns a (unmodifiable) reference to the variable name of a dimension node.
Definition: apxx_texpr1_inline.hh:343
apron::texpr1::has_var
bool has_var(const var &v) const
Whether the given variable name occurs in the expression.
Definition: apxx_texpr1_inline.hh:222
apron::top
Full interval (]-oo,+oo[) or domain, to simplify initialisations and assignments.
Definition: apxx_interval.hh:27
apron::texpr0::builder
Temporary expression nodes used when constructing a texpr0.
Definition: apxx_texpr0.hh:581
apron::texpr1::builder::operator-
friend builder operator-(const builder &a)
Makes a AP_TEXPR_NEG expression node using AP_RTYPE_REAL type (no rounding).
apron::texpr1::get_texpr0
texpr0::const_iterator get_texpr0() const
Returns a constant iterator at the root of the underlying texpr0.
Definition: apxx_texpr1_inline.hh:192
apron::texpr1::builder::operator/
friend builder operator/(const builder &a, const builder &b)
Makes a AP_TEXPR_DIV expression node using AP_RTYPE_REAL type (no rounding).
apron::texpr1::const_iterator::get_environment
environment get_environment() const
Returns (a copy of) the environment associated with the expression.
Definition: apxx_texpr1_inline.hh:322
apron::texpr1::iterator::get_rdir
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
apron::texpr1::builder::is_zero
bool is_zero() const
Whether the expression is a single coefficient node with 0 value.
Definition: apxx_texpr1_inline.hh:964
apron::texpr1::const_iterator::equal
bool equal(const texpr1 &x) const
Whether two expressions are syntactically, structurally equal.
Definition: apxx_texpr1_inline.hh:426
apron::texpr1::const_iterator::print
void print(FILE *stream=stdout) const
Prints to a C stream.
Definition: apxx_texpr1_inline.hh:417
apron::texpr1::builder::cast
friend builder cast(const builder &a, ap_texpr_rtype_t rtype, ap_texpr_rdir_t rdir)
Makes an AP_TEXPR_CAST expression node.
apron::texpr1::iterator::get_rtype
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
apron::texpr1::const_iterator::right
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
apron::texpr1::iterator::child
iterator child() const
Constructs an iterator to the only or left sub-expression of an operator node.
Definition: apxx_texpr1_inline.hh:590
apron::texpr1::builder::operator=
builder & operator=(const builder &x)
Not to be used. (Temporaries are not to be re-assigned).
Definition: apxx_texpr1.hh:570
apron::texpr1::const_iterator::get_rdir
ap_texpr_rdir_t get_rdir() const
Returns the rounding direction of an operator node.
Definition: apxx_texpr1_inline.hh:367
apron::texpr1::root
const_iterator root() const
Returns a new iterator at the root of a constant expression tree.
Definition: apxx_texpr1_inline.hh:295
apron::texpr1::is_interval_polyfrac
bool is_interval_polyfrac() const
Whether the expression is a polynomial fraction and there is no rounding.
Definition: apxx_texpr1_inline.hh:242
apron::texpr1::get_environment
environment get_environment() const
Returns the environment of the expression (with incremented reference count).
Definition: apxx_texpr1_inline.hh:187
apron::texpr1::substitute
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
apron::texpr1::l
ap_texpr1_t l
Structure managed by APRON.
Definition: apxx_texpr1.hh:46
apron::frac
A fraction with native int coefficients, to simplify initialisations and assignments.
Definition: apxx_scalar.hh:41
apron::texpr1::init_from
void init_from(ap_environment_t *e, ap_texpr0_t *x)
Internal use only. Shallow copy.
Definition: apxx_texpr1_inline.hh:18
apron::texpr1::const_iterator::get_texpr0
texpr0::const_iterator get_texpr0() const
Returns a constant iterator at the root of the underlying texpr0.
Definition: apxx_texpr1_inline.hh:327
apron::texpr1::const_iterator::depth
size_t depth() const
Returns the depth of the expression tree (counting only operator nodes).
Definition: apxx_texpr1_inline.hh:432
apxx_texpr0.hh
apron::texpr1::builder::sqrt
friend builder sqrt(const builder &a, ap_texpr_rtype_t rtype, ap_texpr_rdir_t rdir)
Makes an AP_TEXPR_SQRT expression node.
apron::texpr1::const_iterator::is_zero
bool is_zero() const
Whether the expression is a single coefficient node with 0 value.
Definition: apxx_texpr1_inline.hh:437
apron::texpr1::print
void print(FILE *stream=stdout) const
Prints to a C stream.
Definition: apxx_texpr1_inline.hh:164
apron::texpr1::const_iterator
Iterators to traverse a constant expression tree.
Definition: apxx_texpr1.hh:183
apron::texpr1::builder::operator+
friend builder operator+(const builder &a, const builder &b)
Makes a AP_TEXPR_ADD expression node using AP_RTYPE_REAL type (no rounding).
apron::texpr1
Level 1 arbitrary expression tree (ap_texpr1_t wrapper).
Definition: apxx_texpr1.hh:42
apron::texpr1::builder::builder
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
apron::texpr1::const_iterator::is_interval_cst
bool is_interval_cst() const
Whether the expression is constant (i.e., has no dimension leaves).
Definition: apxx_texpr1_inline.hh:453
apron::texpr1::builder::operator%
friend builder operator%(const builder &a, const builder &b)
Makes a AP_TEXPR_MOD expression node using AP_RTYPE_REAL type (no rounding).
apron::texpr1::const_iterator::has_var
bool has_var(const var &v) const
Whether the given variable name occurs in the expression.
Definition: apxx_texpr1_inline.hh:447
apron::texpr1::builder::~builder
~builder()
Frees the memory occupied by the node, not its sub-expressions.
Definition: apxx_texpr1_inline.hh:973
apron::texpr1::builder::mul
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.
apron::texpr1::const_iterator::operator=
const_iterator & operator=(const const_iterator &i)
Resets the const_iterator at position i.
Definition: apxx_texpr1_inline.hh:377
apron::texpr1::is_interval_linear
bool is_interval_linear() const
Whether the expression is linear and there is no rounding.
Definition: apxx_texpr1_inline.hh:232
apron::texpr1::const_iterator::left
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
apron::texpr1::equal
bool equal(const texpr1 &x) const
Whether two expressions are syntactically, structurally equal.
Definition: apxx_texpr1_inline.hh:202
apron::texpr1::const_iterator::is_scalar
bool is_scalar() const
Whether all occurring constants are scalar.
Definition: apxx_texpr1_inline.hh:473
apron::texpr1::~texpr1
~texpr1()
Frees the memory occupied by the expression and decrements the reference count of the environment.
Definition: apxx_texpr1_inline.hh:107
apron::texpr1::iterator
Iterators to traverse and mutate an expression tree.
Definition: apxx_texpr1.hh:386
apron::texpr1::get_ap_texpr1_t
ap_texpr1_t * get_ap_texpr1_t()
Returns a pointer to the internal APRON object stored in *this.
Definition: apxx_texpr1_inline.hh:271
apron::texpr1::const_iterator::size
size_t size() const
Returns the number of operator nodes in the expression tree.
Definition: apxx_texpr1_inline.hh:442
apron::texpr1::builder::add
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.
apron::texpr1::builder::operator*
friend builder operator*(const builder &a, const builder &b)
Makes a AP_TEXPR_MUL expression node using AP_RTYPE_REAL type (no rounding).
apron::texpr1::operator<<
friend std::ostream & operator<<(std::ostream &os, const texpr1 &s)
Printing.
apron::texpr1::is_interval_polynomial
bool is_interval_polynomial() const
Whether the expression is polynomial and there is no rounding.
Definition: apxx_texpr1_inline.hh:237
apron::texpr1::const_iterator::l
ap_texpr1_t l
Definition: apxx_texpr1.hh:187
apron::tcons1
Level 1 arbitrary constraint (ap_tcons1_t wrapper).
Definition: apxx_tcons1.hh:39
apron::scalar
Scalar (ap_scalar_t wrapper).
Definition: apxx_scalar.hh:89
apron::texpr1::iterator::get_dim
ap_dim_t & get_dim() const
Returns a (modifiable) reference to the dimension of a dimension node.
Definition: apxx_texpr1_inline.hh:556
apron::texpr1::builder::l
ap_texpr1_t l
Definition: apxx_texpr1.hh:567
apron::texpr1::const_iterator::get_rtype
ap_texpr_rtype_t get_rtype() const
Returns the destination type of an operator node.
Definition: apxx_texpr1_inline.hh:361
apron::texpr1::builder::neg
friend builder neg(const builder &a, ap_texpr_rtype_t rtype, ap_texpr_rdir_t rdir)
Makes an AP_TEXPR_NEG expression node.
apron::texpr1::const_iterator::get_op
ap_texpr_op_t get_op() const
Returns the operator kind of an operator node.
Definition: apxx_texpr1_inline.hh:355
apron
Definition: apxx_abstract0.hh:27
apron::texpr1::const_iterator::is_interval_linear
bool is_interval_linear() const
Whether the expression is linear and there is no rounding.
Definition: apxx_texpr1_inline.hh:458
apron::texpr1::builder::pow
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.
apron::texpr1::const_iterator::get_discr
ap_texpr_discr_t get_discr() const
Returns the node kind.
Definition: apxx_texpr1_inline.hh:332
apron::texpr1::builder
Temporary expression nodes used when constructing a texpr1.
Definition: apxx_texpr1.hh:561
apron::texpr1::builder::binary
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.
apron::texpr1::const_iterator::child
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
apron::texpr1::iterator::get_texpr0
texpr0::iterator get_texpr0() const
Returns an iterator at the root of the underlying texpr0.
Definition: apxx_texpr1_inline.hh:536
apron::texpr1::iterator::operator=
iterator & operator=(const builder &x)
Replace the sub-expression at the iterator position with a (deep) copy of c.
apron::texpr1::builder::sub
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.
apron::texpr0::iterator
Iterators to traverse and mutate an expression tree.
Definition: apxx_texpr0.hh:413
apron::texpr1::builder::init_from
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