28inline generator1::generator1(ap_generator1_t p) : l(p)
31inline generator1::generator1(
const environment& e,
const generator0& x)
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()));
37inline generator1::generator1(
const environment& e, ap_gentyp_t gentyp)
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);
44inline generator1::generator1(ap_gentyp_t gentyp,
const linexpr1& lin)
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);
50inline generator1::generator1(
const generator1& x)
52 l = ap_generator1_copy(
const_cast<ap_generator1_t*
>(&x.l));
55inline generator1::generator1(
const generator1& x,
const environment& e)
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");
70inline generator1::~generator1()
72 ap_generator1_clear(&l);
79inline generator1& generator1::operator= (
const generator1& x)
81 ap_generator1_t ll = ap_generator1_copy(
const_cast<ap_generator1_t*
>(&x.l));
82 ap_generator1_clear(&l);
87inline void generator1::set_linexpr(
const linexpr1& c)
89 get_generator0().set_linexpr(c.get_linexpr0());
96inline void generator1::extend_environment(
const environment& e)
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");
111inline environment generator1::get_environment()
const
113 return (ap_environment_copy(ap_generator1_envref(
const_cast<ap_generator1_t*
>(&l))));
116inline const generator0& generator1::get_generator0()
const
118 return reinterpret_cast<generator0&
>(*ap_generator1_generator0ref(
const_cast<ap_generator1_t*
>(&l)));
121inline generator0& generator1::get_generator0()
123 return reinterpret_cast<generator0&
>(*ap_generator1_generator0ref(&l));
126inline size_t generator1::size()
const
128 return get_generator0().size();
131inline ap_gentyp_t& generator1::get_gentyp()
133 return get_generator0().get_gentyp();
136inline const ap_gentyp_t& generator1::get_gentyp()
const
138 return get_generator0().get_gentyp();
141inline bool generator1::has_linexpr()
const
143 return get_generator0().has_linexpr();
146inline linexpr1 generator1::get_linexpr()
const
149 throw std::invalid_argument(
"apron::generator1::get_linexpr() empty expression");
150 linexpr0 ll = get_generator0().get_linexpr();
151 return linexpr1(get_environment(),ll);
154inline coeff& generator1::get_cst()
157 throw std::invalid_argument(
"apron::generator1::get_cst() empty expression");
158 return reinterpret_cast<coeff&
>(*ap_generator1_cstref(&l));
161inline const coeff& generator1::get_cst()
const
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)));
168inline coeff& generator1::operator[](
const var& var)
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);
177inline const coeff& generator1::operator[](
const var& var)
const
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);
191inline 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();
206inline void generator1::print(FILE* stream)
const
208 ap_generator1_fprint(stream,
const_cast<ap_generator1_t*
>(&l));
215inline const ap_generator1_t* generator1::get_ap_generator1_t()
const
220inline ap_generator1_t* generator1::get_ap_generator1_t()
237inline generator1_array::generator1_array(ap_generator1_array_t& a) : a(a)
240inline 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]);
248inline 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);
253inline 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]);
261inline 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");
270inline 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()));
279inline 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()));
293inline generator1_array::~generator1_array()
295 ap_generator1_array_clear(&a);
302inline 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]);
314inline 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()));
325inline 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()));
346inline void generator1_array::resize(
size_t size)
348 ap_generator0_array_resize(&a.generator0_array, size);
351inline 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");
363inline size_t generator1_array::size()
const
365 return ap_generator1_array_size(
const_cast<ap_generator1_array_t*
>(&a));
368inline environment generator1_array::get_environment()
const
370 return (ap_environment_copy(ap_generator1_array_envref(
const_cast<ap_generator1_array_t*
>(&a))));
373inline const generator0_array& generator1_array::get_generator0_array()
const
375 return reinterpret_cast<generator0_array&
>(
const_cast<ap_generator0_array_t&
>(a.generator0_array));
378inline generator0_array& generator1_array::get_generator0_array()
380 return reinterpret_cast<generator0_array&
>(a.generator0_array);
383inline 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));
390inline 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()));
402inline 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);
418inline 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) <<
"; ";
427inline void generator1_array:: print(FILE* stream)
const
429 ap_generator1_array_fprint(stream,
const_cast<ap_generator1_array_t*
>(&a));
436inline const ap_generator1_array_t* generator1_array::get_ap_generator1_array_t()
const
441inline ap_generator1_array_t* generator1_array::get_ap_generator1_array_t()
std::ostream & operator<<(std::ostream &os, const generator1 &s)
Definition apxx_generator1_inline.hh:191