19 inline dim::dim(ap_dim_t d) : d(d)
22 inline dim::dim(
const environment& e,
const var& v)
24 ap_dim_t d = ap_environment_dim_of_var(const_cast<ap_environment_t*>(e.get_ap_environment_t()),
27 throw std::invalid_argument(
"apron::dim::dim(const environment&, const var&) invalid variable name");
34 return ap_texpr_is_unop(op);
39 return ap_texpr_is_binop(op);
57 {
init_from(ap_texpr0_copy(const_cast<ap_texpr0_t*>(x.get_ap_texpr0_t()))); }
60 {
init_from(ap_texpr0_copy(const_cast<ap_texpr0_t*>(x.get_ap_texpr0_t()))); }
63 {
init_from(ap_texpr0_copy(const_cast<ap_texpr0_t*>(&x.l))); }
69 {
init_from(ap_texpr0_from_linexpr0(const_cast<ap_linexpr0_t*>(l.get_ap_linexpr0_t()))); }
77 init_from(ap_texpr0_add_dimensions(const_cast<ap_texpr0_t*>(&x.l),
78 const_cast<ap_dimchange_t*>(d.get_ap_dimchange_t())));
80 init_from(ap_texpr0_remove_dimensions(const_cast<ap_texpr0_t*>(&x.l),
81 const_cast<ap_dimchange_t*>(d.get_ap_dimchange_t())));
86 init_from(ap_texpr0_permute_dimensions(const_cast<ap_texpr0_t*>(&x.l),
87 const_cast<ap_dimperm_t*>(d.get_ap_dimperm_t())));
92 init_from(ap_texpr0_substitute(const_cast<ap_texpr0_t*>(&x.l),
93 dim, const_cast<ap_texpr0_t*>(&dst.l)));
117 ap_texpr0_t* c = ap_texpr0_copy(const_cast<ap_texpr0_t*>(x.get_ap_texpr0_t()));
126 ap_texpr0_t* c = ap_texpr0_copy(const_cast<ap_texpr0_t*>(&x.l));
135 ap_texpr0_t* c = ap_texpr0_copy(const_cast<ap_texpr0_t*>(x.get_ap_texpr0_t()));
144 init_from(ap_texpr0_from_linexpr0(const_cast<ap_linexpr0_t*>(x.get_ap_linexpr0_t())));
154 return os << s.root();
157 inline void texpr0::print(
char** name_of_dim, FILE* stream)
const 232 ap_texpr0_substitute_with(&l,dim,const_cast<ap_texpr0_t*>(&dst.l));
236 inline interval texpr0::eval(manager& m,
const abstract0& a, ap_scalar_discr_t discr,
240 if (!pexact) pexact = &b;
242 ap_eval_texpr0(m.get_ap_manager_t(),
243 const_cast<ap_abstract0_t*
>(a.get_ap_abstract0_t()),
244 const_cast<ap_texpr0_t*>(l),
248 inline linexpr0 texpr0::intlinearize(manager& m,
const abstract0& a, ap_scalar_discr_t discr,
249 bool quasilinearize,
bool* pexact)
const 252 if (!pexact) pexact = &b;
254 ap_intlinearize_texpr0(m.get_ap_manager_t(),
255 const_cast<ap_abstract0_t*
>(a.get_ap_abstract0_t()),
256 const_cast<ap_texpr0_t*>(l),
257 pexact, discr, quasilinearize);
263 return ap_texpr0_hash(const_cast<ap_texpr0_t*>(&l));
274 ap_texpr0_add_dimensions_with(&l, const_cast<ap_dimchange_t*>(d.get_ap_dimchange_t()));
280 ap_texpr0_remove_dimensions_with(&l, const_cast<ap_dimchange_t*>(d.get_ap_dimchange_t()));
285 ap_texpr0_permute_dimensions_with(&l, const_cast<ap_dimperm_t*>(d.get_ap_dimperm_t()));
317 return const_iterator(const_cast<ap_texpr0_t*>(&l));
325 :
l(const_cast<ap_texpr0_t*>(e.get_ap_texpr0_t()))
342 if (l->discr!=AP_TEXPR_CST)
throw(bad_discriminant(
"apron::texpr0::const_iterator::get_coeff()"));
343 return reinterpret_cast<coeff&
>(l->val.cst);
348 if (l->discr!=AP_TEXPR_DIM)
throw(bad_discriminant(
"apron::texpr0::const_iterator::get_dim()"));
354 if (l->discr!=AP_TEXPR_NODE)
throw(bad_discriminant(
"apron::texpr0::const_iterator::get_op()"));
355 return l->val.node->op;
360 if (l->discr!=AP_TEXPR_NODE)
throw(bad_discriminant(
"apron::texpr0::const_iterator::get_type()"));
361 return l->val.node->type;
366 if (l->discr!=AP_TEXPR_NODE)
throw(bad_discriminant(
"apron::texpr0::const_iterator::get_dir()"));
367 return l->val.node->dir;
382 if (l->discr!=AP_TEXPR_NODE)
throw(bad_discriminant(
"apron::texpr0::const_iterator::child()"));
383 if (!l->val.node->exprA)
throw(std::out_of_range(
"apron::texpr0::const_iterator::child()"));
384 return l->val.node->exprA;
389 if (l->discr!=AP_TEXPR_NODE)
throw(bad_discriminant(
"apron::texpr0::const_iterator::left()"));
390 if (!l->val.node->exprA)
throw(std::out_of_range(
"apron::texpr0::const_iterator::left()"));
391 return l->val.node->exprA;
396 if (l->discr!=AP_TEXPR_NODE)
throw(bad_discriminant(
"apron::texpr0::const_iterator::right()"));
397 if (!l->val.node->exprB)
throw(std::out_of_range(
"apron::texpr0::const_iterator::right()"));
398 return l->val.node->exprB;
406 std::vector<std::string>* names);
408 inline std::ostream&
operator<< (std::ostream& os,
const texpr0::const_iterator& s)
416 ap_texpr0_fprint(stream, const_cast<ap_texpr0_t*>(l), name_of_dim);
425 return l->discr==AP_TEXPR_CST && ap_coeff_zero(&const_cast<ap_texpr0_t*>(l)->val.cst);
430 return ap_texpr0_equal(const_cast<ap_texpr0_t*>(l),
431 const_cast<ap_texpr0_t*>(x.get_ap_texpr0_t()));
436 return ap_texpr0_depth(const_cast<ap_texpr0_t*>(l));
441 return ap_texpr0_size(const_cast<ap_texpr0_t*>(l));
446 return ap_texpr0_max_dim(const_cast<ap_texpr0_t*>(l));
451 return ap_texpr0_has_dim(const_cast<ap_texpr0_t*>(l), d);
456 ap_dim_t* d = ap_texpr0_dimlist(const_cast<ap_texpr0_t*>(l));
458 for (i=0; d[i]!=AP_DIM_MAX; i++) ;
459 std::vector<ap_dim_t> r = std::vector<ap_dim_t>(i,0);
460 for (i=0; d[i]!=AP_DIM_MAX; i++) r[i] = d[i];
467 return ap_texpr0_is_interval_cst(const_cast<ap_texpr0_t*>(l));
472 return ap_texpr0_is_interval_linear(const_cast<ap_texpr0_t*>(l));
477 return ap_texpr0_is_interval_polynomial(const_cast<ap_texpr0_t*>(l));
482 return ap_texpr0_is_interval_polyfrac(const_cast<ap_texpr0_t*>(l));
487 return ap_texpr0_is_scalar(const_cast<ap_texpr0_t*>(l));
510 return iterator(*
this);
514 : texpr0::const_iterator(l)
519 : texpr0::const_iterator(e.get_ap_texpr0_t())
523 : texpr0::const_iterator(i)
533 ap_texpr0_t* cc = ap_texpr0_copy(const_cast<ap_texpr0_t*>(c.get_ap_texpr0_t()));
546 if (l->discr!=AP_TEXPR_CST)
throw(bad_discriminant(
"apron::texpr0::iterator::get_coeff()"));
547 return reinterpret_cast<coeff&
>(l->val.cst);
552 if (l->discr!=AP_TEXPR_DIM)
throw(bad_discriminant(
"apron::texpr0::iterator::get_dim()"));
558 if (l->discr!=AP_TEXPR_NODE)
throw(bad_discriminant(
"apron::texpr0::iterator::get_op()"));
559 return l->val.node->op;
564 if (l->discr!=AP_TEXPR_NODE)
throw(bad_discriminant(
"apron::texpr0::iterator::get_type()"));
565 return l->val.node->type;
570 if (l->discr!=AP_TEXPR_NODE)
throw(bad_discriminant(
"apron::texpr0::iterator::get_dir()"));
571 return l->val.node->dir;
586 if (l->discr!=AP_TEXPR_NODE)
throw(bad_discriminant(
"apron::texpr0::iterator::child()"));
587 if (!l->val.node->exprA)
throw(std::out_of_range(
"apron::texpr0::iterator::child()"));
588 return l->val.node->exprA;
593 if (l->discr!=AP_TEXPR_NODE)
throw(bad_discriminant(
"apron::texpr0::iterator::left()"));
594 if (!l->val.node->exprA)
throw(std::out_of_range(
"apron::texpr0::iterator::left()"));
595 return l->val.node->exprA;
600 if (l->discr!=AP_TEXPR_NODE)
throw(bad_discriminant(
"apron::texpr0::iterator::right()"));
601 if (!l->val.node->exprB)
throw(std::out_of_range(
"apron::texpr0::iterator::right()"));
602 return l->val.node->exprB;
629 case AP_TEXPR_DIM: l = ap_texpr0_dim(x->val.dim);
break;
630 case AP_TEXPR_CST: l = ap_texpr0_cst(const_cast<ap_coeff_t*>(&x->val.cst));
break;
632 l = ap_texpr0_node(x->val.node->op,
633 x->val.node->type, x->val.node->dir,
634 x->val.node->exprA, x->val.node->exprB);
636 default:
throw std::invalid_argument(
"apron::texpr0::builder::init_from(ap_texpr0_t*) invalid discriminant");
652 init_from(const_cast<ap_texpr0_t*>(x.get_ap_texpr0_t()));
657 init_from(const_cast<ap_texpr0_t*>(x.get_ap_texpr0_t()));
661 :
l(ap_texpr0_cst(const_cast<ap_coeff_t*>(x.get_ap_coeff_t())))
665 :
l(ap_texpr0_cst_scalar(const_cast<ap_scalar_t*>(x.get_ap_scalar_t())))
669 :
l(ap_texpr0_cst_scalar_mpq(const_cast<mpq_class&>(x).get_mpq_t()))
673 :
l(ap_texpr0_cst_scalar_mpfr(x))
677 :
l(ap_texpr0_cst_scalar_int(x))
681 :
l(ap_texpr0_cst_scalar_int(x))
685 :
l(ap_texpr0_cst_scalar_double(x))
689 :
l(ap_texpr0_cst_scalar_frac(x.num, x.den))
693 :
l(ap_texpr0_cst_interval(const_cast<ap_interval_t*>(x.get_ap_interval_t())))
697 :
l(ap_texpr0_cst_interval_scalar(const_cast<ap_scalar_t*>(inf.get_ap_scalar_t()),
698 const_cast<ap_scalar_t*>(sup.get_ap_scalar_t())))
702 :
l(ap_texpr0_cst_interval_mpq(const_cast<mpq_class&>(inf).get_mpq_t(),
703 const_cast<mpq_class&>(sup).get_mpq_t()))
707 :
l(ap_texpr0_cst_interval_mpfr(inf,sup))
711 :
l(ap_texpr0_cst_interval_int(inf, sup))
715 :
l(ap_texpr0_cst_interval_int(inf, sup))
719 :
l(ap_texpr0_cst_interval_double(inf, sup))
723 :
l(ap_texpr0_cst_interval_frac(inf.num, inf.den, sup.num, sup.den))
727 :
l(ap_texpr0_cst_interval_top())
731 :
l(ap_texpr0_dim(d.d))
736 if (!ap_texpr_is_unop(op))
737 throw std::invalid_argument(
"apron::texpr0::builder::builder(ap_texpr_op_t, const builder&, ap_texpr_rtype_t, ap_texpr_rdir_t) not a unary operator");
738 l = ap_texpr0_unop(op,
739 const_cast<ap_texpr0_t*>(argA.l),
745 if (!ap_texpr_is_binop(op))
746 throw std::invalid_argument(
"apron::texpr0::builder::builder(ap_texpr_op_t, const builder&, const builder&, ap_texpr_rtype_t, ap_texpr_rdir_t) not a binary operator");
747 l = ap_texpr0_binop(op,
748 const_cast<ap_texpr0_t*>(argA.l),
749 const_cast<ap_texpr0_t*>(argB.l),
756 inline texpr0::builder
unary(ap_texpr_op_t op,
const texpr0::builder& a,
757 ap_texpr_rtype_t rtype = AP_RTYPE_REAL,
758 ap_texpr_rdir_t rdir = AP_RDIR_NEAREST)
760 return texpr0::builder(op, a, rtype, rdir);
763 inline texpr0::builder
binary(ap_texpr_op_t op,
const texpr0::builder& a,
const texpr0::builder& b,
764 ap_texpr_rtype_t rtype = AP_RTYPE_REAL,
765 ap_texpr_rdir_t rdir = AP_RDIR_NEAREST)
767 return texpr0::builder(op, a, b, rtype, rdir);
771 inline texpr0::builder
add(
const texpr0::builder& a,
const texpr0::builder& b,
772 ap_texpr_rtype_t rtype = AP_RTYPE_REAL,
773 ap_texpr_rdir_t rdir = AP_RDIR_NEAREST)
775 return texpr0::builder(AP_TEXPR_ADD, a, b, rtype, rdir);
778 inline texpr0::builder
sub(
const texpr0::builder& a,
const texpr0::builder& b,
779 ap_texpr_rtype_t rtype = AP_RTYPE_REAL,
780 ap_texpr_rdir_t rdir = AP_RDIR_NEAREST)
782 return texpr0::builder(AP_TEXPR_SUB, a, b, rtype, rdir);
785 inline texpr0::builder
mul(
const texpr0::builder& a,
const texpr0::builder& b,
786 ap_texpr_rtype_t rtype = AP_RTYPE_REAL,
787 ap_texpr_rdir_t rdir = AP_RDIR_NEAREST)
789 return texpr0::builder(AP_TEXPR_MUL, a, b, rtype, rdir);
792 inline texpr0::builder
div(
const texpr0::builder& a,
const texpr0::builder& b,
793 ap_texpr_rtype_t rtype = AP_RTYPE_REAL,
794 ap_texpr_rdir_t rdir = AP_RDIR_NEAREST)
796 return texpr0::builder(AP_TEXPR_DIV, a, b, rtype, rdir);
799 inline texpr0::builder
mod(
const texpr0::builder& a,
const texpr0::builder& b,
800 ap_texpr_rtype_t rtype = AP_RTYPE_REAL,
801 ap_texpr_rdir_t rdir = AP_RDIR_NEAREST)
803 return texpr0::builder(AP_TEXPR_MOD, a, b, rtype, rdir);
806 inline texpr0::builder
pow(
const texpr0::builder& a,
const texpr0::builder& b,
807 ap_texpr_rtype_t rtype = AP_RTYPE_REAL,
808 ap_texpr_rdir_t rdir = AP_RDIR_NEAREST)
810 return texpr0::builder(AP_TEXPR_POW, a, b, rtype, rdir);
813 inline texpr0::builder
neg(
const texpr0::builder& a,
814 ap_texpr_rtype_t rtype = AP_RTYPE_REAL,
815 ap_texpr_rdir_t rdir = AP_RDIR_NEAREST)
817 return texpr0::builder(AP_TEXPR_NEG, a, rtype, rdir);
820 inline texpr0::builder
cast(
const texpr0::builder& a, ap_texpr_rtype_t rtype,
821 ap_texpr_rdir_t rdir = AP_RDIR_NEAREST)
823 return texpr0::builder(AP_TEXPR_CAST, a, rtype, rdir);
826 inline texpr0::builder
floor(
const texpr0::builder& a)
828 return texpr0::builder(AP_TEXPR_CAST, a, AP_RTYPE_INT, AP_RDIR_DOWN);
831 inline texpr0::builder
ceil(
const texpr0::builder& a)
833 return texpr0::builder(AP_TEXPR_CAST, a, AP_RTYPE_INT, AP_RDIR_UP);
836 inline texpr0::builder
trunc(
const texpr0::builder& a)
838 return texpr0::builder(AP_TEXPR_CAST, a, AP_RTYPE_INT, AP_RDIR_ZERO);
841 inline texpr0::builder
sqrt(
const texpr0::builder& a,
842 ap_texpr_rtype_t rtype = AP_RTYPE_REAL,
843 ap_texpr_rdir_t rdir = AP_RDIR_NEAREST)
845 return texpr0::builder(AP_TEXPR_SQRT, a, rtype, rdir);
848 inline texpr0::builder
operator+(
const texpr0::builder& a)
853 inline texpr0::builder
operator-(
const texpr0::builder& a)
858 inline texpr0::builder
operator+(
const texpr0::builder& a,
const texpr0::builder& b)
863 inline texpr0::builder
operator-(
const texpr0::builder& a,
const texpr0::builder& b)
868 inline texpr0::builder
operator*(
const texpr0::builder& a,
const texpr0::builder& b)
873 inline texpr0::builder
operator/(
const texpr0::builder& a,
const texpr0::builder& b)
878 inline texpr0::builder
operator%(
const texpr0::builder& a,
const texpr0::builder& b)
883 inline texpr0::builder
operator^(
const texpr0::builder& a,
const texpr0::builder& b)
895 case AP_TEXPR_CST: ap_coeff_clear(&l->val.cst);
break;
896 case AP_TEXPR_DIM:
break;
897 case AP_TEXPR_NODE: free(l->val.node);
break;
898 default: assert(
false);
905 return l->discr==AP_TEXPR_CST && ap_coeff_zero(&const_cast<ap_texpr0_t*>(l)->val.cst);
void remove_dimensions(const dimchange &d)
Removes some dimensions, shifting dimension if needed.
Definition: apxx_texpr0.hh:279
const_iterator & operator=(const const_iterator &i)
Resets the const_iterator at position i.
Definition: apxx_texpr0.hh:375
bool is_interval_linear() const
Whether the expression is linear and there is no rounding.
Definition: apxx_texpr0.hh:207
void permute_dimensions(const dimperm &d)
Permutes dimensions.
Definition: apxx_texpr0.hh:284
bool is_binop(ap_texpr_op_t op)
Whether the operator is binary.
Definition: apxx_texpr0.hh:38
bool is_zero() const
Whether the expression is a single coefficient node with 0 value.
Definition: apxx_texpr0.hh:424
long hash() const
Returns a hash code.
Definition: apxx_texpr0.hh:262
const coeff & get_coeff() const
Returns a reference to the coefficient of a constant node.
Definition: apxx_texpr0.hh:341
ap_texpr0_t * l
Definition: apxx_texpr0.hh:215
bool is_interval_polyfrac() const
Whether the expression is a polynomial fraction and there is no rounding.
Definition: apxx_texpr0.hh:217
~builder()
Frees the memory occupied by the node, not its sub-expressions.
Definition: apxx_texpr0.hh:893
coeff & get_coeff() const
Returns a (modifiable) reference to the coefficient of a constant node.
Definition: apxx_texpr0.hh:545
bool is_zero() const
Whether the expression is a single coefficient node with 0 value.
Definition: apxx_texpr0.hh:904
bool is_interval_cst() const
Whether the expression is constant (i.e., has no dimension leaves).
Definition: apxx_texpr0.hh:466
ap_dim_t get_dim() const
Returns the dimension of a dimension node.
Definition: apxx_texpr0.hh:347
bool is_zero() const
Whether the expression is a single coefficient node with 0 value.
Definition: apxx_texpr0.hh:167
const_iterator left() const
Constructs a const_iterator to the only of left sub-expression of an operator node.
Definition: apxx_texpr0.hh:388
ap_texpr_rdir_t & get_rdir() const
Returns a (modifiable) reference to the rounding direction of an operator node.
Definition: apxx_texpr0.hh:569
void init_from(ap_texpr0_t *x)
Internal use only: makes a shallow copy, copying only the root node.
Definition: apxx_texpr0.hh:627
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_texpr0.hh:793
ap_dim_t max_dim() const
Returns the maximal dimension occurring in the expression (or 0 if there is no variable).
Definition: apxx_texpr0.hh:445
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_texpr0.hh:800
bool is_interval_polynomial() const
Whether the expression is polynomial and there is no rounding.
Definition: apxx_texpr0.hh:476
iterator child() const
Constructs an iterator to the only or left sub-expression of an operator node.
Definition: apxx_texpr0.hh:585
size_t size() const
Returns the number of operator nodes in the expression tree.
Definition: apxx_texpr0.hh:440
friend builder operator-(const builder &a)
Makes a AP_TEXPR_NEG expression node using AP_RTYPE_REAL type (no rounding).
Definition: apxx_texpr0.hh:854
ap_dim_t & get_dim() const
Returns a (modifiable) reference to the dimension of a dimension node.
Definition: apxx_texpr0.hh:551
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_texpr0.hh:884
ap_texpr_discr_t get_discr() const
Returns the node kind.
Definition: apxx_texpr0.hh:336
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_texpr0.hh:807
~texpr0()
Frees the memory occupied by the expression (and, recursively, all sub-expressions).
Definition: apxx_texpr0.hh:103
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_texpr0.hh:786
friend std::ostream & operator<<(std::ostream &os, const texpr0 &s)
Printing.
Definition: apxx_texpr0.hh:153
dim(ap_dim_t d)
Standard constructor.
Definition: apxx_texpr0.hh:20
bool is_unop(ap_texpr_op_t op)
Whether the operator is unary.
Definition: apxx_texpr0.hh:33
void init_from(ap_texpr0_t *x)
Internal use only. Shallow copy.
Definition: apxx_texpr0.hh:48
ap_texpr0_t * get_ap_texpr0_t()
Returns a pointer to the internal APRON object stored in *this.
Definition: apxx_texpr0.hh:495
ap_texpr_rtype_t get_rtype() const
Returns the destination type of an operator node.
Definition: apxx_texpr0.hh:359
friend builder operator+(const builder &a)
Makes a copy of the node.
Definition: apxx_texpr0.hh:849
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_texpr0.hh:764
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_texpr0.hh:814
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_texpr0.hh:772
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_texpr0.hh:837
bool is_scalar() const
Whether all occurring constants are scalar.
Definition: apxx_texpr0.hh:222
bool equal(const texpr0 &x) const
Whether two expressions are syntactically, structurally equal.
Definition: apxx_texpr0.hh:429
size_t depth() const
Returns the depth of the expression tree (counting only operator nodes).
Definition: apxx_texpr0.hh:435
ap_texpr0_t * get_ap_texpr0_t()
Returns a pointer to the internal APRON object stored in *this.
Definition: apxx_texpr0.hh:610
bool has_dim(ap_dim_t d) const
Whether the given dimension occurs in the expression.
Definition: apxx_texpr0.hh:450
void print(char **name_of_dim=NULL, FILE *stream=stdout) const
Prints to a C stream.
Definition: apxx_texpr0.hh:158
ap_texpr0_t * l
Definition: apxx_texpr0.hh:587
bool equal(const texpr0 &x) const
Whether two expressions are syntactically, structurally equal.
Definition: apxx_texpr0.hh:172
const_iterator(ap_texpr0_t *l)
Internal use only.
Definition: apxx_texpr0.hh:321
ap_dim_t max_dim() const
Returns the maximal dimension occurring in the expression (or 0 if there is no variable).
Definition: apxx_texpr0.hh:187
iterator & operator=(const builder &c)
Replace the sub-expression at the iterator position with a (deep) copy of c.
Definition: apxx_texpr0.hh:532
bool is_interval_polynomial() const
Whether the expression is polynomial and there is no rounding.
Definition: apxx_texpr0.hh:212
bool has_dim(ap_dim_t d) const
Whether the given dimension occurs in the expression.
Definition: apxx_texpr0.hh:192
ap_texpr_rdir_t get_rdir() const
Returns the rounding direction of an operator node.
Definition: apxx_texpr0.hh:365
builder(ap_texpr0_t *x)
Internal use only: makes a shallow copy, copying only the root node.
Definition: apxx_texpr0.hh:641
texpr0(ap_texpr0_t *x)
Internal use only. Shallow copy.
Definition: apxx_texpr0.hh:54
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_texpr0.hh:879
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_texpr0.hh:757
bool is_interval_polyfrac() const
Whether the expression is a polynomial fraction and there is no rounding.
Definition: apxx_texpr0.hh:481
iterator left() const
Constructs an iterator to the only of left sub-expression of an operator node.
Definition: apxx_texpr0.hh:592
void substitute(ap_dim_t dim, const texpr0 &dst)
Substitutes each occurrence of dim with (a fresh copy of) dst.
Definition: apxx_texpr0.hh:231
bool is_interval_linear() const
Whether the expression is linear and there is no rounding.
Definition: apxx_texpr0.hh:471
iterator right() const
Constructs an iterator to the right sub-expression argument of a binary operator node.
Definition: apxx_texpr0.hh:599
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_texpr0.hh:827
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_texpr0.hh:869
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_texpr0.hh:874
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_texpr0.hh:779
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_texpr0.hh:842
ap_texpr0_t * get_ap_texpr0_t()
Returns a pointer to the internal APRON object stored in *this.
Definition: apxx_texpr0.hh:294
iterator(ap_texpr0_t *l)
Internal use only.
Definition: apxx_texpr0.hh:514
ap_texpr_op_t get_op() const
Returns the operator kind of an operator node.
Definition: apxx_texpr0.hh:353
const_iterator root() const
Returns a new iterator at the root of a constant expression tree.
Definition: apxx_texpr0.hh:316
bool is_scalar() const
Whether all occurring constants are scalar.
Definition: apxx_texpr0.hh:486
ap_texpr0_t * get_ap_texpr0_t()
Returns a pointer to the internal APRON object stored in *this.
Definition: apxx_texpr0.hh:913
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_texpr0.hh:821
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_texpr0.hh:832
ap_texpr_op_t & get_op() const
Returns a (modifiable) reference to the operator kind of an operator node.
Definition: apxx_texpr0.hh:557
ap_texpr_rtype_t & get_rtype() const
Returns a (modifiable) reference to the destination type of an operator node.
Definition: apxx_texpr0.hh:563
size_t depth() const
Returns the depth of the expression tree (counting only operator nodes).
Definition: apxx_texpr0.hh:177
std::vector< std::string > * get_varname(std::basic_ostream< charT, Traits > &os)
Definition: apxx_dimension.hh:44
texpr0 & operator=(const texpr0 &x)
Makes a (deep) copy of the expression.
Definition: apxx_texpr0.hh:124
const_iterator right() const
Constructs a const_iterator to the right sub-expression argument of a binary operator node...
Definition: apxx_texpr0.hh:395
size_t size() const
Returns the number of operator nodes in the expression tree.
Definition: apxx_texpr0.hh:182
void add_dimensions(const dimchange &d)
Adds some dimensions, shifting dimension if needed.
Definition: apxx_texpr0.hh:273
const_iterator child() const
Constructs a const_iterator to the only or left sub-expression of an operator node.
Definition: apxx_texpr0.hh:381
void print(char **name_of_dim=NULL, FILE *stream=stdout) const
Prints to a C stream.
Definition: apxx_texpr0.hh:415
void apxx_texpr0_ostream(std::ostream &os, ap_texpr0_t *a, std::vector< std::string > *names)
std::vector< ap_dim_t > dimlist() const
Returns a list of all dimensions occurring in the expression (in strict increasing order) ...
Definition: apxx_texpr0.hh:197
bool is_interval_cst() const
Whether the expression is constant (i.e., has no dimension leaves).
Definition: apxx_texpr0.hh:202
std::vector< ap_dim_t > dimlist() const
Returns a list of all dimensions occurring in the expression (in strict increasing order) ...
Definition: apxx_texpr0.hh:455