APRONXX  0.9.12
/home/mine/apron/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 
128  /* destructor */
129  /* ========== */
130 
133 
135  ~texpr1();
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 
178 
184 
185  protected:
186 
187  ap_texpr1_t l;
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);
210  const_iterator(const const_iterator& i);
211 
214 
215  /* access */
216  /* ====== */
217 
220 
226 
232  ap_texpr_discr_t get_discr() const;
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 
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 
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;
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 
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;
399  public:
400 
401  /* constructors */
402  /* ============ */
403 
406 
408  iterator(texpr1& e);
409 
411  iterator(const iterator& i);
412 
414 
415 
416  /* substitution */
417  /* ============ */
421 
426  iterator& operator= (const builder& x);
428 #if 0
429  template<class T> iterator& operator= (const T& c);
431 #endif
432 
434 
435 
436  /* access */
437  /* ====== */
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 
489 
490  /* traversal */
491  /* ========= */
492 
495 
498 
503  iterator child() const;
504 
510  iterator left() const;
517  iterator right() const;
518 
520 
521 
522  /* C-level compatibility */
523  /* ===================== */
527 
529  ap_texpr1_t* get_ap_texpr1_t();
530 
532  const ap_texpr1_t* get_ap_texpr1_t() const;
533 
535 
536  };
538 
540  const_iterator root() const;
541 
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  /* ============ */
588 
590  builder(const builder& x);
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);
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);
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);
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);
666  builder(ap_texpr_op_t op, const builder& argA, const builder& argB, ap_texpr_rtype_t rtype, ap_texpr_rdir_t rdir);
667 
670 
671  /* destructor */
672  /* ========== */
673 
676 
678  ~builder();
679 
681 
682 
683  /* tests */
684  /* ===== */
685 
689 
691  bool is_zero() const;
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 
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 
849  void extend_environment(const environment& e);
850 
852 
853 
854  /* access */
855  /* ====== */
856 
859 
862 
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;
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 
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 }
937 #endif /* __APXX_TEXPR1_HH */
texpr1(const texpr1 &x, const var &src, const texpr1 &dst)
Makes a (deep) copy of x and substitutes every occurrence of the src variable name with a fresh copy ...
Definition: apxx_texpr1.hh:93
bool is_interval_linear() const
Whether the expression is linear and there is no rounding.
Definition: apxx_texpr1.hh:233
Iterators to traverse and mutate an expression tree.
Definition: apxx_texpr0.hh:413
ap_texpr1_t * get_ap_texpr1_t()
Returns a pointer to the internal APRON object stored in *this.
Definition: apxx_texpr1.hh:616
builder(ap_texpr1_t *x)
Internal use only: makes a shallow copy, copying only the root node and referencing the environment.
Definition: apxx_texpr1.hh:654
const coeff & get_coeff() const
Returns a reference to the coefficient of a constant node.
Definition: apxx_texpr1.hh:338
iterator & operator=(const builder &x)
Replace the sub-expression at the iterator position with a (deep) copy of c.
Definition: apxx_texpr1.hh:524
bool equal(const texpr1 &x) const
Whether two expressions are syntactically, structurally equal.
Definition: apxx_texpr1.hh:203
iterator child() const
Constructs an iterator to the only or left sub-expression of an operator node.
Definition: apxx_texpr1.hh:591
Definition: apxx_abstract0.hh:27
const_iterator right() const
Constructs a const_iterator to the right sub-expression argument of a binary operator node.
Definition: apxx_texpr1.hh:398
size_t depth() const
Returns the depth of the expression tree (counting only operator nodes).
Definition: apxx_texpr1.hh:433
texpr0::iterator get_texpr0() const
Returns an iterator at the root of the underlying texpr0.
Definition: apxx_texpr1.hh:537
ap_texpr1_t l
Structure managed by APRON.
Definition: apxx_texpr1.hh:46
Variable name (ap_var_t wrapper).
Definition: apxx_var.hh:39
friend builder operator *(const builder &a, const builder &b)
Makes a AP_TEXPR_MUL expression node using AP_RTYPE_REAL type (no rounding).
Definition: apxx_texpr1.hh:941
texpr1(ap_texpr1_t *x)
Internal use only. Shallow copy.
Definition: apxx_texpr1.hh:31
ap_texpr_op_t get_op() const
Returns the operator kind of an operator node.
Definition: apxx_texpr1.hh:356
bool is_scalar() const
Whether all occurring constants are scalar.
Definition: apxx_texpr1.hh:474
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.
Definition: apxx_texpr1.hh:865
bool has_var(const var &v) const
Whether the given variable name occurs in the expression.
Definition: apxx_texpr1.hh:448
ap_texpr_rdir_t get_rdir() const
Returns the rounding direction of an operator node.
Definition: apxx_texpr1.hh:368
texpr0::const_iterator get_texpr0() const
Returns a constant iterator at the root of the underlying texpr0.
Definition: apxx_texpr1.hh:328
iterator left() const
Constructs an iterator to the only of left sub-expression of an operator node.
Definition: apxx_texpr1.hh:598
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.
Definition: apxx_texpr1.hh:872
ap_texpr_op_t & get_op() const
Returns a (modifiable) reference to the operator kind of an operator node.
Definition: apxx_texpr1.hh:563
size_t size() const
Returns the number of operator nodes in the expression tree.
Definition: apxx_texpr1.hh:443
friend builder operator-(const builder &a)
Makes a AP_TEXPR_NEG expression node using AP_RTYPE_REAL type (no rounding).
Definition: apxx_texpr1.hh:926
size_t size() const
Returns the number of operator nodes in the expression tree.
Definition: apxx_texpr1.hh:218
friend builder operator^(const builder &a, const builder &b)
Makes a AP_TEXPR_POW expression node using AP_RTYPE_REAL type (no rounding).
Definition: apxx_texpr1.hh:956
const_iterator & operator=(const const_iterator &i)
Resets the const_iterator at position i.
Definition: apxx_texpr1.hh:378
iterator right() const
Constructs an iterator to the right sub-expression argument of a binary operator node.
Definition: apxx_texpr1.hh:605
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.
Definition: apxx_texpr1.hh:879
friend builder operator+(const builder &a)
Makes a copy of the node.
Definition: apxx_texpr1.hh:921
bool is_interval_linear() const
Whether the expression is linear and there is no rounding.
Definition: apxx_texpr1.hh:459
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.
Definition: apxx_texpr1.hh:858
friend builder neg(const builder &a, ap_texpr_rtype_t rtype, ap_texpr_rdir_t rdir)
Makes an AP_TEXPR_NEG expression node.
Definition: apxx_texpr1.hh:886
friend std::ostream & operator<<(std::ostream &os, const const_iterator &s)
Printing.
Definition: apxx_texpr1.hh:411
Temporary expression nodes used when constructing a texpr1.
Definition: apxx_texpr1.hh:561
friend builder trunc(const builder &a)
Makes an AP_TEXPR_CAST expression node to AP_RTYPE_INT type rounded towards AP_RDIR_ZERO.
Definition: apxx_texpr1.hh:909
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.
Definition: apxx_texpr1.hh:836
const_iterator left() const
Constructs a const_iterator to the only of left sub-expression of an operator node.
Definition: apxx_texpr1.hh:391
texpr0::const_iterator get_texpr0() const
Returns a constant iterator at the root of the underlying texpr0.
Definition: apxx_texpr1.hh:193
void set_var(const var &v) const
Sets the variable name of a dimension node.
Definition: apxx_texpr1.hh:549
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.
Definition: apxx_texpr1.hh:844
bool is_zero() const
Whether the expression is a single coefficient node with 0 value.
Definition: apxx_texpr1.hh:438
ap_texpr_rtype_t get_rtype() const
Returns the destination type of an operator node.
Definition: apxx_texpr1.hh:362
environment get_environment() const
Returns the environment of the expression (with incremented reference count).
Definition: apxx_texpr1.hh:188
void extend_environment(const environment &e)
Extends the environment of the expression.
Definition: apxx_texpr1.hh:175
Iterators to traverse a constant expression tree.
Definition: apxx_texpr0.hh:211
Level 1 environment (ap_environment_t wrapper).
Definition: apxx_environment.hh:51
const_iterator child() const
Constructs a const_iterator to the only or left sub-expression of an operator node.
Definition: apxx_texpr1.hh:384
ap_texpr1_t * get_ap_texpr1_t()
Returns a pointer to the internal APRON object stored in *this.
Definition: apxx_texpr1.hh:989
void print(FILE *stream=stdout) const
Prints to a C stream.
Definition: apxx_texpr1.hh:165
builder & operator=(const builder &x)
Not to be used. (Temporaries are not to be re-assigned).
Definition: apxx_texpr1.hh:570
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.hh:631
ap_texpr1_t l
Definition: apxx_texpr1.hh:187
const_iterator(ap_texpr1_t *l)
Internal use only.
Definition: apxx_texpr1.hh:307
~builder()
Frees the memory occupied by the node, not its sub-expressions.
Definition: apxx_texpr1.hh:974
friend builder operator%(const builder &a, const builder &b)
Makes a AP_TEXPR_MOD expression node using AP_RTYPE_REAL type (no rounding).
Definition: apxx_texpr1.hh:951
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.
Definition: apxx_texpr1.hh:829
size_t depth() const
Returns the depth of the expression tree (counting only operator nodes).
Definition: apxx_texpr1.hh:208
bool is_zero() const
Whether the expression is a single coefficient node with 0 value.
Definition: apxx_texpr1.hh:213
Level 1 linear expression (ap_linexpr1_t wrapper).
Definition: apxx_linexpr1.hh:39
Level 0 arbitrary expression tree (ap_texpr0_t wrapper).
Definition: apxx_texpr0.hh:92
friend builder floor(const builder &a)
Makes an AP_TEXPR_CAST expression node to AP_RTYPE_INT type rounded towards AP_RDIR_DOWN.
Definition: apxx_texpr1.hh:899
Coefficient (ap_coeff_t wrapper).
Definition: apxx_coeff.hh:36
ap_texpr1_t * get_ap_texpr1_t()
Returns a pointer to the internal APRON object stored in *this.
Definition: apxx_texpr1.hh:483
ap_texpr1_t * get_ap_texpr1_t()
Returns a pointer to the internal APRON object stored in *this.
Definition: apxx_texpr1.hh:272
Full interval (]-oo,+oo[) or domain, to simplify initialisations and assignments.
Definition: apxx_interval.hh:27
bool is_interval_cst() const
Whether the expression is constant (i.e., has no dimension leaves).
Definition: apxx_texpr1.hh:228
ap_texpr_rtype_t & get_rtype() const
Returns a (modifiable) reference to the destination type of an operator node.
Definition: apxx_texpr1.hh:569
ap_texpr_discr_t get_discr() const
Returns the node kind.
Definition: apxx_texpr1.hh:333
bool is_interval_polynomial() const
Whether the expression is polynomial and there is no rounding.
Definition: apxx_texpr1.hh:464
const_iterator root() const
Returns a new iterator at the root of a constant expression tree.
Definition: apxx_texpr1.hh:296
Interval (ap_interval_t wrapper).
Definition: apxx_interval.hh:47
Inherited by most wrappers to map new and delete to malloc and free.
Definition: apxx_scalar.hh:69
bool is_interval_polyfrac() const
Whether the expression is a polynomial fraction and there is no rounding.
Definition: apxx_texpr1.hh:243
friend builder operator/(const builder &a, const builder &b)
Makes a AP_TEXPR_DIV expression node using AP_RTYPE_REAL type (no rounding).
Definition: apxx_texpr1.hh:946
void substitute(const var &src, const texpr1 &dst)
Substitutes each occurrence of src with (a fresh copy of) dst.
Definition: apxx_texpr1.hh:257
void init_from(ap_environment_t *e, ap_texpr0_t *x)
Internal use only. Shallow copy.
Definition: apxx_texpr1.hh:19
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.
Definition: apxx_texpr1.hh:851
bool is_interval_polynomial() const
Whether the expression is polynomial and there is no rounding.
Definition: apxx_texpr1.hh:238
friend builder sqrt(const builder &a, ap_texpr_rtype_t rtype, ap_texpr_rdir_t rdir)
Makes an AP_TEXPR_SQRT expression node.
Definition: apxx_texpr1.hh:914
A fraction with native int coefficients, to simplify initialisations and assignments.
Definition: apxx_scalar.hh:41
friend builder cast(const builder &a, ap_texpr_rtype_t rtype, ap_texpr_rdir_t rdir)
Makes an AP_TEXPR_CAST expression node.
Definition: apxx_texpr1.hh:893
void print(FILE *stream=stdout) const
Prints to a C stream.
Definition: apxx_texpr1.hh:418
friend builder ceil(const builder &a)
Makes an AP_TEXPR_CAST expression node to AP_RTYPE_INT type rounded towards AP_RDIR_UP.
Definition: apxx_texpr1.hh:904
bool is_interval_polyfrac() const
Whether the expression is a polynomial fraction and there is no rounding.
Definition: apxx_texpr1.hh:469
coeff & get_coeff() const
Returns a (modifiable) reference to the coefficient of a constant node.
Definition: apxx_texpr1.hh:543
bool has_var(const var &v) const
Whether the given variable name occurs in the expression.
Definition: apxx_texpr1.hh:223
texpr1 & operator=(const texpr1 &x)
Makes a (deep) copy of the expression.
Definition: apxx_texpr1.hh:118
ap_dim_t get_dim() const
Returns the dimension of a dimension node.
Definition: apxx_texpr1.hh:350
iterator(ap_texpr1_t *l)
Internal use only.
Definition: apxx_texpr1.hh:506
~texpr1()
Frees the memory occupied by the expression and decrements the reference count of the environment.
Definition: apxx_texpr1.hh:108
Iterators to traverse and mutate an expression tree.
Definition: apxx_texpr1.hh:386
Iterators to traverse a constant expression tree.
Definition: apxx_texpr1.hh:183
Level 1 arbitrary expression tree (ap_texpr1_t wrapper).
Definition: apxx_texpr1.hh:42
environment get_environment() const
Returns (a copy of) the environment associated with the expression.
Definition: apxx_texpr1.hh:323
bool is_interval_cst() const
Whether the expression is constant (i.e., has no dimension leaves).
Definition: apxx_texpr1.hh:454
Level 1 arbitrary constraint (ap_tcons1_t wrapper).
Definition: apxx_tcons1.hh:39
bool is_scalar() const
Whether all occurring constants are scalar.
Definition: apxx_texpr1.hh:248
bool is_zero() const
Whether the expression is a single coefficient node with 0 value.
Definition: apxx_texpr1.hh:965
friend std::ostream & operator<<(std::ostream &os, const texpr1 &s)
Printing.
Definition: apxx_texpr1.hh:160
Temporary expression nodes used when constructing a texpr0.
Definition: apxx_texpr0.hh:581
const var & get_var() const
Returns a (unmodifiable) reference to the variable name of a dimension node.
Definition: apxx_texpr1.hh:344
ap_texpr1_t l
Definition: apxx_texpr1.hh:567
bool equal(const texpr1 &x) const
Whether two expressions are syntactically, structurally equal.
Definition: apxx_texpr1.hh:427
texpr1 & operator=(const const_iterator &x)
Makes a (deep) copy of the expression.
Definition: apxx_texpr1.hh:136
ap_dim_t & get_dim() const
Returns a (modifiable) reference to the dimension of a dimension node.
Definition: apxx_texpr1.hh:557
Scalar (ap_scalar_t wrapper).
Definition: apxx_scalar.hh:89
ap_texpr_rdir_t & get_rdir() const
Returns a (modifiable) reference to the rounding direction of an operator node.
Definition: apxx_texpr1.hh:575