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);
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));
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));
240 inline generator1_array::generator1_array(
const environment& e,
const generator0_array& x)
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]);
248 inline generator1_array::generator1_array(
const environment& e,
size_t size)
250 a = ap_generator1_array_make(const_cast<ap_environment_t*>(e.get_ap_environment_t()), size);
253 inline generator1_array::generator1_array(
const generator1_array& x)
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]);
261 inline generator1_array::generator1_array(
const generator1_array& x,
const environment& e)
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");
270 inline generator1_array::generator1_array(
size_t sz,
const generator1 x[])
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()));
279 inline generator1_array::generator1_array(
const std::vector<generator1>& x)
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()));
293 inline generator1_array::~generator1_array()
295 ap_generator1_array_clear(&a);
302 inline generator1_array& generator1_array::operator= (
const generator1_array& x)
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]);
314 inline generator1_array& generator1_array::operator= (
const generator1 x[])
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()));
325 inline generator1_array& generator1_array::operator= (
const std::vector<generator1>& x)
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()));
346 inline void generator1_array::resize(
size_t size)
348 ap_generator0_array_resize(&a.generator0_array, size);
351 inline void generator1_array::extend_environment(
const environment& e)
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");
363 inline size_t generator1_array::size()
const 365 return ap_generator1_array_size(const_cast<ap_generator1_array_t*>(&a));
368 inline environment generator1_array::get_environment()
const 370 return (ap_environment_copy(ap_generator1_array_envref(const_cast<ap_generator1_array_t*>(&a))));
373 inline const generator0_array& generator1_array::get_generator0_array()
const 375 return reinterpret_cast<generator0_array&>(const_cast<ap_generator0_array_t&>(a.generator0_array));
378 inline generator0_array& generator1_array::get_generator0_array()
380 return reinterpret_cast<generator0_array&>(a.generator0_array);
383 inline generator1 generator1_array::get(
size_t i)
const 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));
390 inline void generator1_array::set(
size_t i,
const generator1& x)
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 405 generator1 dummy(get_environment(),generator0());
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) <<
"; ";
427 inline void generator1_array:: print(FILE* stream)
const 429 ap_generator1_array_fprint(stream, const_cast<ap_generator1_array_t*>(&a));
436 inline const ap_generator1_array_t* generator1_array::get_ap_generator1_array_t()
const 441 inline ap_generator1_array_t* generator1_array::get_ap_generator1_array_t()
coeff & operator[](const var &v)
Returns a (modifiable) reference to the coefficient corresponding to the given variable name.
Definition: apxx_generator1.hh:169
ap_gentyp_t & get_gentyp()
Returns a (modifiable) reference to the constraint type.
Definition: apxx_generator0.hh:120
bool has_linexpr() const
Returns whether the generator has a valid linear expression.
Definition: apxx_generator0.hh:130
coeff & get_cst()
Returns a (modifiable) reference to the constant coefficient.
Definition: apxx_generator1.hh:155
const generator0 & get_generator0() const
Returns a reference to the underlying generator0.
Definition: apxx_generator1.hh:117
void print(FILE *stream=stdout) const
Prints to a C stream.
Definition: apxx_generator1.hh:207
void set_linexpr(const linexpr1 &c)
Sets the underlying linear expression to c (copied).
Definition: apxx_generator1.hh:88
std::ostream & operator<<(std::ostream &os, const abstract0 &s)
Definition: apxx_abstract0.hh:293
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
size_t size() const
Returns the size of the underlying linear expression.
Definition: apxx_generator0.hh:111
std::ostream & operator<<(std::ostream &os, const generator1 &s)
Definition: apxx_generator1_inline.hh:191
void set_linexpr(const linexpr0 &c)
Sets the underlying linear expression to c (copied).
Definition: apxx_generator0.hh:147
ap_gentyp_t & get_gentyp()
Returns a (modifiable) reference to the constraint type.
Definition: apxx_generator1.hh:132
environment get_environment() const
Returns the environment of the generator (with incremented reference count).
Definition: apxx_generator1.hh:112
size_t size() const
Returns the size of the underlying linear expression.
Definition: apxx_generator1.hh:127
linexpr1 get_linexpr() const
Returns a copy of the underlying linear expression.
Definition: apxx_generator1.hh:147
~generator1()
Frees all space for the generator, and decrements the reference count of the environment.
Definition: apxx_generator1.hh:71
bool has_linexpr() const
Whether the generator has a valid linear expression.
Definition: apxx_generator1.hh:142
ap_generator1_t l
Structure managed by APRON.
Definition: apxx_generator1.hh:44
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
linexpr0 & get_linexpr()
Returns a (modifiable) reference to the underlying linear expression.
Definition: apxx_generator0.hh:135
generator1(ap_generator1_t p)
Internal use only. Shallow copy (no copy of generator0 or environment).
Definition: apxx_generator1.hh:29
generator1 & operator=(const generator1 &x)
Makes a (deep) copy.
Definition: apxx_generator1.hh:80