28 inline generator1::generator1(ap_generator1_t p) : l(p)
33 l.env = ap_environment_copy(const_cast<ap_environment_t*>(e.get_ap_environment_t()));
34 l.generator0 = ap_generator0_copy(const_cast<ap_generator0_t*>(x.get_ap_generator0_t()));
40 ap_linexpr1_make(const_cast<ap_environment_t*>(e.get_ap_environment_t()), AP_LINEXPR_SPARSE, 0);
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),
62 const_cast<ap_environment_t*>(e.get_ap_environment_t()));
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);
89 get_generator0().set_linexpr(c.get_linexpr0());
99 throw std::invalid_argument(
"apron::generator1::extend_environment(cconst environment&) empty expression");
101 ap_generator1_extend_environment_with(&l,
102 const_cast<ap_environment_t*>(e.get_ap_environment_t()));
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));
128 return get_generator0().size();
133 return get_generator0().get_gentyp();
138 return get_generator0().get_gentyp();
143 return get_generator0().has_linexpr();
149 throw std::invalid_argument(
"apron::generator1::get_linexpr() empty expression");
150 linexpr0 ll = get_generator0().get_linexpr();
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();
243 a = ap_generator1_array_make(const_cast<ap_environment_t*>(e.get_ap_environment_t()), sz);
244 for (
size_t i=0; i<sz; i++)
245 a.generator0_array.p[i] = ap_generator0_copy(&x.a.p[i]);
250 a = ap_generator1_array_make(const_cast<ap_environment_t*>(e.get_ap_environment_t()), size);
255 size_t sz = x.size();
256 a = ap_generator1_array_make(x.get_environment().get_ap_environment_t(), sz);
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),
266 const_cast<ap_environment_t*>(e.get_ap_environment_t()));
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);
307 a = ap_generator1_array_make(x.get_environment().get_ap_environment_t(), sz);
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);
335 a = ap_generator1_array_make(x[0].
get_environment().get_ap_environment_t(), size);
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,
355 const_cast<ap_environment_t*>(e.get_ap_environment_t()));
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));
380 return reinterpret_cast<generator0_array&
>(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);
387 return generator1(ap_generator1_copy(&c));
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*>
395 (x.get_generator0().get_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);
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));
void print(FILE *stream=stdout) const
Prints to a C stream.
Definition: apxx_generator1.hh:207
size_t size() const
Returns the size of the underlying linear expression.
Definition: apxx_generator1.hh:127
size_t size() const
Returns the size of the array.
Definition: apxx_generator1.hh:364
linexpr1 get_linexpr() const
Returns a copy of the underlying linear expression.
Definition: apxx_generator1.hh:147
coeff & operator[](const var &v)
Returns a (modifiable) reference to the coefficient corresponding to the given variable name...
Definition: apxx_generator1.hh:169
environment get_environment() const
Returns the environment shared by all generators (with incremented reference count).
Definition: apxx_generator1.hh:369
const generator0 & get_generator0() const
Returns a reference to the underlying generator0.
Definition: apxx_generator1.hh:117
coeff & get_cst()
Returns a (modifiable) reference to the constant coefficient.
Definition: apxx_generator1.hh:155
void set_linexpr(const linexpr1 &c)
Sets the underlying linear expression to c (copied).
Definition: apxx_generator1.hh:88
bool has_linexpr() const
Whether the generator has a valid linear expression.
Definition: apxx_generator1.hh:142
environment get_environment() const
Returns the environment of the generator (with incremented reference count).
Definition: apxx_generator1.hh:112
ap_gentyp_t & get_gentyp()
Returns a (modifiable) reference to the constraint type.
Definition: apxx_generator1.hh:132
const ap_generator1_t * get_ap_generator1_t() const
Returns a pointer to the internal APRON object stored in *this.
Definition: apxx_generator1.hh:216
friend std::ostream & operator<<(std::ostream &os, const generator1_array &s)
Printing.
Definition: apxx_generator1.hh:419
void resize(size_t size)
Resizes the array.
Definition: apxx_generator1.hh:347
const generator0_array & get_generator0_array() const
Returns a reference to the underlying generator0_array.
Definition: apxx_generator1.hh:374
generator1 get(size_t i) const
Returns a copy of the generator at index i.
Definition: apxx_generator1.hh:384
void set(size_t i, const generator1 &x)
Changes the generator at index i.
Definition: apxx_generator1.hh:391
generator1_array & operator=(const generator1_array &x)
(Deep) copy.
Definition: apxx_generator1.hh:303
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.hh:437
~generator1()
Frees all space for the generator, and decrements the reference count of the environment.
Definition: apxx_generator1.hh:71
~generator1_array()
Frees the space used by the array and all its generators, and decrements the reference count of the e...
Definition: apxx_generator1.hh:294
generator1_array(ap_generator1_array_t &a)
Internal use only. Shallow copy (no copy of generator0_array or environment).
Definition: apxx_generator1.hh:238
void extend_environment(const environment &e)
Extends the environment of the generator.
Definition: apxx_generator1.hh:97
void extend_environment(const environment &e)
Extends the environment of all generators in the array.
Definition: apxx_generator1.hh:352
void print(FILE *stream=stdout) const
Prints to a C stream.
Definition: apxx_generator1.hh:428
generator1(ap_generator1_t p)
Internal use only. Shallow copy (no copy of generator0 or environment).
Definition: apxx_generator1.hh:29
ap_generator1_array_t a
Structure managed by APRON.
Definition: apxx_generator1.hh:276
generator1 & operator=(const generator1 &x)
Makes a (deep) copy.
Definition: apxx_generator1.hh:80