19inline dim::dim(ap_dim_t d) : d(d)
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);
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),
80 init_from(ap_texpr0_remove_dimensions(
const_cast<ap_texpr0_t*
>(&x.
l),
86 init_from(ap_texpr0_permute_dimensions(
const_cast<ap_texpr0_t*
>(&x.
l),
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()));
152inline std::ostream&
operator<< (std::ostream& os,
const texpr0& s)
154 return os << s.root();
232 ap_texpr0_substitute_with(&
l,
dim,
const_cast<ap_texpr0_t*
>(&dst.
l));
240 if (!pexact) pexact = &b;
244 const_cast<ap_texpr0_t*
>(
l),
248inline 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));
285 ap_texpr0_permute_dimensions_with(&
l,
const_cast<ap_dimperm_t*
>(d.
get_ap_dimperm_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);
408inline 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),
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));
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");
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),
756inline 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);
763inline 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);
771inline 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);
778inline 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);
785inline 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);
792inline 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);
799inline 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);
806inline 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);
813inline 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);
820inline 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);
826inline texpr0::builder
floor(
const texpr0::builder& a)
828 return texpr0::builder(AP_TEXPR_CAST, a, AP_RTYPE_INT, AP_RDIR_DOWN);
831inline texpr0::builder
ceil(
const texpr0::builder& a)
833 return texpr0::builder(AP_TEXPR_CAST, a, AP_RTYPE_INT, AP_RDIR_UP);
836inline texpr0::builder
trunc(
const texpr0::builder& a)
838 return texpr0::builder(AP_TEXPR_CAST, a, AP_RTYPE_INT, AP_RDIR_ZERO);
841inline 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);
848inline texpr0::builder
operator+(
const texpr0::builder& a)
853inline texpr0::builder
operator-(
const texpr0::builder& a)
858inline texpr0::builder
operator+(
const texpr0::builder& a,
const texpr0::builder& b)
863inline texpr0::builder
operator-(
const texpr0::builder& a,
const texpr0::builder& b)
868inline texpr0::builder
operator*(
const texpr0::builder& a,
const texpr0::builder& b)
873inline texpr0::builder
operator/(
const texpr0::builder& a,
const texpr0::builder& b)
878inline texpr0::builder
operator%(
const texpr0::builder& a,
const texpr0::builder& b)
883inline 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);
std::ostream & operator<<(std::ostream &os, const abstract0 &s)
Definition apxx_abstract0_inline.hh:292
std::vector< std::string > * get_varname(std::basic_ostream< charT, Traits > &os)
Definition apxx_dimension_inline.hh:43
dimperm operator*(const dimperm &x, const dimperm &y)
Definition apxx_dimension_inline.hh:392
texpr0::builder floor(const texpr0::builder &a)
Definition apxx_texpr0_inline.hh:826
texpr0::builder trunc(const texpr0::builder &a)
Definition apxx_texpr0_inline.hh:836
texpr0::builder sqrt(const texpr0::builder &a, ap_texpr_rtype_t rtype=AP_RTYPE_REAL, ap_texpr_rdir_t rdir=AP_RDIR_NEAREST)
Definition apxx_texpr0_inline.hh:841
texpr0::builder sub(const texpr0::builder &a, const texpr0::builder &b, ap_texpr_rtype_t rtype=AP_RTYPE_REAL, ap_texpr_rdir_t rdir=AP_RDIR_NEAREST)
Definition apxx_texpr0_inline.hh:778
texpr0::builder operator/(const texpr0::builder &a, const texpr0::builder &b)
Definition apxx_texpr0_inline.hh:873
texpr0::builder div(const texpr0::builder &a, const texpr0::builder &b, ap_texpr_rtype_t rtype=AP_RTYPE_REAL, ap_texpr_rdir_t rdir=AP_RDIR_NEAREST)
Definition apxx_texpr0_inline.hh:792
texpr0::builder cast(const texpr0::builder &a, ap_texpr_rtype_t rtype, ap_texpr_rdir_t rdir=AP_RDIR_NEAREST)
Definition apxx_texpr0_inline.hh:820
texpr0::builder binary(ap_texpr_op_t op, const texpr0::builder &a, const texpr0::builder &b, ap_texpr_rtype_t rtype=AP_RTYPE_REAL, ap_texpr_rdir_t rdir=AP_RDIR_NEAREST)
Definition apxx_texpr0_inline.hh:763
texpr0::builder pow(const texpr0::builder &a, const texpr0::builder &b, ap_texpr_rtype_t rtype=AP_RTYPE_REAL, ap_texpr_rdir_t rdir=AP_RDIR_NEAREST)
Definition apxx_texpr0_inline.hh:806
texpr0::builder add(const texpr0::builder &a, const texpr0::builder &b, ap_texpr_rtype_t rtype=AP_RTYPE_REAL, ap_texpr_rdir_t rdir=AP_RDIR_NEAREST)
Definition apxx_texpr0_inline.hh:771
texpr0::builder operator%(const texpr0::builder &a, const texpr0::builder &b)
Definition apxx_texpr0_inline.hh:878
texpr0::builder unary(ap_texpr_op_t op, const texpr0::builder &a, ap_texpr_rtype_t rtype=AP_RTYPE_REAL, ap_texpr_rdir_t rdir=AP_RDIR_NEAREST)
Definition apxx_texpr0_inline.hh:756
texpr0::builder operator^(const texpr0::builder &a, const texpr0::builder &b)
Definition apxx_texpr0_inline.hh:883
void apxx_texpr0_ostream(std::ostream &os, ap_texpr0_t *a, std::vector< std::string > *names)
texpr0::builder mod(const texpr0::builder &a, const texpr0::builder &b, ap_texpr_rtype_t rtype=AP_RTYPE_REAL, ap_texpr_rdir_t rdir=AP_RDIR_NEAREST)
Definition apxx_texpr0_inline.hh:799
texpr0::builder operator+(const texpr0::builder &a)
Definition apxx_texpr0_inline.hh:848
texpr0::builder operator-(const texpr0::builder &a)
Definition apxx_texpr0_inline.hh:853
texpr0::builder neg(const texpr0::builder &a, ap_texpr_rtype_t rtype=AP_RTYPE_REAL, ap_texpr_rdir_t rdir=AP_RDIR_NEAREST)
Definition apxx_texpr0_inline.hh:813
texpr0::builder ceil(const texpr0::builder &a)
Definition apxx_texpr0_inline.hh:831
texpr0::builder mul(const texpr0::builder &a, const texpr0::builder &b, ap_texpr_rtype_t rtype=AP_RTYPE_REAL, ap_texpr_rdir_t rdir=AP_RDIR_NEAREST)
Definition apxx_texpr0_inline.hh:785
Level 0 abstract value (ap_abstract0_t* wrapper).
Definition apxx_abstract0.hh:78
ap_abstract0_t * get_ap_abstract0_t()
Returns a pointer to the internal APRON object stored in *this.
Definition apxx_abstract0_inline.hh:1172
Exception raised when an operation is incompatible with a discriminant.
Definition apxx_scalar.hh:55
Coefficient (ap_coeff_t wrapper).
Definition apxx_coeff.hh:36
Represents a dimension (i.e., variable by index) in an expression tree.
Definition apxx_texpr0.hh:33
ap_dim_t d
Dimension index.
Definition apxx_texpr0.hh:37
dim(ap_dim_t d)
Standard constructor.
Definition apxx_texpr0_inline.hh:19
Dimension change object (ap_dimchange_t wrapper).
Definition apxx_dimension.hh:102
const ap_dimchange_t * get_ap_dimchange_t() const
Returns a pointer to the internal APRON object stored in *this.
Definition apxx_dimension_inline.hh:204
Dimension permutation object (ap_dimperm_t wrapper).
Definition apxx_dimension.hh:292
const ap_dimperm_t * get_ap_dimperm_t() const
Returns a pointer to the internal APRON object stored in *this.
Definition apxx_dimension_inline.hh:422
Level 1 environment (ap_environment_t wrapper).
Definition apxx_environment.hh:51
const ap_environment_t * get_ap_environment_t() const
Returns a pointer to the internal APRON object pointed by *this.
Definition apxx_environment_inline.hh:425
Interval (ap_interval_t wrapper).
Definition apxx_interval.hh:47
Level 0 linear expression (ap_linexpr0_t wrapper).
Definition apxx_linexpr0.hh:44
const ap_linexpr0_t * get_ap_linexpr0_t() const
Returns a pointer to the internal APRON object stored in *this.
Definition apxx_linexpr0_inline.hh:459
Library manager (ap_manager_t wrapper).
Definition apxx_manager.hh:137
ap_manager_t * get_ap_manager_t()
Returns a pointer to the internal APRON object stored in *this.
Definition apxx_manager_inline.hh:206
Scalar (ap_scalar_t wrapper).
Definition apxx_scalar.hh:89
Temporary expression nodes used when constructing a texpr0.
Definition apxx_texpr0.hh:581
void init_from(ap_texpr0_t *x)
Internal use only: makes a shallow copy, copying only the root node.
Definition apxx_texpr0_inline.hh:626
~builder()
Frees the memory occupied by the node, not its sub-expressions.
Definition apxx_texpr0_inline.hh:892
ap_texpr0_t * l
Definition apxx_texpr0.hh:587
builder(ap_texpr0_t *x)
Internal use only: makes a shallow copy, copying only the root node.
Definition apxx_texpr0_inline.hh:640
bool is_zero() const
Whether the expression is a single coefficient node with 0 value.
Definition apxx_texpr0_inline.hh:903
ap_texpr0_t * get_ap_texpr0_t()
Returns a pointer to the internal APRON object stored in *this.
Definition apxx_texpr0_inline.hh:912
Iterators to traverse a constant expression tree.
Definition apxx_texpr0.hh:211
size_t size() const
Returns the number of operator nodes in the expression tree.
Definition apxx_texpr0_inline.hh:439
ap_texpr0_t * l
Definition apxx_texpr0.hh:215
bool is_interval_polynomial() const
Whether the expression is polynomial and there is no rounding.
Definition apxx_texpr0_inline.hh:475
bool is_interval_cst() const
Whether the expression is constant (i.e., has no dimension leaves).
Definition apxx_texpr0_inline.hh:465
bool is_zero() const
Whether the expression is a single coefficient node with 0 value.
Definition apxx_texpr0_inline.hh:423
ap_texpr_op_t get_op() const
Returns the operator kind of an operator node.
Definition apxx_texpr0_inline.hh:352
const_iterator & operator=(const const_iterator &i)
Resets the const_iterator at position i.
Definition apxx_texpr0_inline.hh:374
bool equal(const texpr0 &x) const
Whether two expressions are syntactically, structurally equal.
Definition apxx_texpr0_inline.hh:428
const_iterator left() const
Constructs a const_iterator to the only of left sub-expression of an operator node.
Definition apxx_texpr0_inline.hh:387
bool is_scalar() const
Whether all occurring constants are scalar.
Definition apxx_texpr0_inline.hh:485
ap_texpr_discr_t get_discr() const
Returns the node kind.
Definition apxx_texpr0_inline.hh:335
ap_texpr_rdir_t get_rdir() const
Returns the rounding direction of an operator node.
Definition apxx_texpr0_inline.hh:364
size_t depth() const
Returns the depth of the expression tree (counting only operator nodes).
Definition apxx_texpr0_inline.hh:434
const coeff & get_coeff() const
Returns a reference to the coefficient of a constant node.
Definition apxx_texpr0_inline.hh:340
ap_texpr0_t * get_ap_texpr0_t()
Returns a pointer to the internal APRON object stored in *this.
Definition apxx_texpr0_inline.hh:494
ap_dim_t max_dim() const
Returns the maximal dimension occurring in the expression (or 0 if there is no variable).
Definition apxx_texpr0_inline.hh:444
const_iterator child() const
Constructs a const_iterator to the only or left sub-expression of an operator node.
Definition apxx_texpr0_inline.hh:380
void print(char **name_of_dim=NULL, FILE *stream=stdout) const
Prints to a C stream.
Definition apxx_texpr0_inline.hh:414
bool is_interval_linear() const
Whether the expression is linear and there is no rounding.
Definition apxx_texpr0_inline.hh:470
ap_dim_t get_dim() const
Returns the dimension of a dimension node.
Definition apxx_texpr0_inline.hh:346
const_iterator right() const
Constructs a const_iterator to the right sub-expression argument of a binary operator node.
Definition apxx_texpr0_inline.hh:394
const_iterator(ap_texpr0_t *l)
Internal use only.
Definition apxx_texpr0_inline.hh:320
std::vector< ap_dim_t > dimlist() const
Returns a list of all dimensions occurring in the expression (in strict increasing order)
Definition apxx_texpr0_inline.hh:454
bool has_dim(ap_dim_t d) const
Whether the given dimension occurs in the expression.
Definition apxx_texpr0_inline.hh:449
bool is_interval_polyfrac() const
Whether the expression is a polynomial fraction and there is no rounding.
Definition apxx_texpr0_inline.hh:480
ap_texpr_rtype_t get_rtype() const
Returns the destination type of an operator node.
Definition apxx_texpr0_inline.hh:358
Iterators to traverse and mutate an expression tree.
Definition apxx_texpr0.hh:413
coeff & get_coeff() const
Returns a (modifiable) reference to the coefficient of a constant node.
Definition apxx_texpr0_inline.hh:544
iterator left() const
Constructs an iterator to the only of left sub-expression of an operator node.
Definition apxx_texpr0_inline.hh:591
ap_texpr_rtype_t & get_rtype() const
Returns a (modifiable) reference to the destination type of an operator node.
Definition apxx_texpr0_inline.hh:562
iterator(ap_texpr0_t *l)
Internal use only.
Definition apxx_texpr0_inline.hh:513
iterator child() const
Constructs an iterator to the only or left sub-expression of an operator node.
Definition apxx_texpr0_inline.hh:584
iterator right() const
Constructs an iterator to the right sub-expression argument of a binary operator node.
Definition apxx_texpr0_inline.hh:598
ap_texpr_rdir_t & get_rdir() const
Returns a (modifiable) reference to the rounding direction of an operator node.
Definition apxx_texpr0_inline.hh:568
iterator & operator=(const builder &c)
Replace the sub-expression at the iterator position with a (deep) copy of c.
Definition apxx_texpr0_inline.hh:531
ap_texpr0_t * get_ap_texpr0_t()
Returns a pointer to the internal APRON object stored in *this.
Definition apxx_texpr0_inline.hh:609
ap_dim_t & get_dim() const
Returns a (modifiable) reference to the dimension of a dimension node.
Definition apxx_texpr0_inline.hh:550
ap_texpr_op_t & get_op() const
Returns a (modifiable) reference to the operator kind of an operator node.
Definition apxx_texpr0_inline.hh:556
Level 0 arbitrary expression tree (ap_texpr0_t wrapper).
Definition apxx_texpr0.hh:92
bool is_interval_linear() const
Whether the expression is linear and there is no rounding.
Definition apxx_texpr0_inline.hh:206
~texpr0()
Frees the memory occupied by the expression (and, recursively, all sub-expressions).
Definition apxx_texpr0_inline.hh:102
size_t size() const
Returns the number of operator nodes in the expression tree.
Definition apxx_texpr0_inline.hh:181
size_t depth() const
Returns the depth of the expression tree (counting only operator nodes).
Definition apxx_texpr0_inline.hh:176
ap_texpr0_t * get_ap_texpr0_t()
Returns a pointer to the internal APRON object stored in *this.
Definition apxx_texpr0_inline.hh:293
ap_dim_t max_dim() const
Returns the maximal dimension occurring in the expression (or 0 if there is no variable).
Definition apxx_texpr0_inline.hh:186
bool has_dim(ap_dim_t d) const
Whether the given dimension occurs in the expression.
Definition apxx_texpr0_inline.hh:191
texpr0(ap_texpr0_t *x)
Internal use only. Shallow copy.
Definition apxx_texpr0_inline.hh:53
const_iterator root() const
Returns a new iterator at the root of a constant expression tree.
Definition apxx_texpr0_inline.hh:315
texpr0 & operator=(const texpr0 &x)
Makes a (deep) copy of the expression.
Definition apxx_texpr0_inline.hh:123
bool is_interval_cst() const
Whether the expression is constant (i.e., has no dimension leaves).
Definition apxx_texpr0_inline.hh:201
ap_texpr0_t l
Structure managed by APRON.
Definition apxx_texpr0.hh:96
void add_dimensions(const dimchange &d)
Adds some dimensions, shifting dimension if needed.
Definition apxx_texpr0_inline.hh:272
bool is_interval_polyfrac() const
Whether the expression is a polynomial fraction and there is no rounding.
Definition apxx_texpr0_inline.hh:216
friend std::ostream & operator<<(std::ostream &os, const texpr0 &s)
Printing.
bool is_interval_polynomial() const
Whether the expression is polynomial and there is no rounding.
Definition apxx_texpr0_inline.hh:211
bool equal(const texpr0 &x) const
Whether two expressions are syntactically, structurally equal.
Definition apxx_texpr0_inline.hh:171
void permute_dimensions(const dimperm &d)
Permutes dimensions.
Definition apxx_texpr0_inline.hh:283
long hash() const
Returns a hash code.
Definition apxx_texpr0_inline.hh:261
bool is_scalar() const
Whether all occurring constants are scalar.
Definition apxx_texpr0_inline.hh:221
void init_from(ap_texpr0_t *x)
Internal use only. Shallow copy.
Definition apxx_texpr0_inline.hh:47
std::vector< ap_dim_t > dimlist() const
Returns a list of all dimensions occurring in the expression (in strict increasing order)
Definition apxx_texpr0_inline.hh:196
bool is_zero() const
Whether the expression is a single coefficient node with 0 value.
Definition apxx_texpr0_inline.hh:166
void substitute(ap_dim_t dim, const texpr0 &dst)
Substitutes each occurrence of dim with (a fresh copy of) dst.
Definition apxx_texpr0_inline.hh:230
void print(char **name_of_dim=NULL, FILE *stream=stdout) const
Prints to a C stream.
Definition apxx_texpr0_inline.hh:157
void remove_dimensions(const dimchange &d)
Removes some dimensions, shifting dimension if needed.
Definition apxx_texpr0_inline.hh:278
Variable name (ap_var_t wrapper).
Definition apxx_var.hh:39
const ap_var_t & get_ap_var_t() const
Returns a reference to the APRON object wrapped (no copy).
Definition apxx_var_inline.hh:156
bool is_unop(ap_texpr_op_t op)
Whether the operator is unary.
bool is_binop(ap_texpr_op_t op)
Whether the operator is binary.
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