28 inline generator1::generator1(ap_generator1_t p) : l(p)
41 l = ap_generator1_make(gentyp, &llin);
46 ap_linexpr1_t llin = ap_linexpr1_copy(
const_cast<ap_linexpr1_t*
>(lin.
get_ap_linexpr1_t()));
47 l = ap_generator1_make(gentyp, &llin);
52 l = ap_generator1_copy(
const_cast<ap_generator1_t*
>(&x.
l));
58 throw std::invalid_argument(
"apron::generator1::generator1(const generator&, const environment&) empty expression");
60 ap_generator1_extend_environment(&
l,
61 const_cast<ap_generator1_t*
>(&x.
l),
63 if (r)
throw std::invalid_argument(
"apron::generator1::generator1(const generator&, const environment&) not a super-environment");
72 ap_generator1_clear(&
l);
81 ap_generator1_t ll = ap_generator1_copy(
const_cast<ap_generator1_t*
>(&x.
l));
82 ap_generator1_clear(&
l);
99 throw std::invalid_argument(
"apron::generator1::extend_environment(cconst environment&) empty expression");
101 ap_generator1_extend_environment_with(&
l,
103 if (r)
throw std::invalid_argument(
"apron::generator1::extend_environment(const environment&) not a super-environment");
113 return (ap_environment_copy(ap_generator1_envref(
const_cast<ap_generator1_t*
>(&
l))));
118 return reinterpret_cast<generator0&
>(*ap_generator1_generator0ref(
const_cast<ap_generator1_t*
>(&
l)));
123 return reinterpret_cast<generator0&
>(*ap_generator1_generator0ref(&
l));
149 throw std::invalid_argument(
"apron::generator1::get_linexpr() empty expression");
157 throw std::invalid_argument(
"apron::generator1::get_cst() empty expression");
158 return reinterpret_cast<coeff&
>(*ap_generator1_cstref(&
l));
164 throw std::invalid_argument(
"apron::generator1::get_cst() empty expression");
165 return reinterpret_cast<coeff&
>(*ap_generator1_cstref(
const_cast<ap_generator1_t*
>(&
l)));
171 throw std::invalid_argument(
"apron::generator1::operator[](const var&) empty expression");
172 ap_coeff_t* x = ap_generator1_coeffref(&
l,
const_cast<ap_var_t
>(
var.
get_ap_var_t()));
173 if (!x)
throw std::invalid_argument(
"apron::generator1::operator[](const var&) variable not in environment");
174 return reinterpret_cast<coeff&
>(*x);
180 throw std::invalid_argument(
"apron::generator1::operator[](const var&) empty expression");
181 ap_coeff_t* x = ap_generator1_coeffref(
const_cast<ap_generator1_t*
>(&
l),
182 const_cast<ap_var_t
>(var.get_ap_var_t()));
183 if (!x)
throw std::invalid_argument(
"apron::generator1::operator[](const var&) variable not in environment");
184 return reinterpret_cast<coeff&
>(*x);
191 inline std::ostream&
operator<< (std::ostream& os,
const generator1& s)
193 if (!s.has_linexpr())
194 throw std::invalid_argument(
"apron::operator<<(ostream&, const generator1&) empty expression");
195 switch (s.get_gentyp()) {
196 case AP_GEN_LINE: os <<
"LINE: ";
break;
197 case AP_GEN_RAY: os <<
"RAY: ";
break;
198 case AP_GEN_VERTEX: os <<
"VERTEX: ";
break;
199 case AP_GEN_LINEMOD: os <<
"LINEMOD: ";
break;
200 case AP_GEN_RAYMOD: os <<
"RAYMOD: ";
break;
201 default:
throw std::invalid_argument(
"apron::operator<<(ostream&, const generator1&) invalid generator type");
203 return os << s.get_linexpr();
208 ap_generator1_fprint(stream,
const_cast<ap_generator1_t*
>(&
l));
242 size_t sz = x.
size();
244 for (
size_t i=0; i<sz; i++)
245 a.generator0_array.p[i] = ap_generator0_copy(&x.
a.p[i]);
255 size_t sz = x.
size();
257 for (
size_t i=0; i<sz; i++)
258 a.generator0_array.p[i] = ap_generator0_copy(&x.
a.generator0_array.p[i]);
264 ap_generator1_array_extend_environment(&
a,
265 const_cast<ap_generator1_array_t*
>(&x.
a),
267 if (r)
throw std::invalid_argument(
"apron::generator1_array::generator1_array(const generator1_array&, const environment&) not a super-environment");
272 if (sz<1)
throw std::invalid_argument(
"apron::generator1_array::generator1_array(size_t sz, const generator1[]) null size");
273 a = ap_generator1_array_make(x[0].
get_environment().get_ap_environment_t(), sz);
274 for (
size_t i=0; i<sz; i++)
275 a.generator0_array.p[i] = ap_generator0_copy(
const_cast<ap_generator0_t*
>
276 (x[i].get_generator0().get_ap_generator0_t()));
281 size_t sz = x.size();
282 if (sz<1)
throw std::invalid_argument(
"apron::generator1_array::generator1_array(const vector<generator1>&) null size");
283 a = ap_generator1_array_make(x[0].
get_environment().get_ap_environment_t(), sz);
284 for (
size_t i=0; i<sz; i++)
285 a.generator0_array.p[i] = ap_generator0_copy(
const_cast<ap_generator0_t*
>
286 (x[i].get_generator0().get_ap_generator0_t()));
295 ap_generator1_array_clear(&
a);
305 size_t sz = x.
size();
306 ap_generator1_array_clear(&
a);
308 for (
size_t i=0; i<sz; i++)
309 a.generator0_array.p[i] = ap_generator0_copy(&x.
a.generator0_array.p[i]);
317 for (
size_t i=0; i<sz; i++) {
318 ap_generator0_clear(&
a.generator0_array.p[i]);
319 a.generator0_array.p[i] = ap_generator0_copy(
const_cast<ap_generator0_t*
>
320 (x[i].get_generator0().get_ap_generator0_t()));
327 size_t size = x.size();
329 ap_generator1_array_t aa = ap_generator1_array_make(
a.env,0);
330 ap_generator1_array_clear(&
a);
334 ap_generator1_array_clear(&
a);
336 for (
size_t i=0; i<
size; i++)
337 a.generator0_array.p[i] = ap_generator0_copy(
const_cast<ap_generator0_t*
>
338 (x[i].get_generator0().get_ap_generator0_t()));
348 ap_generator0_array_resize(&
a.generator0_array,
size);
354 ap_generator1_array_extend_environment_with(&
a,
356 if (r)
throw std::invalid_argument(
"apron::generator1_array::extend_environment(const environment&) not a super-environment");
365 return ap_generator1_array_size(
const_cast<ap_generator1_array_t*
>(&
a));
370 return (ap_environment_copy(ap_generator1_array_envref(
const_cast<ap_generator1_array_t*
>(&
a))));
375 return reinterpret_cast<generator0_array&
>(
const_cast<ap_generator0_array_t&
>(
a.generator0_array));
385 if (i>=
size())
throw std::out_of_range(
"apron::generator1_array::get(size_t)");
386 ap_generator1_t c = ap_generator1_array_get(
const_cast<ap_generator1_array_t*
>(&
a),i);
392 if (i>=
size())
throw std::out_of_range(
"apron::generator1_array::get(size_t)");
393 ap_generator0_clear(&
a.generator0_array.p[i]);
394 a.generator0_array.p[i] = ap_generator0_copy(
const_cast<ap_generator0_t*
>
402 inline generator1_array::operator std::vector<generator1>()
const
406 std::vector<generator1> v(sz,dummy);
407 for (
size_t i=0;i<sz;i++) {
408 ap_generator1_t c = ap_generator1_array_get(
const_cast<ap_generator1_array_t*
>(&a),i);
409 v[i] = ap_generator1_copy(&c);
418 inline std::ostream&
operator<< (std::ostream& os,
const generator1_array& s)
420 size_t sz = s.size();
422 for (
size_t i=0;i<sz;i++)
423 os << s.get(i) <<
"; ";
429 ap_generator1_array_fprint(stream,
const_cast<ap_generator1_array_t*
>(&
a));
std::ostream & operator<<(std::ostream &os, const generator1 &s)
Definition: apxx_generator1_inline.hh:191
Coefficient (ap_coeff_t wrapper).
Definition: apxx_coeff.hh:36
Level 1 environment (ap_environment_t wrapper).
Definition: apxx_environment.hh:51
const ap_environment_t * get_ap_environment_t() const
Returns a pointer to the internal APRON object pointed by *this.
Definition: apxx_environment_inline.hh:425
Array of generators (ap_generator0_array_t wrapper).
Definition: apxx_generator0.hh:214
size_t size() const
Returns the size of the array.
Definition: apxx_generator0_inline.hh:305
ap_generator0_array_t a
Structure managed by APRON.
Definition: apxx_generator0.hh:218
Level 0 generator (ap_generator0_t wrapper).
Definition: apxx_generator0.hh:39
void set_linexpr(const linexpr0 &c)
Sets the underlying linear expression to c (copied).
Definition: apxx_generator0_inline.hh:146
bool has_linexpr() const
Returns whether the generator has a valid linear expression.
Definition: apxx_generator0_inline.hh:129
ap_gentyp_t & get_gentyp()
Returns a (modifiable) reference to the constraint type.
Definition: apxx_generator0_inline.hh:119
const ap_generator0_t * get_ap_generator0_t() const
Returns a pointer to the internal APRON object stored in *this.
Definition: apxx_generator0_inline.hh:181
linexpr0 & get_linexpr()
Returns a (modifiable) reference to the underlying linear expression.
Definition: apxx_generator0_inline.hh:134
size_t size() const
Returns the size of the underlying linear expression.
Definition: apxx_generator0_inline.hh:110
Array of generators (ap_generator1_array_t wrapper).
Definition: apxx_generator1.hh:272
ap_generator1_array_t a
Structure managed by APRON.
Definition: apxx_generator1.hh:276
size_t size() const
Returns the size of the array.
Definition: apxx_generator1_inline.hh:363
environment get_environment() const
Returns the environment shared by all generators (with incremented reference count).
Definition: apxx_generator1_inline.hh:368
void resize(size_t size)
Resizes the array.
Definition: apxx_generator1_inline.hh:346
void print(FILE *stream=stdout) const
Prints to a C stream.
Definition: apxx_generator1_inline.hh:427
void extend_environment(const environment &e)
Extends the environment of all generators in the array.
Definition: apxx_generator1_inline.hh:351
generator1_array(ap_generator1_array_t &a)
Internal use only. Shallow copy (no copy of generator0_array or environment).
Definition: apxx_generator1_inline.hh:237
const ap_generator1_array_t * get_ap_generator1_array_t() const
Returns a pointer to the internal APRON object stored in *this.
Definition: apxx_generator1_inline.hh:436
generator1_array & operator=(const generator1_array &x)
(Deep) copy.
Definition: apxx_generator1_inline.hh:302
~generator1_array()
Frees the space used by the array and all its generators, and decrements the reference count of the e...
Definition: apxx_generator1_inline.hh:293
generator1 get(size_t i) const
Returns a copy of the generator at index i.
Definition: apxx_generator1_inline.hh:383
void set(size_t i, const generator1 &x)
Changes the generator at index i.
Definition: apxx_generator1_inline.hh:390
const generator0_array & get_generator0_array() const
Returns a reference to the underlying generator0_array.
Definition: apxx_generator1_inline.hh:373
Level 1 generator (ap_generator1_t wrapper).
Definition: apxx_generator1.hh:40
ap_gentyp_t & get_gentyp()
Returns a (modifiable) reference to the constraint type.
Definition: apxx_generator1_inline.hh:131
bool has_linexpr() const
Whether the generator has a valid linear expression.
Definition: apxx_generator1_inline.hh:141
generator1 & operator=(const generator1 &x)
Makes a (deep) copy.
Definition: apxx_generator1_inline.hh:79
coeff & get_cst()
Returns a (modifiable) reference to the constant coefficient.
Definition: apxx_generator1_inline.hh:154
void set_linexpr(const linexpr1 &c)
Sets the underlying linear expression to c (copied).
Definition: apxx_generator1_inline.hh:87
coeff & operator[](const var &v)
Returns a (modifiable) reference to the coefficient corresponding to the given variable name.
ap_generator1_t l
Structure managed by APRON.
Definition: apxx_generator1.hh:44
void extend_environment(const environment &e)
Extends the environment of the generator.
Definition: apxx_generator1_inline.hh:96
linexpr1 get_linexpr() const
Returns a copy of the underlying linear expression.
Definition: apxx_generator1_inline.hh:146
const ap_generator1_t * get_ap_generator1_t() const
Returns a pointer to the internal APRON object stored in *this.
Definition: apxx_generator1_inline.hh:215
environment get_environment() const
Returns the environment of the generator (with incremented reference count).
Definition: apxx_generator1_inline.hh:111
void print(FILE *stream=stdout) const
Prints to a C stream.
Definition: apxx_generator1_inline.hh:206
generator1(ap_generator1_t p)
Internal use only. Shallow copy (no copy of generator0 or environment).
Definition: apxx_generator1_inline.hh:28
const generator0 & get_generator0() const
Returns a reference to the underlying generator0.
Definition: apxx_generator1_inline.hh:116
~generator1()
Frees all space for the generator, and decrements the reference count of the environment.
Definition: apxx_generator1_inline.hh:70
size_t size() const
Returns the size of the underlying linear expression.
Definition: apxx_generator1_inline.hh:126
Level 0 linear expression (ap_linexpr0_t wrapper).
Definition: apxx_linexpr0.hh:44
Level 1 linear expression (ap_linexpr1_t wrapper).
Definition: apxx_linexpr1.hh:39
const linexpr0 & get_linexpr0() const
Returns a reference to the underlying linexpr0.
Definition: apxx_linexpr1_inline.hh:102
const ap_linexpr1_t * get_ap_linexpr1_t() const
Returns a pointer to the internal APRON object stored in *this.
Definition: apxx_linexpr1_inline.hh:321
Variable name (ap_var_t wrapper).
Definition: apxx_var.hh:39
const ap_var_t & get_ap_var_t() const
Returns a reference to the APRON object wrapped (no copy).
Definition: apxx_var_inline.hh:156