27 ap_coeff_init(&d->cst,AP_COEFF_SCALAR);
28 if (discr==AP_LINEXPR_DENSE) d->p.coeff = NULL;
29 else d->p.linterm = NULL;
30 if (size) ap_linexpr0_realloc(d,size);
35 ap_linexpr0_realloc(d, 0);
36 ap_coeff_clear(&d->cst);
42 assert(d->discr==s->discr);
43 ap_linexpr0_realloc(d,s->size);
44 ap_coeff_set(&d->cst,
const_cast<ap_coeff_t*
>(&s->cst));
45 if (d->discr==AP_LINEXPR_DENSE) {
46 for (
size_t i=0; i<d->size; i++)
47 ap_coeff_set(&d->p.coeff[i], &s->p.coeff[i]);
50 for (
size_t i=0; i<d->size; i++) {
51 ap_coeff_set(&d->p.linterm[i].coeff, &s->p.linterm[i].coeff);
52 d->p.linterm[i].dim = s->p.linterm[i].dim;
60inline linexpr0::linexpr0(ap_linexpr0_t* p) : l(*p)
65inline linexpr0::linexpr0(ap_linexpr_discr_t discr,
size_t size)
70inline linexpr0::linexpr0(
const linexpr0& x)
76inline linexpr0::linexpr0(
const linexpr0& x,
const dimchange& d)
79 p = ap_linexpr0_add_dimensions(
const_cast<ap_linexpr0_t*
>(&x.l),
80 const_cast<ap_dimchange_t*
>(d.get_ap_dimchange_t()));
85inline linexpr0::linexpr0(
const linexpr0& x,
const dimperm& d)
88 p = ap_linexpr0_permute_dimensions(
const_cast<ap_linexpr0_t*
>(&x.l),
89 const_cast<ap_dimperm_t*
>(d.get_ap_dimperm_t()));
94inline linexpr0::linexpr0(
size_t size,
const coeff coeffs[],
const coeff& cst, ap_linexpr_discr_t discr)
97 for (
size_t i=0;i<size;i++) (*
this)[i] = coeffs[i];
101inline linexpr0::linexpr0(
const std::vector<coeff>& coeffs,
const coeff& cst, ap_linexpr_discr_t discr)
103 size_t size = coeffs.size();
105 for (
size_t i=0;i<size;i++) (*
this)[i] = coeffs[i];
109inline linexpr0::linexpr0(
size_t size,
const coeff coeffs[],
const ap_dim_t dims[],
const coeff& cst)
112 for (
size_t i=0;i<size;i++) (*
this)[dims[i]] = coeffs[i];
120inline linexpr0::~linexpr0()
129inline linexpr0& linexpr0::operator= (
const linexpr0& x)
143inline void linexpr0::resize(
size_t size)
145 ap_linexpr0_realloc(&l, size);
148inline void linexpr0::add_dimensions(
const dimchange& d)
150 ap_linexpr0_add_dimensions_with(&l,
const_cast<ap_dimchange_t*
>(d.get_ap_dimchange_t()));
153inline void linexpr0::permute_dimensions(
const dimperm& d)
155 ap_linexpr0_permute_dimensions_with(&l,
const_cast<ap_dimperm_t*
>(d.get_ap_dimperm_t()));
164inline size_t linexpr0::size()
const
166 return ap_linexpr0_size(
const_cast<ap_linexpr0_t*
>(&l));
172inline ap_linexpr_discr_t linexpr0::get_discr()
const
178inline coeff& linexpr0::get_cst()
180 return reinterpret_cast<coeff&
>(*ap_linexpr0_cstref(
const_cast<ap_linexpr0_t*
>(&l)));
183inline const coeff& linexpr0::get_cst()
const
185 return reinterpret_cast<coeff&
>(*ap_linexpr0_cstref(
const_cast<ap_linexpr0_t*
>(&l)));
188inline coeff& linexpr0::operator[](ap_dim_t dim)
190 ap_coeff_t* x = ap_linexpr0_coeffref(&l, dim);
191 if (!x)
throw std::out_of_range(
"apron::linexpr0::operator[](ap_dim_t)");
192 return reinterpret_cast<coeff&
>(*x);
195inline const coeff& linexpr0::operator[](ap_dim_t dim)
const
197 const ap_coeff_t* x = ap_linexpr0_coeffref(
const_cast<ap_linexpr0_t*
>(&l), dim);
198 if (!x)
throw std::out_of_range(
"apron::linexpr0::operator[](ap_dim)t");
199 return reinterpret_cast<const coeff&
>(*x);
206static inline bool print_coeff_sign(std::ostream& os,
const coeff& c,
bool& first,
bool cst)
208 if (c.is_zero())
return false;
209 if (c.get_discr()==AP_COEFF_SCALAR) {
210 if (c.get_scalar()==1) {
211 if (!first) os <<
" + ";
214 else if (c.get_scalar().sgn()<0) {
215 if (first) os <<
"- " << -c;
216 else os <<
" - " << -c;
218 else if (first) os << c;
219 else os <<
" + " << c;
223 else os <<
" + " << c;
229inline std::ostream&
operator<<(std::ostream& os,
const linexpr0& s)
234 size_t sz = (*names).size();
235 for (linexpr0::const_iterator i=s.begin();i.valid();++i) {
237 if (i.get_dim()<sz) os << (*names)[i.get_dim()];
238 else os <<
"x" << i.get_dim();
243 for (linexpr0::const_iterator i=s.begin();i.valid();++i) {
245 os <<
"x" << i.get_dim();
249 if (first) os <<
"0";
253inline void linexpr0::print(
char** name_of_dim, FILE* stream)
const
255 ap_linexpr0_fprint(stream,
const_cast<ap_linexpr0_t*
>(&l), name_of_dim);
262inline bool linexpr0::is_integer(
size_t intdim)
const
264 return ap_linexpr0_is_integer(
const_cast<ap_linexpr0_t*
>(&l), intdim);
267inline bool linexpr0::is_real(
size_t intdim)
const
269 return ap_linexpr0_is_real(
const_cast<ap_linexpr0_t*
>(&l), intdim);
272inline ap_linexpr_type_t linexpr0::get_type()
const
274 return ap_linexpr0_type(
const_cast<ap_linexpr0_t*
>(&l));
277inline bool linexpr0::is_linear()
const
279 return ap_linexpr0_is_linear(
const_cast<ap_linexpr0_t*
>(&l));
282inline bool linexpr0::is_quasilinear()
const
284 return ap_linexpr0_is_quasilinear(
const_cast<ap_linexpr0_t*
>(&l));
287inline int compare(
const linexpr0& x,
const linexpr0& y)
289 return ap_linexpr0_compare(
const_cast<ap_linexpr0_t*
>(&x.l),
290 const_cast<ap_linexpr0_t*
>(&y.l));
293inline bool equal (
const linexpr0& x,
const linexpr0& y)
295 return ap_linexpr0_equal(
const_cast<ap_linexpr0_t*
>(&x.l),
296 const_cast<ap_linexpr0_t*
>(&y.l));
301inline bool operator>= (
const linexpr0& x,
const linexpr0& y)
303 return ap_linexpr0_compare(
const_cast<ap_linexpr0_t*
>(&x.l),
304 const_cast<ap_linexpr0_t*
>(&y.l)) >= 0; }
306inline bool operator<= (
const linexpr0& x,
const linexpr0& y)
308 return ap_linexpr0_compare(
const_cast<ap_linexpr0_t*
>(&x.l),
309 const_cast<ap_linexpr0_t*
>(&y.l)) <= 0;
312inline bool operator> (
const linexpr0& x,
const linexpr0& y)
314 return ap_linexpr0_compare(
const_cast<ap_linexpr0_t*
>(&x.l),
315 const_cast<ap_linexpr0_t*
>(&y.l)) > 0;
318inline bool operator< (
const linexpr0& x,
const linexpr0& y)
320 return ap_linexpr0_compare(
const_cast<ap_linexpr0_t*
>(&x.l),
321 const_cast<ap_linexpr0_t*
>(&y.l)) < 0;
324inline bool operator== (
const linexpr0& x,
const linexpr0& y)
326 return ap_linexpr0_equal(
const_cast<ap_linexpr0_t*
>(&x.l),
327 const_cast<ap_linexpr0_t*
>(&y.l));
330inline bool operator!= (
const linexpr0& x,
const linexpr0& y)
332 return !ap_linexpr0_equal(
const_cast<ap_linexpr0_t*
>(&x.l),
333 const_cast<ap_linexpr0_t*
>(&y.l));
342inline void linexpr0::const_iterator::skip_AP_DIM_MAX()
344 if (l->discr == AP_LINEXPR_DENSE)
return;
345 while (pos < l->size && l->p.linterm[pos].dim == AP_DIM_MAX) pos++;
348inline linexpr0::const_iterator::const_iterator(ap_linexpr0_t* e)
354inline linexpr0::const_iterator::const_iterator(
const linexpr0& e)
356 l =
const_cast<ap_linexpr0_t*
>(e.get_ap_linexpr0_t());
361inline linexpr0::const_iterator::const_iterator(
const const_iterator& i)
366inline linexpr0::iterator::iterator(ap_linexpr0_t* e)
367 : linexpr0::const_iterator(e)
370inline linexpr0::iterator::iterator(linexpr0& e)
371 : linexpr0::const_iterator(e.get_ap_linexpr0_t())
374inline linexpr0::iterator::iterator(
const iterator& i)
375 : linexpr0::const_iterator(i.l)
378inline linexpr0::const_iterator& linexpr0::const_iterator::operator=(
const const_iterator& i)
385inline linexpr0::iterator& linexpr0::iterator::operator=(
const iterator& i)
392inline ap_dim_t linexpr0::const_iterator::get_dim()
const
394 if (pos >= l->size)
throw std::out_of_range(
"apron::linexpr0::const_iterator::get_dim()");
395 if (l->discr == AP_LINEXPR_DENSE)
return pos;
396 else return l->p.linterm[pos].dim;
399inline const coeff& linexpr0::const_iterator::get_coeff()
const
401 if (pos >= l->size)
throw std::out_of_range(
"apron::linexpr0::const_iterator::get_coeff()");
402 if (l->discr == AP_LINEXPR_DENSE)
return reinterpret_cast<coeff&
>(l->p.coeff[pos]);
403 else return reinterpret_cast<coeff&
>(l->p.linterm[pos].coeff);
406inline coeff& linexpr0::iterator::get_coeff()
const
408 if (pos >= l->size)
throw std::out_of_range(
"apron::linexpr0::iterator::get_coeff()");
409 if (l->discr == AP_LINEXPR_DENSE)
return reinterpret_cast<coeff&
>(l->p.coeff[pos]);
410 else return reinterpret_cast<coeff&
>(l->p.linterm[pos].coeff);
413inline void linexpr0::const_iterator::next()
419inline void linexpr0::const_iterator::operator++()
424inline bool linexpr0::const_iterator::valid()
const
426 return pos < l->size;
429inline linexpr0::iterator linexpr0::begin()
431 return iterator(*
this);
434inline linexpr0::const_iterator linexpr0::begin()
const
436 return const_iterator(*
this);
444inline void linexpr0::minimize()
446 ap_linexpr0_minimize(&l);
449inline long linexpr0::hash()
const
451 return ap_linexpr0_hash(
const_cast<ap_linexpr0_t*
>(&l));
459inline const ap_linexpr0_t* linexpr0::get_ap_linexpr0_t()
const
464inline ap_linexpr0_t* linexpr0::get_ap_linexpr0_t()
bool operator==(const abstract0 &x, const abstract0 &y)
Definition apxx_abstract0_inline.hh:409
bool operator<=(const abstract0 &x, const abstract0 &y)
Definition apxx_abstract0_inline.hh:421
bool operator>(const abstract0 &x, const abstract0 &y)
Definition apxx_abstract0_inline.hh:433
bool operator<(const abstract0 &x, const abstract0 &y)
Definition apxx_abstract0_inline.hh:438
bool operator>=(const abstract0 &x, const abstract0 &y)
Definition apxx_abstract0_inline.hh:428
bool operator!=(const abstract0 &x, const abstract0 &y)
Definition apxx_abstract0_inline.hh:416
std::vector< std::string > * get_varname(std::basic_ostream< charT, Traits > &os)
Definition apxx_dimension_inline.hh:43
int compare(const linexpr0 &x, const linexpr0 &y)
Definition apxx_linexpr0_inline.hh:287
bool equal(const linexpr0 &x, const linexpr0 &y)
Definition apxx_linexpr0_inline.hh:293
std::ostream & operator<<(std::ostream &os, const linexpr0 &s)
Definition apxx_linexpr0_inline.hh:229
static void apxx_linexpr0_init(ap_linexpr0_t *d, ap_linexpr_discr_t discr, size_t size)
Definition apxx_linexpr0_inline.hh:23
static bool print_coeff_sign(std::ostream &os, const coeff &c, bool &first, bool cst)
Definition apxx_linexpr0_inline.hh:206
static void apxx_linexpr0_clear(ap_linexpr0_t *d)
Definition apxx_linexpr0_inline.hh:33
static void apxx_linexpr0_copy(ap_linexpr0_t *d, const ap_linexpr0_t *s)
Definition apxx_linexpr0_inline.hh:39