18inline void texpr1::init_from(ap_environment_t* e, ap_texpr0_t* x)
24inline void texpr1::init_from(ap_texpr1_t* x)
30inline texpr1::texpr1(ap_texpr1_t* x)
35inline texpr1::texpr1(
const texpr1& x)
37 init_from(ap_texpr1_copy(
const_cast<ap_texpr1_t*
>(&x.l)));
40inline texpr1::texpr1(
const builder& x)
42 init_from(ap_texpr1_copy(
const_cast<ap_texpr1_t*
>(x.get_ap_texpr1_t())));
45inline texpr1::texpr1(
const const_iterator& x)
47 init_from(ap_texpr1_copy(
const_cast<ap_texpr1_t*
>(x.get_ap_texpr1_t())));
50inline texpr1::texpr1(
const environment& e,
const var& v)
53 ap_texpr1_var(
const_cast<ap_environment_t*
>(e.get_ap_environment_t()), v.get_ap_var_t());
54 if (!ll)
throw(std::invalid_argument(
"apron::texpr1::texpr1(const environment&, const var&) variable not in environment"));
58inline texpr1::texpr1(
const environment& e,
const texpr0& x)
60 init_from(ap_environment_copy(
const_cast<ap_environment_t*
>(e.get_ap_environment_t())),
61 ap_texpr0_copy(
const_cast<ap_texpr0_t*
>(x.get_ap_texpr0_t())));
64inline texpr1::texpr1(
const environment& e,
const texpr0::const_iterator& x)
66 init_from(ap_environment_copy(
const_cast<ap_environment_t*
>(e.get_ap_environment_t())),
67 ap_texpr0_copy(
const_cast<ap_texpr0_t*
>(x.get_ap_texpr0_t())));
70inline texpr1::texpr1(
const environment& e,
const texpr0::builder& c)
72 init_from(ap_environment_copy(
const_cast<ap_environment_t*
>(e.get_ap_environment_t())),
73 ap_texpr0_copy(
const_cast<ap_texpr0_t*
>(c.get_ap_texpr0_t())));
77inline texpr1::texpr1(
const linexpr1& l)
79 init_from(ap_texpr1_from_linexpr1(
const_cast<ap_linexpr1_t*
>(l.get_ap_linexpr1_t())));
82inline texpr1::texpr1(
const texpr1& x,
const environment& e)
85 ap_texpr1_extend_environment(
const_cast<ap_texpr1_t*
>(&x.l),
86 const_cast<ap_environment_t*
>(e.get_ap_environment_t()));
88 throw std::invalid_argument(
"apron::texpr1::texpr1(const texpr1&, const environment&) not a super-environment");
92inline texpr1::texpr1(
const texpr1& x,
const var& src,
const texpr1& dst)
95 ap_texpr1_substitute(
const_cast<ap_texpr1_t*
>(&x.l),
96 const_cast<ap_var_t
>(src.get_ap_var_t()),
97 const_cast<ap_texpr1_t*
>(&dst.l));
99 throw std::invalid_argument(
"apron::texpr1::texpr1(const texpr1&, const var&, const texpr1&)");
107inline texpr1::~texpr1()
109 ap_environment_free(l.env);
110 ap_texpr0_free(l.texpr0);
117inline texpr1& texpr1::operator=(
const texpr1& x)
119 ap_texpr1_t* c = ap_texpr1_copy(
const_cast<ap_texpr1_t*
>(&x.l));
120 ap_environment_free(l.env);
121 ap_texpr0_free(l.texpr0);
126inline texpr1& texpr1::operator=(
const builder& x)
128 ap_texpr1_t* c = ap_texpr1_copy(
const_cast<ap_texpr1_t*
>(x.get_ap_texpr1_t()));
129 ap_environment_free(l.env);
130 ap_texpr0_free(l.texpr0);
135inline texpr1& texpr1::operator=(
const const_iterator& x)
137 ap_texpr1_t* c = ap_texpr1_copy(
const_cast<ap_texpr1_t*
>(x.get_ap_texpr1_t()));
138 ap_environment_free(l.env);
139 ap_texpr0_free(l.texpr0);
144inline texpr1& texpr1::operator= (
const linexpr1& x)
146 ap_environment_free(l.env);
147 ap_texpr0_free(l.texpr0);
148 init_from(ap_texpr1_from_linexpr1(
const_cast<ap_linexpr1_t*
>(x.get_ap_linexpr1_t())));
159inline std::ostream&
operator<< (std::ostream& os,
const texpr1& s)
161 return os << s.root();
164inline void texpr1::print(FILE* stream)
const
166 root().print(stream);
174inline void texpr1::extend_environment(
const environment& e)
177 ap_texpr1_extend_environment_with(&l,
178 const_cast<ap_environment_t*
>(e.get_ap_environment_t()));
180 throw std::invalid_argument(
"apron::texpr1::extend_environment(const environment&) not a super-environment");
187inline environment texpr1::get_environment()
const
189 return root().get_environment();
192inline texpr0::const_iterator texpr1::get_texpr0()
const
194 return root().get_texpr0();
197inline texpr0::iterator texpr1::get_texpr0()
199 return root().get_texpr0();
202inline bool texpr1::equal(
const texpr1& x)
const
204 return root().equal(x);
207inline size_t texpr1::depth()
const
209 return root().depth();
212inline bool texpr1::is_zero()
const
214 return root().is_zero();
217inline size_t texpr1::size()
const
219 return root().size();
222inline bool texpr1::has_var(
const var& v)
const
224 return root().has_var(v);
227inline bool texpr1::is_interval_cst()
const
229 return root().is_interval_cst();
232inline bool texpr1::is_interval_linear()
const
234 return root().is_interval_linear();
237inline bool texpr1::is_interval_polynomial()
const
239 return root().is_interval_polynomial();
242inline bool texpr1::is_interval_polyfrac()
const
244 return root().is_interval_polyfrac();
247inline bool texpr1::is_scalar()
const
249 return root().is_scalar();
256inline void texpr1::substitute(
const var& src,
const texpr1& dst)
259 ap_texpr1_substitute_with(
const_cast<ap_texpr1_t*
>(&l),
260 const_cast<ap_var_t
>(src.get_ap_var_t()),
261 const_cast<ap_texpr1_t*
>(&dst.l));
263 throw std::invalid_argument(
"apron::texpr1::substitute(const var&, const texpr1&)");
271inline ap_texpr1_t* texpr1::get_ap_texpr1_t()
276inline const ap_texpr1_t* texpr1::get_ap_texpr1_t()
const
295inline texpr1::const_iterator texpr1::root()
const
297 return const_iterator(
const_cast<ap_texpr1_t*
>(&l));
300inline texpr1::const_iterator::const_iterator(ap_texpr0_t* ll, ap_environment_t* ee)
306inline texpr1::const_iterator::const_iterator(ap_texpr1_t* l)
310inline texpr1::const_iterator::const_iterator(
const texpr1& e)
311 : l(*e.get_ap_texpr1_t())
314inline texpr1::const_iterator::const_iterator(
const const_iterator& i)
322inline environment texpr1::const_iterator::get_environment()
const
324 return ap_environment_copy(l.env);
327inline texpr0::const_iterator texpr1::const_iterator::get_texpr0()
const
332inline ap_texpr_discr_t texpr1::const_iterator::get_discr()
const
334 return l.texpr0->discr;
337inline const coeff& texpr1::const_iterator::get_coeff()
const
339 if (l.texpr0->discr!=AP_TEXPR_CST)
throw(bad_discriminant(
"apron::texpr1::const_iterator::get_coeff()"));
340 return reinterpret_cast<coeff&
>(l.texpr0->val.cst);
343inline const var& texpr1::const_iterator::get_var()
const
345 if (l.texpr0->discr!=AP_TEXPR_DIM)
throw(bad_discriminant(
"apron::texpr1::const_iterator::get_var()"));
346 return *
reinterpret_cast<var*
>(&l.env->var_of_dim[l.texpr0->val.dim]);
349inline ap_dim_t texpr1::const_iterator::get_dim()
const
351 if (l.texpr0->discr!=AP_TEXPR_DIM)
throw(bad_discriminant(
"apron::texpr1::const_iterator::get_dim()"));
352 return l.texpr0->val.dim;
355inline ap_texpr_op_t texpr1::const_iterator::get_op()
const
357 if (l.texpr0->discr!=AP_TEXPR_NODE)
throw(bad_discriminant(
"apron::texpr1::const_iterator::get_op()"));
358 return l.texpr0->val.node->op;
361inline ap_texpr_rtype_t texpr1::const_iterator::get_rtype()
const
363 if (l.texpr0->discr!=AP_TEXPR_NODE)
throw(bad_discriminant(
"apron::texpr1::const_iterator::get_type()"));
364 return l.texpr0->val.node->type;
367inline ap_texpr_rdir_t texpr1::const_iterator::get_rdir()
const
369 if (l.texpr0->discr!=AP_TEXPR_NODE)
throw(bad_discriminant(
"apron::texpr1::const_iterator::get_dir()"));
370 return l.texpr0->val.node->dir;
377inline texpr1::const_iterator& texpr1::const_iterator::operator=(
const const_iterator& i)
383inline texpr1::const_iterator texpr1::const_iterator::child()
const
385 if (l.texpr0->discr!=AP_TEXPR_NODE)
throw(bad_discriminant(
"apron::texpr1::const_iterator::child()"));
386 if (!l.texpr0->val.node->exprA)
throw(std::out_of_range(
"apron::texpr1::const_iterator::child()"));
387 return const_iterator(l.texpr0->val.node->exprA, l.env);
390inline texpr1::const_iterator texpr1::const_iterator::left()
const
392 if (l.texpr0->discr!=AP_TEXPR_NODE)
throw(bad_discriminant(
"apron::texpr1::const_iterator::left()"));
393 if (!l.texpr0->val.node->exprA)
throw(std::out_of_range(
"apron::texpr1::const_iterator::left()"));
394 return const_iterator(l.texpr0->val.node->exprA, l.env);
397inline texpr1::const_iterator texpr1::const_iterator::right()
const
399 if (l.texpr0->discr!=AP_TEXPR_NODE)
throw(bad_discriminant(
"apron::texpr1::const_iterator::right()"));
400 if (!l.texpr0->val.node->exprB)
throw(std::out_of_range(
"apron::texpr1::const_iterator::right()"));
401 return const_iterator(l.texpr0->val.node->exprB, l.env);
410inline std::ostream&
operator<< (std::ostream& os,
const texpr1::const_iterator& s)
412 ap_texpr1_t* x =
const_cast<ap_texpr1_t*
>(s.get_ap_texpr1_t());
417inline void texpr1::const_iterator::print(FILE* stream)
const
419 ap_texpr1_fprint(stream,
const_cast<ap_texpr1_t*
>(&l));
426inline bool texpr1::const_iterator::equal(
const texpr1& x)
const
428 return ap_texpr1_equal(
const_cast<ap_texpr1_t*
>(&l),
429 const_cast<ap_texpr1_t*
>(x.get_ap_texpr1_t()));
432inline size_t texpr1::const_iterator::depth()
const
434 return ap_texpr0_depth(
const_cast<ap_texpr0_t*
>(l.texpr0));
437inline bool texpr1::const_iterator::is_zero()
const
439 return l.texpr0->discr==AP_TEXPR_CST && ap_coeff_zero(&
const_cast<ap_texpr0_t*
>(l.texpr0)->val.cst);
442inline size_t texpr1::const_iterator::size()
const
444 return ap_texpr0_size(
const_cast<ap_texpr0_t*
>(l.texpr0));
447inline bool texpr1::const_iterator::has_var(
const var& v)
const
449 return ap_texpr1_has_var(
const_cast<ap_texpr1_t*
>(&l),
450 const_cast<ap_var_t
>(v.get_ap_var_t()));
453inline bool texpr1::const_iterator::is_interval_cst()
const
455 return ap_texpr1_is_interval_cst(
const_cast<ap_texpr1_t*
>(&l));
458inline bool texpr1::const_iterator::is_interval_linear()
const
460 return ap_texpr1_is_interval_linear(
const_cast<ap_texpr1_t*
>(&l));
463inline bool texpr1::const_iterator::is_interval_polynomial()
const
465 return ap_texpr1_is_interval_polynomial(
const_cast<ap_texpr1_t*
>(&l));
468inline bool texpr1::const_iterator::is_interval_polyfrac()
const
470 return ap_texpr1_is_interval_polyfrac(
const_cast<ap_texpr1_t*
>(&l));
473inline bool texpr1::const_iterator::is_scalar()
const
475 return ap_texpr1_is_scalar(
const_cast<ap_texpr1_t*
>(&l));
482inline ap_texpr1_t* texpr1::const_iterator::get_ap_texpr1_t()
487inline const ap_texpr1_t* texpr1::const_iterator::get_ap_texpr1_t()
const
496inline texpr1::iterator texpr1::root()
501inline texpr1::iterator::iterator(ap_texpr0_t* l, ap_environment_t* e)
502 : texpr1::const_iterator(l,e)
505inline texpr1::iterator::iterator(ap_texpr1_t* l)
506 : texpr1::const_iterator(l)
510inline texpr1::iterator::iterator(texpr1& e)
511 : texpr1::const_iterator(e.get_ap_texpr1_t())
514inline texpr1::iterator::iterator(
const iterator& i)
515 : texpr1::const_iterator(i)
523inline texpr1::iterator& texpr1::iterator::operator= (
const builder& c)
525 ap_texpr0_t* cc = ap_texpr0_copy(c.get_ap_texpr1_t()->texpr0);
526 ap_texpr0_clear(l.texpr0);
536inline texpr0::iterator texpr1::iterator::get_texpr0()
const
542inline coeff& texpr1::iterator::get_coeff()
const
544 if (l.texpr0->discr!=AP_TEXPR_CST)
throw(bad_discriminant(
"apron::texpr1::iterator::get_coeff()"));
545 return reinterpret_cast<coeff&
>(l.texpr0->val.cst);
548inline void texpr1::iterator::set_var(
const var& v)
const
550 if (l.texpr0->discr!=AP_TEXPR_DIM)
throw(bad_discriminant(
"apron::texpr1::iterator::set_var(const var&)"));
551 ap_dim_t d = ap_environment_dim_of_var(l.env, v.get_ap_var_t());
552 if (d==AP_DIM_MAX)
throw(std::invalid_argument(
"apron::texpr1::iterator::set_var(const var&) variable not in environment"));
553 l.texpr0->val.dim = d;
556inline ap_dim_t& texpr1::iterator::get_dim()
const
558 if (l.texpr0->discr!=AP_TEXPR_DIM)
throw(bad_discriminant(
"apron::texpr1::iterator::get_dim()"));
559 return l.texpr0->val.dim;
562inline ap_texpr_op_t& texpr1::iterator::get_op()
const
564 if (l.texpr0->discr!=AP_TEXPR_NODE)
throw(bad_discriminant(
"apron::texpr1::iterator::get_op()"));
565 return l.texpr0->val.node->op;
568inline ap_texpr_rtype_t& texpr1::iterator::get_rtype()
const
570 if (l.texpr0->discr!=AP_TEXPR_NODE)
throw(bad_discriminant(
"apron::texpr1::iterator::get_type()"));
571 return l.texpr0->val.node->type;
574inline ap_texpr_rdir_t& texpr1::iterator::get_rdir()
const
576 if (l.texpr0->discr!=AP_TEXPR_NODE)
throw(bad_discriminant(
"apron::texpr1::iterator::get_dir()"));
577 return l.texpr0->val.node->dir;
584inline texpr1::iterator& texpr1::iterator::operator=(
const iterator& i)
590inline texpr1::iterator texpr1::iterator::child()
const
592 if (l.texpr0->discr!=AP_TEXPR_NODE)
throw(bad_discriminant(
"apron::texpr1::iterator::child()"));
593 if (!l.texpr0->val.node->exprA)
throw(std::out_of_range(
"apron::texpr1::iterator::child()"));
594 return iterator(l.texpr0->val.node->exprA, l.env);
597inline texpr1::iterator texpr1::iterator::left()
const
599 if (l.texpr0->discr!=AP_TEXPR_NODE)
throw(bad_discriminant(
"apron::texpr1::iterator::left()"));
600 if (!l.texpr0->val.node->exprA)
throw(std::out_of_range(
"apron::texpr1::iterator::left()"));
601 return iterator(l.texpr0->val.node->exprA, l.env);
604inline texpr1::iterator texpr1::iterator::right()
const
606 if (l.texpr0->discr!=AP_TEXPR_NODE)
throw(bad_discriminant(
"apron::texpr1::iterator::right()"));
607 if (!l.texpr0->val.node->exprB)
throw(std::out_of_range(
"apron::texpr1::iterator::right()"));
608 return iterator(l.texpr0->val.node->exprB, l.env);
615inline ap_texpr1_t* texpr1::iterator::get_ap_texpr1_t()
620inline const ap_texpr1_t* texpr1::iterator::get_ap_texpr1_t()
const
630inline void texpr1::builder::init_from(ap_texpr1_t* x)
633 switch (x->texpr0->discr) {
634 case AP_TEXPR_DIM: l.texpr0 = ap_texpr0_dim(x->texpr0->val.dim);
break;
635 case AP_TEXPR_CST: l.texpr0 = ap_texpr0_cst(
const_cast<ap_coeff_t*
>(&x->texpr0->val.cst));
break;
637 l.texpr0 = ap_texpr0_node(x->texpr0->val.node->op,
638 x->texpr0->val.node->type, x->texpr0->val.node->dir,
639 x->texpr0->val.node->exprA, x->texpr0->val.node->exprB);
641 default:
throw std::invalid_argument(
"apron::texpr1::builder::init_from(ap_texpr1_t*) invalid discriminant");
645inline void texpr1::builder::init_from(ap_environment_t* e, ap_texpr0_t* x)
653inline texpr1::builder::builder(ap_texpr1_t* x)
658inline texpr1::builder::builder(
const builder& x)
660 init_from(
const_cast<ap_texpr1_t*
>(&x.l));
663inline texpr1::builder::builder(
const const_iterator& x)
665 init_from(
const_cast<ap_texpr1_t*
>(x.get_ap_texpr1_t()));
668inline texpr1::builder::builder(
const texpr1& x)
670 init_from(
const_cast<ap_texpr1_t*
>(x.get_ap_texpr1_t()));
673inline texpr1::builder::builder(
const environment& e,
const texpr0::builder& b)
675 init_from(
const_cast<ap_environment_t*
>(e.get_ap_environment_t()),
676 const_cast<ap_texpr0_t*
>(b.get_ap_texpr0_t()));
679inline texpr1::builder::builder(
const environment& e,
const texpr0::const_iterator& b)
681 init_from(
const_cast<ap_environment_t*
>(e.get_ap_environment_t()),
682 const_cast<ap_texpr0_t*
>(b.get_ap_texpr0_t()));
685inline texpr1::builder::builder(
const environment& e,
const texpr0& b)
687 init_from(
const_cast<ap_environment_t*
>(e.get_ap_environment_t()),
688 const_cast<ap_texpr0_t*
>(b.get_ap_texpr0_t()));
691inline texpr1::builder::builder(
const environment& e,
const coeff& x)
693 l.env =
const_cast<ap_environment_t*
>(e.get_ap_environment_t());
694 l.texpr0 = ap_texpr0_cst(
const_cast<ap_coeff_t*
>(x.get_ap_coeff_t()));
697inline texpr1::builder::builder(
const environment& e,
const scalar& x)
699 l.env =
const_cast<ap_environment_t*
>(e.get_ap_environment_t());
700 l.texpr0 = ap_texpr0_cst_scalar(
const_cast<ap_scalar_t*
>(x.get_ap_scalar_t()));
703inline texpr1::builder::builder(
const environment& e,
const mpq_class& x)
705 l.env =
const_cast<ap_environment_t*
>(e.get_ap_environment_t());
706 l.texpr0 = ap_texpr0_cst_scalar_mpq(
const_cast<mpq_class&
>(x).get_mpq_t());
709inline texpr1::builder::builder(
const environment& e, mpfr_t x)
711 l.env =
const_cast<ap_environment_t*
>(e.get_ap_environment_t());
712 l.texpr0 = ap_texpr0_cst_scalar_mpfr(x);
715inline texpr1::builder::builder(
const environment& e,
int x)
717 l.env =
const_cast<ap_environment_t*
>(e.get_ap_environment_t());
718 l.texpr0 = ap_texpr0_cst_scalar_int(x);
721inline texpr1::builder::builder(
const environment& e,
long x)
723 l.env =
const_cast<ap_environment_t*
>(e.get_ap_environment_t());
724 l.texpr0 = ap_texpr0_cst_scalar_int(x);
727inline texpr1::builder::builder(
const environment& e,
double x)
729 l.env =
const_cast<ap_environment_t*
>(e.get_ap_environment_t());
730 l.texpr0 = ap_texpr0_cst_scalar_double(x);
733inline texpr1::builder::builder(
const environment& e,
const frac& x)
735 l.env =
const_cast<ap_environment_t*
>(e.get_ap_environment_t());
736 l.texpr0 = ap_texpr0_cst_scalar_frac(x.num, x.den);
739inline texpr1::builder::builder(
const environment& e,
const interval& x)
741 l.env =
const_cast<ap_environment_t*
>(e.get_ap_environment_t());
742 l.texpr0 = ap_texpr0_cst_interval(
const_cast<ap_interval_t*
>(x.get_ap_interval_t()));
745inline texpr1::builder::builder(
const environment& e,
const scalar& inf,
const scalar& sup)
747 l.env =
const_cast<ap_environment_t*
>(e.get_ap_environment_t());
748 l.texpr0 = ap_texpr0_cst_interval_scalar(
const_cast<ap_scalar_t*
>(inf.get_ap_scalar_t()),
749 const_cast<ap_scalar_t*
>(sup.get_ap_scalar_t()));
752inline texpr1::builder::builder(
const environment& e,
const mpq_class& inf,
const mpq_class& sup)
754 l.env =
const_cast<ap_environment_t*
>(e.get_ap_environment_t());
755 l.texpr0 = ap_texpr0_cst_interval_mpq(
const_cast<mpq_class&
>(inf).get_mpq_t(),
756 const_cast<mpq_class&
>(sup).get_mpq_t());
759inline texpr1::builder::builder(
const environment& e, mpfr_t inf, mpfr_t sup)
761 l.env =
const_cast<ap_environment_t*
>(e.get_ap_environment_t());
762 l.texpr0 = ap_texpr0_cst_interval_mpfr(inf,sup);
765inline texpr1::builder::builder(
const environment& e,
int inf,
int sup)
767 l.env =
const_cast<ap_environment_t*
>(e.get_ap_environment_t());
768 l.texpr0 = ap_texpr0_cst_interval_int(inf, sup);
771inline texpr1::builder::builder(
const environment& e,
long inf,
long sup)
773 l.env =
const_cast<ap_environment_t*
>(e.get_ap_environment_t());
774 l.texpr0 = ap_texpr0_cst_interval_int(inf, sup);
777inline texpr1::builder::builder(
const environment& e,
double inf,
double sup)
779 l.env =
const_cast<ap_environment_t*
>(e.get_ap_environment_t());
780 l.texpr0 = ap_texpr0_cst_interval_double(inf, sup);
783inline texpr1::builder::builder(
const environment& e,
const frac& inf,
const frac& sup)
785 l.env =
const_cast<ap_environment_t*
>(e.get_ap_environment_t());
786 l.texpr0 = ap_texpr0_cst_interval_frac(inf.num, inf.den, sup.num, sup.den);
789inline texpr1::builder::builder(
const environment& e, top t)
791 l.env =
const_cast<ap_environment_t*
>(e.get_ap_environment_t());
792 l.texpr0 = ap_texpr0_cst_interval_top();
795inline texpr1::builder::builder(
const environment& e,
const var& v)
797 l.env =
const_cast<ap_environment_t*
>(e.get_ap_environment_t());
798 ap_dim_t d = ap_environment_dim_of_var(l.env, v.get_ap_var_t());
800 throw std::invalid_argument(
"texpr1::builder::builder(const environment&, const var&) variable not in environment");
801 l.texpr0 = ap_texpr0_dim(d);
804inline texpr1::builder::builder(ap_texpr_op_t op,
const builder& argA, ap_texpr_rtype_t rtype, ap_texpr_rdir_t rdir)
806 if (!ap_texpr_is_unop(op))
807 throw std::invalid_argument(
"apron::texpr1::builder::builder(ap_texpr_op_t, const builder&, ap_texpr_rtype_t, ap_texpr_rdir_t) not a unary operator");
809 l.texpr0 = ap_texpr0_unop(op,
810 const_cast<ap_texpr0_t*
>(argA.l.texpr0),
814inline texpr1::builder::builder(ap_texpr_op_t op,
const builder& argA,
const builder& argB, ap_texpr_rtype_t rtype, ap_texpr_rdir_t rdir)
816 if (!ap_texpr_is_binop(op))
817 throw std::invalid_argument(
"apron::texpr1::builder::builder(ap_texpr_op_t, const builder&, const builder&, ap_texpr_rtype_t, ap_texpr_rdir_t) not a binary operator");
819 l.texpr0 = ap_texpr0_binop(op,
820 const_cast<ap_texpr0_t*
>(argA.l.texpr0),
821 const_cast<ap_texpr0_t*
>(argB.l.texpr0),
828inline texpr1::builder
unary(ap_texpr_op_t op,
const texpr1::builder& a,
829 ap_texpr_rtype_t rtype = AP_RTYPE_REAL,
830 ap_texpr_rdir_t rdir = AP_RDIR_NEAREST)
832 return texpr1::builder(op, a, rtype, rdir);
835inline texpr1::builder
binary(ap_texpr_op_t op,
const texpr1::builder& a,
const texpr1::builder& b,
836 ap_texpr_rtype_t rtype = AP_RTYPE_REAL,
837 ap_texpr_rdir_t rdir = AP_RDIR_NEAREST)
839 return texpr1::builder(op, a, b, rtype, rdir);
843inline texpr1::builder
add(
const texpr1::builder& a,
const texpr1::builder& b,
844 ap_texpr_rtype_t rtype = AP_RTYPE_REAL,
845 ap_texpr_rdir_t rdir = AP_RDIR_NEAREST)
847 return texpr1::builder(AP_TEXPR_ADD, a, b, rtype, rdir);
850inline texpr1::builder
sub(
const texpr1::builder& a,
const texpr1::builder& b,
851 ap_texpr_rtype_t rtype = AP_RTYPE_REAL,
852 ap_texpr_rdir_t rdir = AP_RDIR_NEAREST)
854 return texpr1::builder(AP_TEXPR_SUB, a, b, rtype, rdir);
857inline texpr1::builder
mul(
const texpr1::builder& a,
const texpr1::builder& b,
858 ap_texpr_rtype_t rtype = AP_RTYPE_REAL,
859 ap_texpr_rdir_t rdir = AP_RDIR_NEAREST)
861 return texpr1::builder(AP_TEXPR_MUL, a, b, rtype, rdir);
864inline texpr1::builder
div(
const texpr1::builder& a,
const texpr1::builder& b,
865 ap_texpr_rtype_t rtype = AP_RTYPE_REAL,
866 ap_texpr_rdir_t rdir = AP_RDIR_NEAREST)
868 return texpr1::builder(AP_TEXPR_DIV, a, b, rtype, rdir);
871inline texpr1::builder
mod(
const texpr1::builder& a,
const texpr1::builder& b,
872 ap_texpr_rtype_t rtype = AP_RTYPE_REAL,
873 ap_texpr_rdir_t rdir = AP_RDIR_NEAREST)
875 return texpr1::builder(AP_TEXPR_MOD, a, b, rtype, rdir);
878inline texpr1::builder
pow(
const texpr1::builder& a,
const texpr1::builder& b,
879 ap_texpr_rtype_t rtype = AP_RTYPE_REAL,
880 ap_texpr_rdir_t rdir = AP_RDIR_NEAREST)
882 return texpr1::builder(AP_TEXPR_POW, a, b, rtype, rdir);
885inline texpr1::builder
neg(
const texpr1::builder& a,
886 ap_texpr_rtype_t rtype = AP_RTYPE_REAL,
887 ap_texpr_rdir_t rdir = AP_RDIR_NEAREST)
889 return texpr1::builder(AP_TEXPR_NEG, a, rtype, rdir);
892inline texpr1::builder
cast(
const texpr1::builder& a, ap_texpr_rtype_t rtype,
893 ap_texpr_rdir_t rdir = AP_RDIR_NEAREST)
895 return texpr1::builder(AP_TEXPR_CAST, a, rtype, rdir);
898inline texpr1::builder
floor(
const texpr1::builder& a)
900 return texpr1::builder(AP_TEXPR_CAST, a, AP_RTYPE_INT, AP_RDIR_DOWN);
903inline texpr1::builder
ceil(
const texpr1::builder& a)
905 return texpr1::builder(AP_TEXPR_CAST, a, AP_RTYPE_INT, AP_RDIR_UP);
908inline texpr1::builder
trunc(
const texpr1::builder& a)
910 return texpr1::builder(AP_TEXPR_CAST, a, AP_RTYPE_INT, AP_RDIR_ZERO);
913inline texpr1::builder
sqrt(
const texpr1::builder& a,
914 ap_texpr_rtype_t rtype = AP_RTYPE_REAL,
915 ap_texpr_rdir_t rdir = AP_RDIR_NEAREST)
917 return texpr1::builder(AP_TEXPR_SQRT, a, rtype, rdir);
920inline texpr1::builder
operator+(
const texpr1::builder& a)
925inline texpr1::builder
operator-(
const texpr1::builder& a)
930inline texpr1::builder
operator+(
const texpr1::builder& a,
const texpr1::builder& b)
935inline texpr1::builder
operator-(
const texpr1::builder& a,
const texpr1::builder& b)
940inline texpr1::builder
operator*(
const texpr1::builder& a,
const texpr1::builder& b)
945inline texpr1::builder
operator/(
const texpr1::builder& a,
const texpr1::builder& b)
950inline texpr1::builder
operator%(
const texpr1::builder& a,
const texpr1::builder& b)
955inline texpr1::builder
operator^(
const texpr1::builder& a,
const texpr1::builder& b)
964inline bool texpr1::builder::is_zero()
const
966 return l.texpr0->discr==AP_TEXPR_CST && ap_coeff_zero(
const_cast<ap_coeff_t*
>(&l.texpr0->val.cst));
973inline texpr1::builder::~builder()
975 switch(l.texpr0->discr){
976 case AP_TEXPR_CST: ap_coeff_clear(&l.texpr0->val.cst);
break;
977 case AP_TEXPR_DIM:
break;
978 case AP_TEXPR_NODE: free(l.texpr0->val.node);
break;
979 default: assert(
false);
988inline ap_texpr1_t* texpr1::builder::get_ap_texpr1_t()
993inline const ap_texpr1_t* texpr1::builder::get_ap_texpr1_t()
const
texpr1::builder operator+(const texpr1::builder &a)
Definition apxx_texpr1_inline.hh:920
texpr1::builder operator^(const texpr1::builder &a, const texpr1::builder &b)
Definition apxx_texpr1_inline.hh:955
std::ostream & operator<<(std::ostream &os, const texpr1 &s)
Definition apxx_texpr1_inline.hh:159
texpr1::builder operator%(const texpr1::builder &a, const texpr1::builder &b)
Definition apxx_texpr1_inline.hh:950
texpr1::builder trunc(const texpr1::builder &a)
Definition apxx_texpr1_inline.hh:908
texpr1::builder unary(ap_texpr_op_t op, const texpr1::builder &a, ap_texpr_rtype_t rtype=AP_RTYPE_REAL, ap_texpr_rdir_t rdir=AP_RDIR_NEAREST)
Definition apxx_texpr1_inline.hh:828
texpr1::builder cast(const texpr1::builder &a, ap_texpr_rtype_t rtype, ap_texpr_rdir_t rdir=AP_RDIR_NEAREST)
Definition apxx_texpr1_inline.hh:892
texpr1::builder div(const texpr1::builder &a, const texpr1::builder &b, ap_texpr_rtype_t rtype=AP_RTYPE_REAL, ap_texpr_rdir_t rdir=AP_RDIR_NEAREST)
Definition apxx_texpr1_inline.hh:864
texpr1::builder neg(const texpr1::builder &a, ap_texpr_rtype_t rtype=AP_RTYPE_REAL, ap_texpr_rdir_t rdir=AP_RDIR_NEAREST)
Definition apxx_texpr1_inline.hh:885
texpr1::builder operator/(const texpr1::builder &a, const texpr1::builder &b)
Definition apxx_texpr1_inline.hh:945
texpr1::builder sqrt(const texpr1::builder &a, ap_texpr_rtype_t rtype=AP_RTYPE_REAL, ap_texpr_rdir_t rdir=AP_RDIR_NEAREST)
Definition apxx_texpr1_inline.hh:913
texpr1::builder operator-(const texpr1::builder &a)
Definition apxx_texpr1_inline.hh:925
texpr1::builder add(const texpr1::builder &a, const texpr1::builder &b, ap_texpr_rtype_t rtype=AP_RTYPE_REAL, ap_texpr_rdir_t rdir=AP_RDIR_NEAREST)
Definition apxx_texpr1_inline.hh:843
texpr1::builder operator*(const texpr1::builder &a, const texpr1::builder &b)
Definition apxx_texpr1_inline.hh:940
texpr1::builder mul(const texpr1::builder &a, const texpr1::builder &b, ap_texpr_rtype_t rtype=AP_RTYPE_REAL, ap_texpr_rdir_t rdir=AP_RDIR_NEAREST)
Definition apxx_texpr1_inline.hh:857
texpr1::builder ceil(const texpr1::builder &a)
Definition apxx_texpr1_inline.hh:903
texpr1::builder floor(const texpr1::builder &a)
Definition apxx_texpr1_inline.hh:898
texpr1::builder mod(const texpr1::builder &a, const texpr1::builder &b, ap_texpr_rtype_t rtype=AP_RTYPE_REAL, ap_texpr_rdir_t rdir=AP_RDIR_NEAREST)
Definition apxx_texpr1_inline.hh:871
texpr1::builder binary(ap_texpr_op_t op, const texpr1::builder &a, const texpr1::builder &b, ap_texpr_rtype_t rtype=AP_RTYPE_REAL, ap_texpr_rdir_t rdir=AP_RDIR_NEAREST)
Definition apxx_texpr1_inline.hh:835
void apxx_texpr0_env_ostream(std::ostream &os, ap_environment_t *env, ap_texpr0_t *a)
texpr1::builder pow(const texpr1::builder &a, const texpr1::builder &b, ap_texpr_rtype_t rtype=AP_RTYPE_REAL, ap_texpr_rdir_t rdir=AP_RDIR_NEAREST)
Definition apxx_texpr1_inline.hh:878
texpr1::builder sub(const texpr1::builder &a, const texpr1::builder &b, ap_texpr_rtype_t rtype=AP_RTYPE_REAL, ap_texpr_rdir_t rdir=AP_RDIR_NEAREST)
Definition apxx_texpr1_inline.hh:850