23inline lincons0::lincons0(ap_lincons0_t l) : l(l) {}
25inline lincons0::lincons0(ap_constyp_t constyp)
27 ap_linexpr0_t* llin = ap_linexpr0_alloc(AP_LINEXPR_SPARSE,0);
28 l = ap_lincons0_make(constyp, llin, NULL);
31inline lincons0::lincons0(ap_constyp_t constyp,
const linexpr0& lin,
const scalar& modulo)
33 ap_linexpr0_t* llin = ap_linexpr0_copy(
const_cast<ap_linexpr0_t*
>(lin.get_ap_linexpr0_t()));
34 ap_scalar_t* mmodulo = ap_scalar_alloc_set(
const_cast<ap_scalar_t*
>(modulo.get_ap_scalar_t()));
35 l = ap_lincons0_make(constyp, llin, mmodulo);
38inline lincons0::lincons0(ap_constyp_t constyp,
const linexpr0& lin)
40 ap_linexpr0_t* llin = ap_linexpr0_copy(
const_cast<ap_linexpr0_t*
>(lin.get_ap_linexpr0_t()));
41 l = ap_lincons0_make(constyp, llin, NULL);
44inline lincons0::lincons0(
const lincons0& x)
46 l = ap_lincons0_copy(
const_cast<ap_lincons0_t*
>(&x.l));
49inline lincons0::lincons0(unsat x)
51 l = ap_lincons0_make_unsat();
54inline lincons0::lincons0(
const lincons0& x,
const dimchange& d)
56 if (!x.l.linexpr0)
throw std::invalid_argument(
"apron::lincons0::lincons0(const dimchange&) empty expression");
57 l = ap_lincons0_add_dimensions(
const_cast<ap_lincons0_t*
>(&x.l),
58 const_cast<ap_dimchange_t*
>(d.get_ap_dimchange_t()));
61inline lincons0::lincons0(
const lincons0& x,
const dimperm& d)
63 if (!x.l.linexpr0)
throw std::invalid_argument(
"apron::lincons0::lincons0(const dimperm&) empty expression");
64 l = ap_lincons0_permute_dimensions(
const_cast<ap_lincons0_t*
>(&x.l),
65 const_cast<ap_dimperm_t*
>(d.get_ap_dimperm_t()));
72inline lincons0::~lincons0()
74 ap_lincons0_clear(&l);
81inline lincons0& lincons0::operator= (
const lincons0& x)
84 ap_lincons0_clear(&l);
85 l = ap_lincons0_copy(
const_cast<ap_lincons0_t*
>(&x.l));
90inline lincons0& lincons0::operator= (unsat x)
92 ap_lincons0_clear(&l);
93 l = ap_lincons0_make_unsat();
101inline void lincons0::resize(
size_t size)
103 if (!l.linexpr0)
throw std::invalid_argument(
"apron::lincons0::resize(size_t) empty expression");
104 ap_linexpr0_realloc(l.linexpr0, size);
108inline void lincons0::add_dimensions(
const dimchange& d)
110 if (!l.linexpr0)
throw std::invalid_argument(
"apron::lincons0::add_dimensions(const dimchange&) empty expression");
111 ap_lincons0_add_dimensions_with(&l,
const_cast<ap_dimchange_t*
>(d.get_ap_dimchange_t()));
114inline void lincons0::permute_dimensions(
const dimperm& d)
116 if (!l.linexpr0)
throw std::invalid_argument(
"apron::lincons0::permute_dimensions(const dimperm&) empty expression");
117 ap_lincons0_permute_dimensions_with(&l,
const_cast<ap_dimperm_t*
>(d.get_ap_dimperm_t()));
126inline size_t lincons0::size()
const
128 if (!l.linexpr0)
throw std::invalid_argument(
"apron::lincons0::size() empty expression");
129 return ap_linexpr0_size(
const_cast<ap_linexpr0_t*
>(l.linexpr0));
135inline ap_constyp_t& lincons0::get_constyp()
140inline const ap_constyp_t& lincons0::get_constyp()
const
145inline bool lincons0::has_modulo()
const
147 return l.scalar!=NULL;
150inline bool lincons0::has_linexpr()
const
152 return l.linexpr0!=NULL;
155inline scalar& lincons0::get_modulo()
157 if (!l.scalar)
throw std::invalid_argument(
"apron::lincons0::get_modulo() empty scalar");
158 return reinterpret_cast<scalar&
>(*l.scalar);
161inline const scalar& lincons0::get_modulo()
const
163 if (!l.scalar)
throw std::invalid_argument(
"apron::lincons0::get_modulo() empty scalar");
164 return reinterpret_cast<scalar&
>(*l.scalar);
167inline void lincons0::set_modulo(
const scalar& c)
169 if (!l.scalar) l.scalar = ap_scalar_alloc_set(
const_cast<ap_scalar_t*
>(c.get_ap_scalar_t()));
170 else ap_scalar_set(l.scalar,
const_cast<ap_scalar_t*
>(c.get_ap_scalar_t()));
173inline linexpr0& lincons0::get_linexpr()
175 if (!l.linexpr0)
throw std::invalid_argument(
"apron::lincons0::get_linexpr() empty expression");
176 return reinterpret_cast<linexpr0&
>(*l.linexpr0);
179inline const linexpr0& lincons0::get_linexpr()
const
181 if (!l.linexpr0)
throw std::invalid_argument(
"apron::lincons0::get_linexpr() empty expression");
182 return reinterpret_cast<linexpr0&
>(*l.linexpr0);
185inline void lincons0::set_linexpr(
const linexpr0& c)
187 if (l.linexpr0) ap_linexpr0_free(l.linexpr0);
188 l.linexpr0 = ap_linexpr0_copy(
const_cast<ap_linexpr0_t*
>(c.get_ap_linexpr0_t()));
191inline coeff& lincons0::get_cst()
192{
return get_linexpr().get_cst(); }
194inline const coeff& lincons0::get_cst()
const
195{
return get_linexpr().get_cst(); }
197inline coeff& lincons0::operator[](ap_dim_t dim)
198{
return get_linexpr()[dim]; }
200inline const coeff& lincons0::operator[](ap_dim_t dim)
const
201{
return get_linexpr()[dim]; }
207inline std::ostream&
operator<< (std::ostream& os,
const lincons0& s)
209 os << s.get_linexpr();
210 switch (s.get_constyp()) {
211 case AP_CONS_EQ:
return os <<
" = 0";
212 case AP_CONS_SUPEQ:
return os <<
" >= 0";
213 case AP_CONS_SUP:
return os <<
" > 0";
214 case AP_CONS_EQMOD:
return os <<
" = 0 mod " << s.get_modulo();
215 case AP_CONS_DISEQ:
return os <<
" != 0";
216 default:
throw std::invalid_argument(
"apron::operator<<(ostream&, const lincons0&) unknown constraint type");
220inline void lincons0::print(
char** name_of_dim, FILE* stream)
const
222 ap_lincons0_fprint(stream,
const_cast<ap_lincons0_t*
>(&l), name_of_dim);
229inline bool lincons0::is_unsat()
const
231 if (!l.linexpr0)
throw std::invalid_argument(
"apron::lincons0::is_unsat() empty expression");
232 return ap_lincons0_is_unsat(
const_cast<ap_lincons0_t*
>(&l));
235inline bool lincons0::is_linear()
const
237 if (!l.linexpr0)
throw std::invalid_argument(
"apron::lincons0::is_linear() empty expression");
238 return ap_linexpr0_is_linear(l.linexpr0);
241inline bool lincons0::is_quasilinear()
const
243 if (!l.linexpr0)
throw std::invalid_argument(
"apron::lincons0::is_quasilinear() empty expression");
244 return ap_linexpr0_is_quasilinear(l.linexpr0);
252inline const ap_lincons0_t* lincons0::get_ap_lincons0_t()
const
257inline ap_lincons0_t* lincons0::get_ap_lincons0_t()
271inline lincons0_array::lincons0_array(
size_t size)
272 : a(ap_lincons0_array_make(size))
276inline lincons0_array::lincons0_array(
const lincons0_array& x)
277 : a(ap_lincons0_array_make(x.a.size))
279 for (
size_t i=0; i<a.size; i++)
280 a.p[i] = ap_lincons0_copy(&x.a.p[i]);
283inline lincons0_array::lincons0_array(
size_t size,
const lincons0 x[])
284 : a(ap_lincons0_array_make(size))
286 for (
size_t i=0; i<size; i++)
287 a.p[i] = ap_lincons0_copy(
const_cast<ap_lincons0_t*
>(x[i].get_ap_lincons0_t()));
290inline lincons0_array::lincons0_array(
const std::vector<lincons0>& x)
291 : a(ap_lincons0_array_make(x.size()))
293 for (
size_t i=0; i<a.size; i++)
294 a.p[i] = ap_lincons0_copy(
const_cast<ap_lincons0_t*
>(x[i].get_ap_lincons0_t()));
297inline lincons0_array::lincons0_array(
const lincons0_array& x,
const dimchange& d)
299 a = ap_lincons0_array_add_dimensions(
const_cast<ap_lincons0_array_t*
>(&x.a),
300 const_cast<ap_dimchange_t*
>(d.get_ap_dimchange_t()));
303inline lincons0_array::lincons0_array(
const lincons0_array& x,
const dimperm& d)
305 a = ap_lincons0_array_permute_dimensions(
const_cast<ap_lincons0_array_t*
>(&x.a),
306 const_cast<ap_dimperm_t*
>(d.get_ap_dimperm_t()));
313inline lincons0_array::~lincons0_array()
315 ap_lincons0_array_clear(&a);
322inline lincons0_array& lincons0_array::operator= (
const lincons0_array& x)
325 ap_lincons0_array_clear(&a);
326 a = ap_lincons0_array_make(x.a.size);
327 for (
size_t i=0; i<a.size; i++) a.p[i] = ap_lincons0_copy(&x.a.p[i]);
332inline lincons0_array& lincons0_array::operator= (
const lincons0 x[])
334 size_t size = a.size;
335 ap_lincons0_array_clear(&a);
336 a = ap_lincons0_array_make(size);
337 for (
size_t i=0; i<size; i++)
338 a.p[i] = ap_lincons0_copy(
const_cast<ap_lincons0_t*
>(x[i].get_ap_lincons0_t()));
342inline lincons0_array& lincons0_array::operator= (
const std::vector<lincons0>& x)
344 size_t size = x.size();
345 ap_lincons0_array_clear(&a);
346 a = ap_lincons0_array_make(size);
347 for (
size_t i=0; i<size; i++)
348 a.p[i] = ap_lincons0_copy(
const_cast<ap_lincons0_t*
>(x[i].get_ap_lincons0_t()));
356inline void lincons0_array::resize(
size_t size)
358 ap_lincons0_array_resize(&a, size);
361inline void lincons0_array::add_dimensions(
const dimchange& d)
363 ap_lincons0_array_add_dimensions_with(&a,
const_cast<ap_dimchange_t*
>(d.get_ap_dimchange_t()));
366inline void lincons0_array::permute_dimensions(
const dimperm& d)
368 ap_lincons0_array_permute_dimensions_with(&a,
const_cast<ap_dimperm_t*
>(d.get_ap_dimperm_t()));
375inline size_t lincons0_array::size()
const
380inline lincons0* lincons0_array::contents()
382 return reinterpret_cast<lincons0*
>(a.p);
385inline const lincons0* lincons0_array::contents()
const
387 return reinterpret_cast<lincons0*
>(a.p);
390inline lincons0& lincons0_array::operator[](
size_t i)
392 return reinterpret_cast<lincons0&
>(a.p[i]);
395inline const lincons0& lincons0_array::operator[](
size_t i)
const
397 return reinterpret_cast<lincons0&
>(a.p[i]);
400inline lincons0& lincons0_array::get(
size_t i)
402 if (i >= a.size)
throw std::out_of_range(
"apron::lincons0_array::get(size_t)");
403 return reinterpret_cast<lincons0&
>(a.p[i]);
406inline const lincons0& lincons0_array::get(
size_t i)
const
408 if (i >= a.size)
throw std::out_of_range(
"apron::lincons0_array::get(size_t)");
409 return reinterpret_cast<lincons0&
>(a.p[i]);
416inline lincons0_array::operator std::vector<lincons0>()
const
419 std::vector<lincons0> v = std::vector<lincons0>(sz);
420 for (
size_t i=0;i<sz;i++)
429inline std::ostream&
operator<< (std::ostream& os,
const lincons0_array& s)
431 size_t sz = s.size();
433 for (
size_t i=0;i<sz;i++)
438inline void lincons0_array::print(
char** name_of_dim, FILE* stream)
const
440 ap_lincons0_array_fprint(stream,
const_cast<ap_lincons0_array_t*
>(&a), name_of_dim);
447inline bool lincons0_array::is_linear()
const
449 return ap_lincons0_array_is_linear(
const_cast<ap_lincons0_array_t*
>(&a));
452inline bool lincons0_array::is_quasilinear()
const
454 return ap_lincons0_array_is_quasilinear(
const_cast<ap_lincons0_array_t*
>(&a));
462inline const ap_lincons0_array_t* lincons0_array::get_ap_lincons0_array_t()
const
467inline ap_lincons0_array_t* lincons0_array::get_ap_lincons0_array_t()
std::ostream & operator<<(std::ostream &os, const lincons0 &s)
Definition apxx_lincons0_inline.hh:207