18 inline void texpr1::init_from(ap_environment_t* e, ap_texpr0_t* x)
24 inline void texpr1::init_from(ap_texpr1_t* x)
30 inline texpr1::texpr1(ap_texpr1_t* x)
35 inline texpr1::texpr1(
const texpr1& x)
37 init_from(ap_texpr1_copy(const_cast<ap_texpr1_t*>(&x.l)));
40 inline texpr1::texpr1(
const builder& x)
42 init_from(ap_texpr1_copy(const_cast<ap_texpr1_t*>(x.get_ap_texpr1_t())));
45 inline texpr1::texpr1(
const const_iterator& x)
47 init_from(ap_texpr1_copy(const_cast<ap_texpr1_t*>(x.get_ap_texpr1_t())));
50 inline 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"));
58 inline 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())));
64 inline 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())));
70 inline 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())));
77 inline texpr1::texpr1(
const linexpr1& l)
79 init_from(ap_texpr1_from_linexpr1(const_cast<ap_linexpr1_t*>(l.get_ap_linexpr1_t())));
82 inline 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");
92 inline 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&)");
107 inline texpr1::~texpr1()
109 ap_environment_free(l.env);
110 ap_texpr0_free(l.texpr0);
117 inline 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);
126 inline 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);
135 inline 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);
144 inline 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())));
159 inline std::ostream&
operator<< (std::ostream& os,
const texpr1& s)
161 return os << s.root();
164 inline void texpr1::print(FILE* stream)
const 166 root().print(stream);
174 inline 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");
187 inline environment texpr1::get_environment()
const 189 return root().get_environment();
192 inline texpr0::const_iterator texpr1::get_texpr0()
const 194 return root().get_texpr0();
197 inline texpr0::iterator texpr1::get_texpr0()
199 return root().get_texpr0();
204 return root().equal(x);
207 inline size_t texpr1::depth()
const 209 return root().depth();
212 inline bool texpr1::is_zero()
const 214 return root().is_zero();
217 inline size_t texpr1::size()
const 219 return root().size();
222 inline bool texpr1::has_var(
const var& v)
const 224 return root().has_var(v);
227 inline bool texpr1::is_interval_cst()
const 229 return root().is_interval_cst();
232 inline bool texpr1::is_interval_linear()
const 234 return root().is_interval_linear();
237 inline bool texpr1::is_interval_polynomial()
const 239 return root().is_interval_polynomial();
242 inline bool texpr1::is_interval_polyfrac()
const 244 return root().is_interval_polyfrac();
247 inline bool texpr1::is_scalar()
const 249 return root().is_scalar();
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&)");
271 inline ap_texpr1_t* texpr1::get_ap_texpr1_t()
276 inline const ap_texpr1_t* texpr1::get_ap_texpr1_t()
const 295 inline texpr1::const_iterator texpr1::root()
const 297 return const_iterator(const_cast<ap_texpr1_t*>(&l));
300 inline texpr1::const_iterator::const_iterator(ap_texpr0_t* ll, ap_environment_t* ee)
306 inline texpr1::const_iterator::const_iterator(ap_texpr1_t* l)
310 inline texpr1::const_iterator::const_iterator(
const texpr1& e)
311 : l(*e.get_ap_texpr1_t())
314 inline texpr1::const_iterator::const_iterator(
const const_iterator& i)
322 inline environment texpr1::const_iterator::get_environment()
const 324 return ap_environment_copy(l.env);
327 inline texpr0::const_iterator texpr1::const_iterator::get_texpr0()
const 332 inline ap_texpr_discr_t texpr1::const_iterator::get_discr()
const 334 return l.texpr0->discr;
337 inline 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);
343 inline 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]);
349 inline 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;
355 inline 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;
361 inline 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;
367 inline 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;
377 inline texpr1::const_iterator& texpr1::const_iterator::operator=(
const const_iterator& i)
383 inline 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);
390 inline 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);
397 inline 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);
410 inline 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());
417 inline void texpr1::const_iterator::print(FILE* stream)
const 419 ap_texpr1_fprint(stream, const_cast<ap_texpr1_t*>(&l));
428 return ap_texpr1_equal(const_cast<ap_texpr1_t*>(&l),
429 const_cast<ap_texpr1_t*>(x.get_ap_texpr1_t()));
432 inline size_t texpr1::const_iterator::depth()
const 434 return ap_texpr0_depth(const_cast<ap_texpr0_t*>(l.texpr0));
437 inline 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);
442 inline size_t texpr1::const_iterator::size()
const 444 return ap_texpr0_size(const_cast<ap_texpr0_t*>(l.texpr0));
447 inline 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()));
453 inline bool texpr1::const_iterator::is_interval_cst()
const 455 return ap_texpr1_is_interval_cst(const_cast<ap_texpr1_t*>(&l));
458 inline bool texpr1::const_iterator::is_interval_linear()
const 460 return ap_texpr1_is_interval_linear(const_cast<ap_texpr1_t*>(&l));
463 inline bool texpr1::const_iterator::is_interval_polynomial()
const 465 return ap_texpr1_is_interval_polynomial(const_cast<ap_texpr1_t*>(&l));
468 inline bool texpr1::const_iterator::is_interval_polyfrac()
const 470 return ap_texpr1_is_interval_polyfrac(const_cast<ap_texpr1_t*>(&l));
473 inline bool texpr1::const_iterator::is_scalar()
const 475 return ap_texpr1_is_scalar(const_cast<ap_texpr1_t*>(&l));
482 inline ap_texpr1_t* texpr1::const_iterator::get_ap_texpr1_t()
487 inline const ap_texpr1_t* texpr1::const_iterator::get_ap_texpr1_t()
const 496 inline texpr1::iterator texpr1::root()
501 inline texpr1::iterator::iterator(ap_texpr0_t* l, ap_environment_t* e)
502 : texpr1::const_iterator(l,e)
505 inline texpr1::iterator::iterator(ap_texpr1_t* l)
506 : texpr1::const_iterator(l)
510 inline texpr1::iterator::iterator(texpr1& e)
511 : texpr1::const_iterator(e.get_ap_texpr1_t())
514 inline texpr1::iterator::iterator(
const iterator& i)
515 : texpr1::const_iterator(i)
523 inline 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);
536 inline texpr0::iterator texpr1::iterator::get_texpr0()
const 542 inline 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);
548 inline 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;
556 inline 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;
562 inline 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;
568 inline 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;
574 inline 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;
584 inline texpr1::iterator& texpr1::iterator::operator=(
const iterator& i)
590 inline 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);
597 inline 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);
604 inline 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);
615 inline ap_texpr1_t* texpr1::iterator::get_ap_texpr1_t()
620 inline const ap_texpr1_t* texpr1::iterator::get_ap_texpr1_t()
const 630 inline 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");
645 inline void texpr1::builder::init_from(ap_environment_t* e, ap_texpr0_t* x)
653 inline texpr1::builder::builder(ap_texpr1_t* x)
658 inline texpr1::builder::builder(
const builder& x)
660 init_from(const_cast<ap_texpr1_t*>(&x.l));
663 inline texpr1::builder::builder(
const const_iterator& x)
665 init_from(const_cast<ap_texpr1_t*>(x.get_ap_texpr1_t()));
668 inline texpr1::builder::builder(
const texpr1& x)
670 init_from(const_cast<ap_texpr1_t*>(x.get_ap_texpr1_t()));
673 inline 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()));
679 inline 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()));
685 inline 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()));
691 inline 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()));
697 inline 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()));
703 inline 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());
709 inline 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);
715 inline 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);
721 inline 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);
727 inline 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);
733 inline 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);
739 inline 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()));
745 inline 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()));
752 inline 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());
759 inline 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);
765 inline 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);
771 inline 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);
777 inline 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);
783 inline 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);
789 inline 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();
795 inline 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);
804 inline 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),
814 inline 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),
828 inline 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);
835 inline 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);
843 inline 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);
850 inline 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);
857 inline 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);
864 inline 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);
871 inline 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);
878 inline 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);
885 inline 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);
892 inline 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);
898 inline texpr1::builder
floor(
const texpr1::builder& a)
900 return texpr1::builder(AP_TEXPR_CAST, a, AP_RTYPE_INT, AP_RDIR_DOWN);
903 inline texpr1::builder
ceil(
const texpr1::builder& a)
905 return texpr1::builder(AP_TEXPR_CAST, a, AP_RTYPE_INT, AP_RDIR_UP);
908 inline texpr1::builder
trunc(
const texpr1::builder& a)
910 return texpr1::builder(AP_TEXPR_CAST, a, AP_RTYPE_INT, AP_RDIR_ZERO);
913 inline 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);
920 inline texpr1::builder
operator+(
const texpr1::builder& a)
925 inline texpr1::builder
operator-(
const texpr1::builder& a)
930 inline texpr1::builder
operator+(
const texpr1::builder& a,
const texpr1::builder& b)
935 inline texpr1::builder
operator-(
const texpr1::builder& a,
const texpr1::builder& b)
940 inline texpr1::builder
operator*(
const texpr1::builder& a,
const texpr1::builder& b)
945 inline texpr1::builder
operator/(
const texpr1::builder& a,
const texpr1::builder& b)
950 inline texpr1::builder
operator%(
const texpr1::builder& a,
const texpr1::builder& b)
955 inline texpr1::builder
operator^(
const texpr1::builder& a,
const texpr1::builder& b)
964 inline 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));
973 inline 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);
988 inline ap_texpr1_t* texpr1::builder::get_ap_texpr1_t()
993 inline const ap_texpr1_t* texpr1::builder::get_ap_texpr1_t()
const 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 operator-(const texpr1::builder &a)
Definition: apxx_texpr1_inline.hh:925
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 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 operator *(const texpr1::builder &a, const texpr1::builder &b)
Definition: apxx_texpr1_inline.hh:940
bool equal(const linexpr0 &x, const linexpr0 &y)
Definition: apxx_linexpr0_inline.hh:293
texpr1::builder ceil(const texpr1::builder &a)
Definition: apxx_texpr1_inline.hh:903
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 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 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 floor(const texpr1::builder &a)
Definition: apxx_texpr1_inline.hh:898
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 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
texpr1::builder operator^(const texpr1::builder &a, const texpr1::builder &b)
Definition: apxx_texpr1_inline.hh:955
texpr1::builder operator/(const texpr1::builder &a, const texpr1::builder &b)
Definition: apxx_texpr1_inline.hh:945
abstract0 & substitute(manager &m, abstract0 &dst, const abstract0 &src, ap_dim_t dim, const linexpr0 &l, const abstract0 &inter=abstract0::null)
Definition: apxx_abstract0.hh:860
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 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 operator+(const texpr1::builder &a)
Definition: apxx_texpr1_inline.hh:920
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 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 trunc(const texpr1::builder &a)
Definition: apxx_texpr1_inline.hh:908