28inline tcons1::tcons1(ap_tcons1_t l) : l(l)
31inline tcons1::tcons1(
const environment& env, ap_constyp_t constyp)
33 l.tcons0 = ap_tcons0_make(constyp, NULL, NULL);
34 l.env = ap_environment_copy(
const_cast<ap_environment_t*
>(env.get_ap_environment_t()));
37inline tcons1::tcons1(ap_constyp_t constyp,
const texpr1::builder& t)
39 ap_texpr1_t* x = ap_texpr1_copy(
const_cast<ap_texpr1_t*
>(t.get_ap_texpr1_t()));
40 l = ap_tcons1_make(constyp, x, NULL);
44inline tcons1::tcons1(ap_constyp_t constyp,
const texpr1::builder& t,
const scalar& modulo)
46 ap_scalar_t* mmodulo = ap_scalar_alloc_set(
const_cast<ap_scalar_t*
>(modulo.get_ap_scalar_t()));
47 ap_texpr1_t* x = ap_texpr1_copy(
const_cast<ap_texpr1_t*
>(t.get_ap_texpr1_t()));
48 l = ap_tcons1_make(constyp, x, mmodulo);
52inline tcons1::tcons1(
const tcons1& x)
53 : l(ap_tcons1_copy(const_cast<ap_tcons1_t*>(&x.l)))
56inline tcons1::tcons1(
const tcons1& x,
const environment& e)
58 if (!x.l.tcons0.texpr0)
59 throw std::invalid_argument(
"apron::tcons1::tcons1(const tcons1&, const enviroment&) empty expression");
61 ap_tcons1_extend_environment(&l,
62 const_cast<ap_tcons1_t*
>(&x.l),
63 const_cast<ap_environment_t*
>(e.get_ap_environment_t()));
65 throw std::invalid_argument(
"apron::tcons1::tcons1(const tcons1&, const enviroment&) not a super-environment");
68inline tcons1::tcons1(
const environment& e, unsat x)
70 l.tcons0 = ap_tcons0_make_unsat();
71 l.env = ap_environment_copy(
const_cast<ap_environment_t*
>(e.get_ap_environment_t()));
74inline tcons1::tcons1(
const lincons1& x)
75 : l(ap_tcons1_from_lincons1(const_cast<ap_lincons1_t*>(x.get_ap_lincons1_t())))
82inline tcons1::~tcons1()
91inline tcons1
operator>=(
const texpr1::builder& a,
const texpr1::builder& b)
93 if (b.is_zero())
return tcons1(AP_CONS_SUPEQ,a);
94 else if (a.is_zero())
return tcons1(AP_CONS_SUPEQ,-b);
95 else return tcons1(AP_CONS_SUPEQ,a-b);
98inline tcons1
operator<=(
const texpr1::builder& a,
const texpr1::builder& b)
100 if (b.is_zero())
return tcons1(AP_CONS_SUPEQ,-a);
101 else if (a.is_zero())
return tcons1(AP_CONS_SUPEQ,b);
102 else return tcons1(AP_CONS_SUPEQ,b-a);
105inline tcons1
operator> (
const texpr1::builder& a,
const texpr1::builder& b)
107 if (b.is_zero())
return tcons1(AP_CONS_SUP,a);
108 else if (a.is_zero())
return tcons1(AP_CONS_SUP,-b);
109 else return tcons1(AP_CONS_SUP,a-b);
112inline tcons1
operator< (
const texpr1::builder& a,
const texpr1::builder& b)
114 if (b.is_zero())
return tcons1(AP_CONS_SUP,-a);
115 else if (a.is_zero())
return tcons1(AP_CONS_SUP,b);
116 else return tcons1(AP_CONS_SUP,b-a);
119inline tcons1
operator==(
const texpr1::builder& a,
const texpr1::builder& b)
121 if (b.is_zero())
return tcons1(AP_CONS_EQ,a);
122 else if (a.is_zero())
return tcons1(AP_CONS_EQ,b);
123 else return tcons1(AP_CONS_EQ,a-b);
126inline tcons1
operator!=(
const texpr1::builder& a,
const texpr1::builder& b)
128 if (b.is_zero())
return tcons1(AP_CONS_DISEQ,a);
129 else if (a.is_zero())
return tcons1(AP_CONS_DISEQ,b);
130 else return tcons1(AP_CONS_DISEQ,a-b);
137inline tcons1& tcons1::operator= (
const tcons1& x)
141 l = ap_tcons1_copy(
const_cast<ap_tcons1_t*
>(&x.l));
146inline tcons1& tcons1::operator= (unsat x)
148 ap_tcons0_clear(&l.tcons0);
149 l.tcons0 = ap_tcons0_make_unsat();
153inline tcons1& tcons1::operator= (
const lincons1& x)
156 l = ap_tcons1_from_lincons1(
const_cast<ap_lincons1_t*
>(x.get_ap_lincons1_t()));
160inline void tcons1::set_modulo(
const scalar& c)
162 get_tcons0().set_modulo(c);
165inline void tcons1::set_texpr(
const texpr1::builder& c)
167 ap_texpr1_t* cc = ap_texpr1_copy(
const_cast<ap_texpr1_t*
>(c.get_ap_texpr1_t()));
168 if (l.tcons0.texpr0) ap_texpr0_free(l.tcons0.texpr0);
169 ap_environment_free(l.env);
170 l.tcons0.texpr0 = cc->texpr0;
179inline void tcons1::extend_environment(
const environment& e)
182 ap_tcons1_extend_environment_with(&l,
183 const_cast<ap_environment_t*
>(e.get_ap_environment_t()));
185 throw std::invalid_argument(
"apron::tcons1::extend_environment(const environment&) not a super-environment");
192inline environment tcons1::get_environment()
const
194 return ap_environment_copy(l.env);
197inline const tcons0& tcons1::get_tcons0()
const
199 return reinterpret_cast<const tcons0&
>(l.tcons0);
202inline tcons0& tcons1::get_tcons0()
204 return reinterpret_cast<tcons0&
>(l.tcons0);
207inline ap_constyp_t& tcons1::get_constyp()
209 return get_tcons0().get_constyp();
212inline const ap_constyp_t& tcons1::get_constyp()
const
214 return get_tcons0().get_constyp();
217inline bool tcons1::has_modulo()
const
219 return get_tcons0().has_modulo();
222inline bool tcons1::has_texpr()
const
224 return get_tcons0().has_texpr();
227inline scalar& tcons1::get_modulo()
229 if (!get_tcons0().has_modulo())
throw std::invalid_argument(
"apron::tcons1::get_modulo() empty scalar");
230 return get_tcons0().get_modulo();
233inline const scalar& tcons1::get_modulo()
const
235 if (!get_tcons0().has_modulo())
throw std::invalid_argument(
"apron::tcons1::get_modulo() empty scalar");
236 return get_tcons0().get_modulo();
239inline texpr1::iterator tcons1::get_texpr()
241 if (!l.tcons0.texpr0)
throw std::invalid_argument(
"apron::tcons1::get_texpr() empty expression");
242 return texpr1::iterator(l.tcons0.texpr0,l.env);
245inline texpr1::const_iterator tcons1::get_texpr()
const
247 if (!l.tcons0.texpr0)
throw std::invalid_argument(
"apron::tcons1::get_texpr() empty expression");
248 return texpr1::const_iterator(l.tcons0.texpr0,l.env);
256inline std::ostream&
operator<< (std::ostream& os,
const tcons1& s)
259 switch (s.get_constyp()) {
260 case AP_CONS_EQ:
return os <<
" = 0";
261 case AP_CONS_SUPEQ:
return os <<
" >= 0";
262 case AP_CONS_SUP:
return os <<
" > 0";
263 case AP_CONS_EQMOD:
return os <<
" = 0 mod " << s.get_modulo();
264 case AP_CONS_DISEQ:
return os <<
" != 0";
265 default:
throw std::invalid_argument(
"apron::operator<<(ostream&, const tcons1&) invalid constraint type");
269inline void tcons1::print(FILE* stream)
const
271 ap_tcons1_fprint(stream,
const_cast<ap_tcons1_t*
>(&l));
278inline bool tcons1::is_interval_cst()
const
280 return get_texpr().is_interval_cst();
283inline bool tcons1::is_interval_linear()
const
285 return get_texpr().is_interval_linear();
288inline bool tcons1::is_interval_polynomial()
const
290 return get_texpr().is_interval_polynomial();
293inline bool tcons1::is_interval_polyfrac()
const
295 return get_texpr().is_interval_polyfrac();
298inline bool tcons1::is_scalar()
const
300 return get_texpr().is_scalar();
307inline const ap_tcons1_t* tcons1::get_ap_tcons1_t()
const
312inline ap_tcons1_t* tcons1::get_ap_tcons1_t()
330inline tcons1_array::tcons1_array(ap_tcons1_array_t& a) : a(a)
333inline tcons1_array::tcons1_array(
const environment& e,
const tcons0_array& x)
335 size_t sz = x.size();
336 a = ap_tcons1_array_make(
const_cast<ap_environment_t*
>(e.get_ap_environment_t()), sz);
337 for (
size_t i=0; i<sz; i++)
338 a.tcons0_array.p[i] = ap_tcons0_copy(&x.a.p[i]);
341inline tcons1_array::tcons1_array(
const environment& e,
size_t size)
343 a = ap_tcons1_array_make(
const_cast<ap_environment_t*
>(e.get_ap_environment_t()), size);
346inline tcons1_array::tcons1_array(
const tcons1_array& x)
348 size_t sz = x.size();
349 a = ap_tcons1_array_make(x.get_environment().get_ap_environment_t(), sz);
350 for (
size_t i=0; i<sz; i++)
351 a.tcons0_array.p[i] = ap_tcons0_copy(&x.a.tcons0_array.p[i]);
354inline tcons1_array::tcons1_array(
const tcons1_array& x,
const environment& e)
357 ap_tcons1_array_extend_environment(&a,
358 const_cast<ap_tcons1_array_t*
>(&x.a),
359 const_cast<ap_environment_t*
>(e.get_ap_environment_t()));
360 if (r)
throw std::invalid_argument(
"apron::tcons1_array::tcons1_array(const tcons1_array, const environment&) not a super-environment");
363inline tcons1_array::tcons1_array(
size_t sz,
const tcons1 x[])
365 if (sz<1)
throw std::invalid_argument(
"apron::tcons1_array::tcons1_array(size_t, const tcons1) null size");
366 a = ap_tcons1_array_make(x[0].get_environment().get_ap_environment_t(), sz);
367 for (
size_t i=0; i<sz; i++)
368 a.tcons0_array.p[i] = ap_tcons0_copy(
const_cast<ap_tcons0_t*
>
369 (x[i].get_tcons0().get_ap_tcons0_t()));
372inline tcons1_array::tcons1_array(
const std::vector<tcons1>& x)
374 size_t sz = x.size();
375 if (sz<1)
throw std::invalid_argument(
"apron::tcons1_array::tcons1_array(const vector<tcons1>&) null size");
376 a = ap_tcons1_array_make(x[0].get_environment().get_ap_environment_t(), sz);
377 for (
size_t i=0; i<sz; i++)
378 a.tcons0_array.p[i] = ap_tcons0_copy(
const_cast<ap_tcons0_t*
>
379 (x[i].get_tcons0().get_ap_tcons0_t()));
386inline tcons1_array::~tcons1_array()
388 ap_tcons1_array_clear(&a);
395inline tcons1_array& tcons1_array::operator= (
const tcons1_array& x)
398 size_t sz = x.size();
399 ap_tcons1_array_clear(&a);
400 a = ap_tcons1_array_make(x.get_environment().get_ap_environment_t(), sz);
401 for (
size_t i=0; i<sz; i++)
402 a.tcons0_array.p[i] = ap_tcons0_copy(&x.a.tcons0_array.p[i]);
407inline tcons1_array& tcons1_array::operator= (
const tcons1 x[])
410 for (
size_t i=0; i<sz; i++) {
411 ap_tcons0_clear(&a.tcons0_array.p[i]);
412 a.tcons0_array.p[i] = ap_tcons0_copy(
const_cast<ap_tcons0_t*
>
413 (x[i].get_tcons0().get_ap_tcons0_t()));
418inline tcons1_array& tcons1_array::operator= (
const std::vector<tcons1>& x)
420 size_t size = x.size();
422 ap_tcons1_array_t aa = ap_tcons1_array_make(a.env,0);
423 ap_tcons1_array_clear(&a);
427 ap_tcons1_array_clear(&a);
428 a = ap_tcons1_array_make(x[0].get_environment().get_ap_environment_t(), size);
429 for (
size_t i=0; i<size; i++)
430 a.tcons0_array.p[i] = ap_tcons0_copy(
const_cast<ap_tcons0_t*
>
431 (x[i].get_tcons0().get_ap_tcons0_t()));
439inline void tcons1_array::resize(
size_t size)
441 ap_tcons0_array_resize(&a.tcons0_array, size);
444inline void tcons1_array::extend_environment(
const environment& e)
447 ap_tcons1_array_extend_environment_with(&a,
448 const_cast<ap_environment_t*
>(e.get_ap_environment_t()));
449 if (r)
throw std::invalid_argument(
"apron::tcons1_array::extend_environment(const environment&) not a super-environment");
456inline size_t tcons1_array::size()
const
458 return ap_tcons1_array_size(
const_cast<ap_tcons1_array_t*
>(&a));
461inline environment tcons1_array::get_environment()
const
463 return (ap_environment_copy(ap_tcons1_array_envref(
const_cast<ap_tcons1_array_t*
>(&a))));
466inline const tcons0_array& tcons1_array::get_tcons0_array()
const
468 return reinterpret_cast<tcons0_array&
>(
const_cast<ap_tcons0_array_t&
>(a.tcons0_array));
471inline tcons0_array& tcons1_array::get_tcons0_array()
473 return reinterpret_cast<tcons0_array&
>(a.tcons0_array);
476inline tcons1 tcons1_array::get(
size_t i)
const
478 if (i>=size())
throw std::out_of_range(
"apron::tcons1_array::get(size_t)");
479 ap_tcons1_t c = ap_tcons1_array_get(
const_cast<ap_tcons1_array_t*
>(&a),i);
480 ap_tcons1_t cc = ap_tcons1_copy(&c);
484inline void tcons1_array::set(
size_t i,
const tcons1& x)
486 if (i>=size())
throw std::out_of_range(
"apron::tcons1_array::set(size_t, const tcons1&)");
487 ap_tcons0_clear(&a.tcons0_array.p[i]);
488 a.tcons0_array.p[i] = ap_tcons0_copy(
const_cast<ap_tcons0_t*
>
489 (x.get_tcons0().get_ap_tcons0_t()));
496inline tcons1_array::operator std::vector<tcons1>()
const
499 tcons1 dummy(get_environment(),unsat());
500 std::vector<tcons1> v(sz,dummy);
501 for (
size_t i=0;i<sz;i++) {
502 ap_tcons1_t c = ap_tcons1_array_get(
const_cast<ap_tcons1_array_t*
>(&a),i);
503 v[i] = ap_tcons1_copy(&c);
512inline std::ostream&
operator<< (std::ostream& os,
const tcons1_array& s)
514 size_t sz = s.size();
516 for (
size_t i=0;i<sz;i++)
517 os << s.get(i) <<
"; ";
521inline void tcons1_array:: print(FILE* stream)
const
523 ap_tcons1_array_fprint(stream,
const_cast<ap_tcons1_array_t*
>(&a));
530inline const ap_tcons1_array_t* tcons1_array::get_ap_tcons1_array_t()
const
535inline ap_tcons1_array_t* tcons1_array::get_ap_tcons1_array_t()
tcons1 operator!=(const texpr1::builder &a, const texpr1::builder &b)
Definition apxx_tcons1_inline.hh:126
tcons1 operator>(const texpr1::builder &a, const texpr1::builder &b)
Definition apxx_tcons1_inline.hh:105
tcons1 operator>=(const texpr1::builder &a, const texpr1::builder &b)
Definition apxx_tcons1_inline.hh:91
std::ostream & operator<<(std::ostream &os, const tcons1 &s)
Definition apxx_tcons1_inline.hh:256
tcons1 operator<(const texpr1::builder &a, const texpr1::builder &b)
Definition apxx_tcons1_inline.hh:112
tcons1 operator<=(const texpr1::builder &a, const texpr1::builder &b)
Definition apxx_tcons1_inline.hh:98
tcons1 operator==(const texpr1::builder &a, const texpr1::builder &b)
Definition apxx_tcons1_inline.hh:119