APRONXX 0.9.15
/home/mine/apron/apronxx/apxx_abstract0_inline.hh
Go to the documentation of this file.
1/* -*- C++ -*-
2 * apxx_abstract0_inline.hh
3 *
4 * APRON Library / C++ inline functions
5 *
6 * DO NOT INCLUDE THIS FILE DIRECTLY
7 *
8 * Copyright (C) Antoine Mine' 2007
9 *
10 */
11/* This file is part of the APRON Library, released under LGPL license
12 with an exception allowing the redistribution of statically linked
13 executables.
14
15 Please read the COPYING file packaged in the distribution.
16*/
17
18
19/* ================================= */
20/* abstract0 */
21/* ================================= */
22
23
24/* constructors */
25/* ============ */
26
27inline abstract0::abstract0(ap_abstract0_t* x)
28 : a(x)
29{}
30
31inline abstract0::abstract0(manager &m, size_t intdim, size_t realdim, top x)
32{
33 a = ap_abstract0_top(m.get_ap_manager_t(), intdim, realdim);
34 m.raise("apron::abstract0::abstract0(manager&, size_t, size_t, top)",a);
35}
36
37inline abstract0::abstract0(manager &m, size_t intdim, size_t realdim, bottom x)
38{
39 a = ap_abstract0_bottom(m.get_ap_manager_t(), intdim, realdim);
40 m.raise("apron::abstract0::abstract0(manager&, size_t, size_t, bottom)",a);
41}
42
43inline abstract0::abstract0(manager &m, const abstract0& t)
44{
45 a = ap_abstract0_copy(m.get_ap_manager_t(), t.a);
46 m.raise("apron::abstract0::abstract0::(manager&, const abstract0&)",a);
47}
48
49inline abstract0::abstract0(manager &m, size_t intdim, size_t realdim, const interval_array& x)
50{
51 if (x.size()<intdim+realdim)
52 throw std::invalid_argument("apron::abstract0::abstract0(manager&, size_t, size_t, const interval_array&) array too short");
53 a = ap_abstract0_of_box(m.get_ap_manager_t(), intdim, realdim,
54 const_cast<ap_interval_t**>(x.get_ap_interval_t_array()));
55 m.raise("apron::abstract0::abstract0(manager&, size_t, size_t, const interval_array&)",a);
56}
57
58inline abstract0::abstract0(manager &m, size_t intdim, size_t realdim, const lincons0_array& x)
59{
60 a = ap_abstract0_of_lincons_array(m.get_ap_manager_t(), intdim, realdim,
61 const_cast<ap_lincons0_array_t*>(x.get_ap_lincons0_array_t()));
62 m.raise("apron::abstract0::abstract0(manager&, size_t, size_t, const lincons0_array&)",a);
63}
64
65inline abstract0::abstract0(manager &m, size_t intdim, size_t realdim, const tcons0_array& x)
66{
67 a = ap_abstract0_of_tcons_array(m.get_ap_manager_t(), intdim, realdim,
68 const_cast<ap_tcons0_array_t*>(x.get_ap_tcons0_array_t()));
69 m.raise("apron::abstract0::abstract0(manager&, size_t, size_t, const tcons0_array&)",a);
70}
71
72inline abstract0::abstract0(const abstract0& t)
73{
74 a = ap_abstract0_copy(t.a->man, t.a);
75 manager::raise(a->man, "apron::abstract0::abstract0(abstract0&)",a);
76}
77
78
79
80/* destructors */
81/* =========== */
82
83inline abstract0::~abstract0()
84{
85 if (a && a->value) ap_abstract0_free(a->man, a);
86 a = NULL;
87}
88
89inline void abstract0::free(manager& m)
90{
91 if (a && a->value) ap_abstract0_free(m.get_ap_manager_t(), a);
92 a = NULL;
93}
94
95
96/* assignments */
97/* =========== */
98
99inline abstract0& abstract0::operator=(const abstract0& t)
100{
101 if (&t!=this) {
102 ap_abstract0_t* r = ap_abstract0_copy(a->man, t.a);
103 manager::raise(a->man, "apron::abstract0::operator=(const abstract0&)",r);
104 ap_abstract0_free(a->man, a);
105 a = r;
106 }
107 return *this;
108}
109
110inline abstract0& abstract0::operator=(top t)
111{
112 ap_dimension_t d = ap_abstract0_dimension(a->man, a);
113 ap_abstract0_t* r = ap_abstract0_top(a->man, d.intdim, d.realdim);
114 manager::raise(a->man, "apron::abstract0::operator=(top)",r);
115 ap_abstract0_free(a->man, a);
116 a = r;
117 return *this;
118}
119
120inline abstract0& abstract0::operator=(bottom t)
121{
122 ap_dimension_t d = ap_abstract0_dimension(a->man, a);
123 ap_abstract0_t* r = ap_abstract0_bottom(a->man, d.intdim, d.realdim);
124 manager::raise(a->man, "apron::abstract0::operator=(bottom)",r);
125 ap_abstract0_free(a->man, a);
126 a = r;
127 return *this;
128}
129
130inline abstract0& abstract0::operator=(const interval_array& x)
131{
132 ap_dimension_t d = ap_abstract0_dimension(a->man, a);
133 if (x.size()<d.intdim+d.realdim)
134 throw std::invalid_argument("apron::abstract0::operator=(const interval_array&) array too short");
135 ap_abstract0_t* r = ap_abstract0_of_box(a->man, d.intdim, d.realdim,
136 const_cast<ap_interval_t**>(x.get_ap_interval_t_array()));
137 manager::raise(a->man, "apron::abstract0::operator=(const interval_array&)",r);
138 ap_abstract0_free(a->man, a);
139 a = r;
140 return *this;
141}
142
143inline abstract0& abstract0::operator=(const lincons0_array& x)
144{
145 ap_dimension_t d = ap_abstract0_dimension(a->man, a);
146 ap_abstract0_t* r =
147 ap_abstract0_of_lincons_array(a->man, d.intdim, d.realdim,
148 const_cast<ap_lincons0_array_t*>(x.get_ap_lincons0_array_t()));
149 manager::raise(a->man, "apron::abstract0::operator=(const lincons0_array&)",r);
150 ap_abstract0_free(a->man, a);
151 a = r;
152 return *this;
153}
154
155inline abstract0& abstract0::operator=(const tcons0_array& x)
156{
157 ap_dimension_t d = ap_abstract0_dimension(a->man, a);
158 ap_abstract0_t* r =
159 ap_abstract0_of_tcons_array(a->man, d.intdim, d.realdim,
160 const_cast<ap_tcons0_array_t*>(x.get_ap_tcons0_array_t()));
161 manager::raise(a->man, "apron::abstract0::operator=(const tcons0_array&)",r);
162 ap_abstract0_free(a->man, a);
163 a = r;
164 return *this;
165}
166
167inline abstract0& abstract0::set(manager& m, const abstract0& t)
168{
169 if (&t!=this) {
170 ap_abstract0_t* r = ap_abstract0_copy(m.get_ap_manager_t(), t.a);
171 m.raise("apron::abstract0::set(manager&, abstract0&)",r);
172 ap_abstract0_free(m.get_ap_manager_t(), a);
173 a = r;
174 }
175 return *this;
176}
177
178inline abstract0& abstract0::set(manager& m, top t, size_t intdim, size_t realdim)
179{
180 ap_dimension_t d = ap_abstract0_dimension(m.get_ap_manager_t(), a);
181 if (intdim!=AP_DIM_MAX) d.intdim = intdim;
182 if (realdim!=AP_DIM_MAX) d.realdim = realdim;
183 ap_abstract0_t* r = ap_abstract0_top(m.get_ap_manager_t(), d.intdim, d.realdim);
184 m.raise("apron::abstract0::set(manager&, top, size_t, size_t)",r);
185 ap_abstract0_free(m.get_ap_manager_t(), a);
186 a = r;
187 return *this;
188}
189
190inline abstract0& abstract0::set(manager& m, bottom t, size_t intdim, size_t realdim)
191{
192 ap_dimension_t d = ap_abstract0_dimension(m.get_ap_manager_t(), a);
193 if (intdim!=AP_DIM_MAX) d.intdim = intdim;
194 if (realdim!=AP_DIM_MAX) d.realdim = realdim;
195 ap_abstract0_t* r = ap_abstract0_bottom(m.get_ap_manager_t(), d.intdim, d.realdim);
196 m.raise("apron::abstract0::set(manager&, bottom, size_t, size_t)",r);
197 ap_abstract0_free(m.get_ap_manager_t(), a);
198 a = r;
199 return *this;
200}
201
202inline abstract0& abstract0::set(manager& m, const interval_array& x, size_t intdim, size_t realdim)
203{
204 ap_dimension_t d = ap_abstract0_dimension(m.get_ap_manager_t(), a);
205 if (intdim!=AP_DIM_MAX) d.intdim = intdim;
206 if (realdim!=AP_DIM_MAX) d.realdim = realdim;
207 if (x.size()<d.intdim+d.realdim)
208 throw std::invalid_argument("apron::abstract0::set(manager&, const interval_array&, size_t, size_t) array too short");
209 ap_abstract0_t* r = ap_abstract0_of_box(m.get_ap_manager_t(), d.intdim, d.realdim,
210 const_cast<ap_interval_t**>(x.get_ap_interval_t_array()));
211 m.raise("apron::abstract0::set(manager&, const interval_array&, size_t, size_t)",r);
212 ap_abstract0_free(m.get_ap_manager_t(), a);
213 a = r;
214 return *this;
215}
216
217inline abstract0& abstract0::set(manager& m, const lincons0_array& x, size_t intdim, size_t realdim)
218{
219 ap_dimension_t d = ap_abstract0_dimension(m.get_ap_manager_t(), a);
220 if (intdim!=AP_DIM_MAX) d.intdim = intdim;
221 if (realdim!=AP_DIM_MAX) d.realdim = realdim;
222 ap_abstract0_t* r =
223 ap_abstract0_of_lincons_array(m.get_ap_manager_t(), d.intdim, d.realdim,
224 const_cast<ap_lincons0_array_t*>(x.get_ap_lincons0_array_t()));
225 m.raise("apron::abstract0::set(manager&, const lincons0_array&, size_t, size_t)",r);
226 ap_abstract0_free(m.get_ap_manager_t(), a);
227 a = r;
228 return *this;
229}
230
231inline abstract0& abstract0::set(manager& m, const tcons0_array& x, size_t intdim, size_t realdim)
232{
233 ap_dimension_t d = ap_abstract0_dimension(m.get_ap_manager_t(), a);
234 if (intdim!=AP_DIM_MAX) d.intdim = intdim;
235 if (realdim!=AP_DIM_MAX) d.realdim = realdim;
236 ap_abstract0_t* r =
237 ap_abstract0_of_tcons_array(m.get_ap_manager_t(), d.intdim, d.realdim,
238 const_cast<ap_tcons0_array_t*>(x.get_ap_tcons0_array_t()));
239 m.raise("apron::abstract0::set(manager&, const tcons0_array&, size_t, size_t)",r);
240 ap_abstract0_free(m.get_ap_manager_t(), a);
241 a = r;
242 return *this;
243}
244
245
246/* representation */
247/* ============== */
248
249inline abstract0& abstract0::minimize(manager& m)
250{
251 ap_abstract0_minimize(m.get_ap_manager_t(), a);
252 m.raise("abstract0::minimize(manager&)");
253 return *this;
254}
255
256inline abstract0& abstract0::canonicalize(manager& m)
257{
258 ap_abstract0_canonicalize(m.get_ap_manager_t(), a);
259 m.raise("apron::abstract0::canonicalize(manager&)");
260 return *this;
261}
262
263inline abstract0& abstract0::approximate(manager& m, int algorithm)
264{
265 ap_abstract0_approximate(m.get_ap_manager_t(), a, algorithm);
266 m.raise("apron::abstract0::approximate(manager&, int)");
267 return *this;
268}
269
270
271/* printing */
272/* ======== */
273
274inline void abstract0::print(manager& m, char** name_of_dim, FILE* stream) const
275{
276 ap_abstract0_fprint(stream, m.get_ap_manager_t(), a, name_of_dim);
277 m.raise("apron::abstract0::print(manager&, char**, FILE*)");
278}
279
280inline void printdiff(manager& m, const abstract0& x, const abstract0& y, char** name_of_dim = NULL, FILE* stream = stdout)
281{
282 ap_abstract0_fprintdiff(stream, m.get_ap_manager_t(), x.a, y.a, name_of_dim);
283 m.raise("apron::printdiff(manager&, const abstract0&, const abstract0&, char**, FILE*)");
284}
285
286inline void abstract0::dump(manager& m, FILE* stream) const
287{
288 ap_abstract0_fdump(stream, m.get_ap_manager_t(), a);
289 m.raise("apron::abstract0::dump(manager&, FILE*)");
290}
291
292inline std::ostream& operator<< (std::ostream& os, const abstract0& s)
293{
294 manager m = s.get_manager();
295 if (s.is_bottom(m)) return os << "bottom";
296 if (s.is_top(m)) return os << "top";
297 return os << s.to_lincons_array(m);
298}
299
300
301/* serialisation */
302/* ============= */
303
304inline std::string* abstract0::serialize(manager& m) const
305{
306 ap_membuf_t x = ap_abstract0_serialize_raw(m.get_ap_manager_t(), a);
307 m.raise("apron::abstract0::serialize_raw(manager&)");
308 std::string* s = new std::string((char*)x.ptr, x.size);
309 ::free(x.ptr);
310 return s;
311}
312
313inline abstract0& deserialize(manager& m, abstract0& dst, const std::string& s, size_t* eaten = NULL)
314{
315 size_t x = s.size();
316 ap_abstract0_t* r = ap_abstract0_deserialize_raw(m.get_ap_manager_t(), const_cast<char*>(s.data()), &x);
317 m.raise("apron::deserialize_raw(manager&, abstract0&, const std::string&, size_t*)",r);
318 ap_abstract0_free(m.get_ap_manager_t(), dst.a);
319 dst.a = r;
320 if (eaten) *eaten = x;
321 return dst;
322}
323
324
325/* access */
326/* ====== */
327
328inline manager abstract0::get_manager() const
329{
330 return ap_manager_copy(ap_abstract0_manager(a));
331}
332
333inline ap_dimension_t abstract0::get_dimension(manager& m) const
334{
335 ap_dimension_t d = ap_abstract0_dimension(m.get_ap_manager_t(), a);
336 m.raise("apron::abstract0::get_dimension(manager&)");
337 return d;
338}
339
340inline size_t abstract0::size(manager& m) const
341{
342 size_t sz = ap_abstract0_size(m.get_ap_manager_t(), a);
343 m.raise("apron::abstract0::get_size(manager&)");
344 return sz;
345}
346
347
348
349/* predicates */
350/* ========== */
351
352inline bool abstract0::is_bottom(manager& m) const
353{
354 bool r = ap_abstract0_is_bottom(m.get_ap_manager_t(), a);
355 m.raise("apron::abstract0::is_bottom(manager&)");
356 return r;
357}
358
359inline bool abstract0::is_top(manager& m) const
360{
361 bool r = ap_abstract0_is_top(m.get_ap_manager_t(), a);
362 m.raise("apron::abstract0::is_top(manager&)");
363 return r;
364}
365
366inline bool abstract0::is_eq(manager& m, const abstract0& x) const
367{
368 bool r = ap_abstract0_is_eq(m.get_ap_manager_t(), a, x.a);
369 m.raise("apron::abstract0::is_eq(manager&, const abstract&)");
370 return r;
371}
372
373inline bool abstract0::is_leq(manager& m, const abstract0& x) const
374{
375 bool r = ap_abstract0_is_leq(m.get_ap_manager_t(), a, x.a);
376 m.raise("apron::abstract0::is_leq(manager&, const abstract&)");
377 return r;
378}
379
380inline bool abstract0::sat(manager& m, const lincons0& l) const
381{
382 bool r = ap_abstract0_sat_lincons(m.get_ap_manager_t(), a, const_cast<ap_lincons0_t*>(l.get_ap_lincons0_t()));
383 m.raise("apron::abstract0::sat(manager&, const lincons0&)");
384 return r;
385}
386
387inline bool abstract0::sat(manager& m, const tcons0& l) const
388{
389 bool r = ap_abstract0_sat_tcons(m.get_ap_manager_t(), a, const_cast<ap_tcons0_t*>(l.get_ap_tcons0_t()));
390 m.raise("apron::abstract0::sat(manager&, const tcons0&)");
391 return r;
392}
393
394inline bool abstract0::sat(manager& m, ap_dim_t dim, const interval& i) const
395{
396 bool r = ap_abstract0_sat_interval(m.get_ap_manager_t(), a, dim, const_cast<ap_interval_t*>(i.get_ap_interval_t()));
397 m.raise("apron::abstract0::sat(manager&, ap_dim_t, const interval&)");
398 return r;
399}
400
401inline bool abstract0::is_dimension_unconstrained(manager& m, ap_dim_t dim) const
402{
403 bool r = ap_abstract0_is_dimension_unconstrained(m.get_ap_manager_t(), a, dim);
404 m.raise("apron::abstract0::is_dimension_unconstrained(manager&, ap_dim_t)");
405 return r;
406}
407
408
409inline bool operator== (const abstract0& x, const abstract0& y)
410{
411 bool r = ap_abstract0_is_eq(x.a->man, x.a, y.a);
412 manager::raise(x.a->man, "apron::operator==(const abstract0&, const abstract0&)");
413 return r;
414}
415
416inline bool operator!= (const abstract0& x, const abstract0& y)
417{
418 return !(x==y);
419}
420
421inline bool operator<= (const abstract0& x, const abstract0& y)
422{
423 bool r = ap_abstract0_is_leq(x.a->man, x.a, y.a);
424 manager::raise(x.a->man, "apron::operator<=(const abstract0&, const abstract0&)");
425 return r;
426}
427
428inline bool operator>= (const abstract0& x, const abstract0& y)
429{
430 return y<=x;
431}
432
433inline bool operator> (const abstract0& x, const abstract0& y)
434{
435 return !(x<=y);
436}
437
438inline bool operator< (const abstract0& x, const abstract0& y)
439{
440 return !(y<=x);
441}
442
443
444/* Properties */
445/* ========== */
446
447inline interval abstract0::bound(manager& m, const linexpr0& l) const
448{
449 ap_interval_t* r =
450 ap_abstract0_bound_linexpr(m.get_ap_manager_t(), a,
451 const_cast<ap_linexpr0_t*>(l.get_ap_linexpr0_t()));
452 if (m.exception_raised()) ap_interval_free(r);
453 m.raise("apron::abstract0::bound(manager&, const linexpr0&)");
454 return r;
455}
456
457inline interval abstract0::bound(manager& m, const texpr0& l) const
458{
459 ap_interval_t* r =
460 ap_abstract0_bound_texpr(m.get_ap_manager_t(), a,
461 const_cast<ap_texpr0_t*>(l.get_ap_texpr0_t()));
462 if (m.exception_raised()) ap_interval_free(r);
463 m.raise("apron::abstract0::bound(manager&, const texpr0&)");
464 return r;
465}
466
467inline interval abstract0::bound(manager& m, ap_dim_t d) const
468{
469 ap_interval_t* r = ap_abstract0_bound_dimension(m.get_ap_manager_t(), a, d);
470 if (m.exception_raised()) ap_interval_free(r);
471 m.raise("apron::abstract0::bound(manager&, ap_dim_t)");
472 return r;
473}
474
475inline interval_array abstract0::to_box(manager& m) const
476{
477 ap_dimension_t d = ap_abstract0_dimension(m.get_ap_manager_t(), a);
478 ap_interval_t** r = ap_abstract0_to_box(m.get_ap_manager_t(), a);
479 m.raise("apron::abstract0::to_box(manager&)");
480 return interval_array(d.intdim+d.realdim, r);
481}
482
483inline lincons0_array abstract0::to_lincons_array(manager& m) const
484{
485 ap_lincons0_array_t r = ap_abstract0_to_lincons_array(m.get_ap_manager_t(), a);
486 if (m.exception_raised()) ap_lincons0_array_clear(&r);
487 m.raise("apron::abstract0::to_lincons_array(manager&)");
488 return r;
489}
490
491inline tcons0_array abstract0::to_tcons_array(manager& m) const
492{
493 ap_tcons0_array_t r = ap_abstract0_to_tcons_array(m.get_ap_manager_t(), a);
494 if (m.exception_raised()) ap_tcons0_array_clear(&r);
495 m.raise("apron::abstract0::to_tcons_array(manager&)");
496 return r;
497}
498
499inline generator0_array abstract0::to_generator_array(manager& m) const
500{
501 ap_generator0_array_t r = ap_abstract0_to_generator_array(m.get_ap_manager_t(), a);
502 if (m.exception_raised()) ap_generator0_array_clear(&r);
503 m.raise("apron::abstract0::to_generator_array(manager&)");
504 return r;
505}
506
507
508/* Meet and join */
509/* ============= */
510
511inline abstract0& abstract0::meet(manager& m, const abstract0& y)
512{
513 a = ap_abstract0_meet(m.get_ap_manager_t(), true, a, y.a);
514 m.raise("apron::abstract0::meet(manager&, const abstract0&)");
515 return *this;
516}
517
518inline abstract0& meet(manager& m, abstract0& dst, const abstract0& x, const abstract0& y)
519{
520 ap_abstract0_t* r = ap_abstract0_meet(m.get_ap_manager_t(), false, x.a, y.a);
521 m.raise("apron::meet(manager&, abstract0&, const abstract0&, const abstract0&)",r);
522 ap_abstract0_free(m.get_ap_manager_t(), dst.a);
523 dst.a = r;
524 return dst;
525}
526
527inline abstract0& meet(manager& m, abstract0& dst, const std::vector<const abstract0*>& x)
528{
529 ap_abstract0_t* xx[x.size()];
530 for (size_t i=0;i<x.size();i++)
531 xx[i] = const_cast<abstract0*>(x[i])->get_ap_abstract0_t();
532 ap_abstract0_t* r =
533 ap_abstract0_meet_array(m.get_ap_manager_t(), xx, x.size());
534 m.raise("apron::meet(manager&, abstract0&, const std::vector<const abstract0*>&)",r);
535 ap_abstract0_free(m.get_ap_manager_t(), dst.a);
536 dst.a = r;
537 return dst;
538}
539
540inline abstract0& meet(manager& m, abstract0& dst, size_t sz, const abstract0 * const x[])
541{
542 ap_abstract0_t* xx[sz];
543 for (size_t i=0;i<sz;i++)
544 xx[i] = const_cast<abstract0*>(x[i])->get_ap_abstract0_t();
545 ap_abstract0_t* r =
546 ap_abstract0_meet_array(m.get_ap_manager_t(), xx, sz);
547 m.raise("apron::meet(manager&, abstract0&, size_t, const abstract0 * const [])",r);
548 ap_abstract0_free(m.get_ap_manager_t(), dst.a);
549 dst.a = r;
550 return dst;
551}
552
553inline abstract0& abstract0::join(manager& m, const abstract0& y)
554{
555 a = ap_abstract0_join(m.get_ap_manager_t(), true, a, y.a);
556 m.raise("apron::abstract0::join(manager&, const abstract0&)");
557 return *this;
558}
559
560inline abstract0& join(manager& m, abstract0& dst, const abstract0& x, const abstract0& y)
561{
562 ap_abstract0_t* r = ap_abstract0_join(m.get_ap_manager_t(), false, x.a, y.a);
563 m.raise("apron::join(manager&, abstract0&, const abstract0&, const abstract0&)",r);
564 ap_abstract0_free(m.get_ap_manager_t(), dst.a);
565 dst.a = r;
566 return dst;
567}
568
569inline abstract0& join(manager& m, abstract0& dst, size_t sz, const abstract0 * const x[])
570{
571 ap_abstract0_t* xx[sz];
572 for (size_t i=0;i<sz;i++)
573 xx[i] = const_cast<abstract0*>(x[i])->get_ap_abstract0_t();
574 ap_abstract0_t* r =
575 ap_abstract0_join_array(m.get_ap_manager_t(), xx, sz);
576 m.raise("apron::join(manager&, abstract0&, size_t, const abstract0 * const [])",r);
577 ap_abstract0_free(m.get_ap_manager_t(), dst.a);
578 dst.a = r;
579 return dst;
580}
581
582inline abstract0& join(manager& m, abstract0& dst, const std::vector<const abstract0*>& x)
583{
584 ap_abstract0_t* xx[x.size()];
585 for (size_t i=0;i<x.size();i++)
586 xx[i] = const_cast<abstract0*>(x[i])->get_ap_abstract0_t();
587 ap_abstract0_t* r =
588 ap_abstract0_join_array(m.get_ap_manager_t(), xx, x.size());
589 m.raise("apron::join(manager&, abstract0&, const std::vector<const abstract0*>&)",r);
590 ap_abstract0_free(m.get_ap_manager_t(), dst.a);
591 dst.a = r;
592 return dst;
593}
594
595inline abstract0& abstract0::meet(manager& m, const lincons0_array& y)
596{
597 a = ap_abstract0_meet_lincons_array(m.get_ap_manager_t(), true, a,
598 const_cast<ap_lincons0_array_t*>(y.get_ap_lincons0_array_t()));
599 m.raise("apron::abstract0::meet(manager&, const lincons0_array&)");
600 return *this;
601}
602
603inline abstract0& meet(manager& m, abstract0& dst, const abstract0& x, const lincons0_array& y)
604{
605 ap_abstract0_t* r =
606 ap_abstract0_meet_lincons_array(m.get_ap_manager_t(), false, x.a,
607 const_cast<ap_lincons0_array_t*>(y.get_ap_lincons0_array_t()));
608 m.raise("apron::meet(manager&, abstract0&, const abstract0&, const lincons0_array&)",r);
609 ap_abstract0_free(m.get_ap_manager_t(), dst.a);
610 dst.a = r;
611 return dst;
612}
613
614
615inline abstract0& abstract0::meet(manager& m, const tcons0_array& y)
616{
617 a = ap_abstract0_meet_tcons_array(m.get_ap_manager_t(), true, a,
618 const_cast<ap_tcons0_array_t*>(y.get_ap_tcons0_array_t()));
619 m.raise("apron::abstract0::meet(manager&, const tcons0_array&)");
620 return *this;
621}
622
623inline abstract0& meet(manager& m, abstract0& dst, const abstract0& x, const tcons0_array& y)
624{
625 ap_abstract0_t* r =
626 ap_abstract0_meet_tcons_array(m.get_ap_manager_t(), false, x.a,
627 const_cast<ap_tcons0_array_t*>(y.get_ap_tcons0_array_t()));
628 m.raise("apron::meet(manager&, abstract0&, const abstract0&, const tcons0_array&)",r);
629 ap_abstract0_free(m.get_ap_manager_t(), dst.a);
630 dst.a = r;
631 return dst;
632}
633
634
635
636inline abstract0& abstract0::add_rays(manager& m, const generator0_array& y)
637{
638 a = ap_abstract0_add_ray_array(m.get_ap_manager_t(), true, a,
639 const_cast<ap_generator0_array_t*>(y.get_ap_generator0_array_t()));
640 m.raise("apron::abstract0::add_rays(manager&, const generator0_array&)");
641 return *this;
642}
643
644inline abstract0& add_rays(manager& m, abstract0& dst, const abstract0& x, const generator0_array& y)
645{
646 ap_abstract0_t* r =
647 ap_abstract0_add_ray_array(m.get_ap_manager_t(), false, x.a,
648 const_cast<ap_generator0_array_t*>(y.get_ap_generator0_array_t()));
649 m.raise("apron::add_rays(manager&, abstract0&, const abstract0&, const generator0_array&)",r);
650 ap_abstract0_free(m.get_ap_manager_t(), dst.a);
651 dst.a = r;
652 return dst;
653}
654
655
656
657inline abstract0& abstract0::operator*=(const abstract0& y)
658{
659 a = ap_abstract0_meet(a->man, true, a, y.a);
660 manager::raise(a->man, "apron::abstract0::operator*=(const abstract0&)");
661 return *this;
662}
663
664inline abstract0& abstract0::operator+=(const abstract0& y)
665{
666 a = ap_abstract0_join(a->man, true, a, y.a);
667 manager::raise(a->man, "apron::abstract0::operator+=(const abstract0&)");
668 return *this;
669}
670
671inline abstract0& abstract0::operator*=(const lincons0_array& y)
672{
673 a = ap_abstract0_meet_lincons_array(a->man, true, a,
674 const_cast<ap_lincons0_array_t*>(y.get_ap_lincons0_array_t()));
675 manager::raise(a->man, "apron::abstract0::operator*=(const lincons0_array&)");
676 return *this;
677}
678
679inline abstract0& abstract0::operator*=(const tcons0_array& y)
680{
681 a = ap_abstract0_meet_tcons_array(a->man, true, a,
682 const_cast<ap_tcons0_array_t*>(y.get_ap_tcons0_array_t()));
683 manager::raise(a->man, "apron::abstract0::operator*=(const tcons0_array&)");
684 return *this;
685}
686
687inline abstract0& abstract0::operator+=(const generator0_array& y)
688{
689 a = ap_abstract0_add_ray_array(a->man, true, a,
690 const_cast<ap_generator0_array_t*>(y.get_ap_generator0_array_t()));
691 manager::raise(a->man, "apron::abstract0::operator+=(const generator0_array&)");
692 return *this;
693}
694
695
696/* Assignments */
697/* =========== */
698
699inline abstract0& abstract0::assign(manager& m, ap_dim_t dim, const linexpr0& l, const abstract0& inter)
700{
701 const linexpr0* ll = &l;
702 return assign(m, 1, &dim, &ll, inter);
703}
704
705inline abstract0& abstract0::assign(manager& m, size_t size, const ap_dim_t dim[], const linexpr0 * const l[], const abstract0& inter)
706{
707 a = ap_abstract0_assign_linexpr_array(m.get_ap_manager_t(), true, a,
708 const_cast<ap_dim_t*>(dim),
709 reinterpret_cast<ap_linexpr0_t**>(const_cast<linexpr0**>(l)),
710 size, inter.a);
711 m.raise("apron::abstract0::assign(manager&, size_t size, const ap_dim_t[], const linexpr0 * const [], const abstract0&)");
712 return *this;
713}
714
715inline abstract0& abstract0::assign(manager& m, const std::vector<ap_dim_t>& dim, const std::vector<const linexpr0*>& l, const abstract0& inter)
716{
717 if (l.size()!=dim.size())
718 throw std::invalid_argument("apron::abstract0::assign(manager&, const std::vector<ap_dim_t>&, const std::vector<const linexpr0*>&, const abstract0&) vectors have different size");
719 const linexpr0* ll[l.size()];
720 ap_dim_t dd[dim.size()];
721 for (size_t i=0;i<l.size();i++) {
722 ll[i] = l[i];
723 dd[i] = dim[i];
724 }
725 return assign(m, l.size(), dd, ll, inter);
726}
727
728inline abstract0& assign(manager& m, abstract0& dst, const abstract0& src, ap_dim_t dim, const linexpr0& l, const abstract0& inter = abstract0::null)
729{
730 const linexpr0* ll = &l;
731 return assign(m, dst, src, 1, &dim, &ll, inter);
732}
733
734inline abstract0& assign(manager& m, abstract0& dst, const abstract0& src, size_t size, const ap_dim_t dim[], const linexpr0 * const l[], const abstract0& inter = abstract0::null)
735{
736 ap_abstract0_t* r =
737 ap_abstract0_assign_linexpr_array(m.get_ap_manager_t(), false, src.a,
738 const_cast<ap_dim_t*>(dim),
739 reinterpret_cast<ap_linexpr0_t**>(const_cast<linexpr0**>(l)),
740 size, inter.a);
741 m.raise("apron::assign((manager&, abstract0&, const abstract0&, size_t size, const ap_dim_t[], const linexpr0 * const [], const abstract0&)",r);
742 ap_abstract0_free(m.get_ap_manager_t(), dst.a);
743 dst.a = r;
744 return dst;
745}
746
747inline abstract0& assign(manager& m, abstract0& dst, const abstract0& src, const std::vector<ap_dim_t>& dim, const std::vector<const linexpr0*>& l, const abstract0& inter = abstract0::null)
748{
749 if (l.size()!=dim.size())
750 throw std::invalid_argument("apron::assign(manager&, abstract0, const abstract0&, const std::vector<ap_dim_t>&, const std::vector<const linexpr0*>&, const abstract0&) vectors have different size");
751 const linexpr0* ll[l.size()];
752 ap_dim_t dd[dim.size()];
753 for (size_t i=0;i<l.size();i++) {
754 ll[i] = l[i];
755 dd[i] = dim[i];
756 }
757 return assign(m, dst, src, l.size(), dd, ll, inter);
758}
759
760
761
762
763
764inline abstract0& abstract0::assign(manager& m, ap_dim_t dim, const texpr0& l, const abstract0& inter)
765{
766 const texpr0* ll = &l;
767 return assign(m, 1, &dim, &ll, inter);
768}
769
770inline abstract0& abstract0::assign(manager& m, size_t size, const ap_dim_t dim[], const texpr0 * const l[], const abstract0& inter)
771{
772 a = ap_abstract0_assign_texpr_array(m.get_ap_manager_t(), true, a,
773 const_cast<ap_dim_t*>(dim),
774 reinterpret_cast<ap_texpr0_t**>(const_cast<texpr0**>(l)),
775 size, inter.a);
776 m.raise("apron::abstract0::assign(manager&, size_t size, const ap_dim_t[], const texpr0 * const [], const abstract0&)");
777 return *this;
778}
779
780inline abstract0& abstract0::assign(manager& m, const std::vector<ap_dim_t>& dim, const std::vector<const texpr0*>& l, const abstract0& inter)
781{
782 if (l.size()!=dim.size())
783 throw std::invalid_argument("apron::abstract0::assign(manager&, const std::vector<ap_dim_t>&, const std::vector<const texpr0*>&, const abstract0&) vectors have different size");
784 const texpr0* ll[l.size()];
785 ap_dim_t dd[dim.size()];
786 for (size_t i=0;i<l.size();i++) {
787 ll[i] = l[i];
788 dd[i] = dim[i];
789 }
790 return assign(m, l.size(), dd, ll, inter);
791}
792
793inline abstract0& assign(manager& m, abstract0& dst, const abstract0& src, ap_dim_t dim, const texpr0& l, const abstract0& inter = abstract0::null)
794{
795 const texpr0* ll = &l;
796 return assign(m, dst, src, 1, &dim, &ll, inter);
797}
798
799inline abstract0& assign(manager& m, abstract0& dst, const abstract0& src, size_t size, const ap_dim_t dim[], const texpr0 * const l[], const abstract0& inter = abstract0::null)
800{
801 ap_abstract0_t* r =
802 ap_abstract0_assign_texpr_array(m.get_ap_manager_t(), false, src.a,
803 const_cast<ap_dim_t*>(dim),
804 reinterpret_cast<ap_texpr0_t**>(const_cast<texpr0**>(l)),
805 size, inter.a);
806 m.raise("apron::assign((manager&, abstract0&, const abstract0&, size_t size, const ap_dim_t[], const texpr0 * const [], const abstract0&)",r);
807 ap_abstract0_free(m.get_ap_manager_t(), dst.a);
808 dst.a = r;
809 return dst;
810}
811
812inline abstract0& assign(manager& m, abstract0& dst, const abstract0& src, const std::vector<ap_dim_t>& dim, const std::vector<const texpr0*>& l, const abstract0& inter = abstract0::null)
813{
814 if (l.size()!=dim.size())
815 throw std::invalid_argument("apron::assign(manager&, abstract0, const abstract0&, const std::vector<ap_dim_t>&, const std::vector<const texpr0*>&, const abstract0&) vectors have different size");
816 const texpr0* ll[l.size()];
817 ap_dim_t dd[dim.size()];
818 for (size_t i=0;i<l.size();i++) {
819 ll[i] = l[i];
820 dd[i] = dim[i];
821 }
822 return assign(m, dst, src, l.size(), dd, ll, inter);
823}
824
825
826
827/* Substitutions */
828/* =========== = */
829
830inline abstract0& abstract0::substitute(manager& m, ap_dim_t dim, const linexpr0& l, const abstract0& inter)
831{
832 const linexpr0* ll = &l;
833 return substitute(m, 1, &dim, &ll, inter);
834}
835
836inline abstract0& abstract0::substitute(manager& m, size_t size, const ap_dim_t dim[], const linexpr0 * const l[], const abstract0& inter)
837{
838 a = ap_abstract0_substitute_linexpr_array(m.get_ap_manager_t(), true, a,
839 const_cast<ap_dim_t*>(dim),
840 reinterpret_cast<ap_linexpr0_t**>(const_cast<linexpr0**>(l)),
841 size, inter.a);
842 m.raise("apron::abstract0::substitute(manager&, size_t size, const ap_dim_t[], const linexpr0 * const [], const abstract0&)");
843 return *this;
844}
845
846inline abstract0& abstract0::substitute(manager& m, const std::vector<ap_dim_t>& dim, const std::vector<const linexpr0*>& l, const abstract0& inter)
847{
848 if (l.size()!=dim.size())
849 throw std::invalid_argument("apron::abstract0::substitute(manager&, const std::vector<ap_dim_t>&, const std::vector<const linexpr0*>&, const abstract0&) vectors have different size");
850 const linexpr0* ll[l.size()];
851 ap_dim_t dd[dim.size()];
852 for (size_t i=0;i<l.size();i++) {
853 ll[i] = l[i];
854 dd[i] = dim[i];
855 }
856 return substitute(m, l.size(), dd, ll, inter);
857}
858
859inline abstract0& substitute(manager& m, abstract0& dst, const abstract0& src, ap_dim_t dim, const linexpr0& l, const abstract0& inter = abstract0::null)
860{
861 const linexpr0* ll = &l;
862 return substitute(m, dst, src, 1, &dim, &ll, inter);
863}
864
865inline abstract0& substitute(manager& m, abstract0& dst, const abstract0& src, size_t size, const ap_dim_t dim[], const linexpr0 * const l[], const abstract0& inter = abstract0::null)
866{
867 ap_abstract0_t* r =
868 ap_abstract0_substitute_linexpr_array(m.get_ap_manager_t(), false, src.a,
869 const_cast<ap_dim_t*>(dim),
870 reinterpret_cast<ap_linexpr0_t**>(const_cast<linexpr0**>(l)),
871 size, inter.a);
872 m.raise("apron::substitute((manager&, abstract0&, const abstract0&, size_t size, const ap_dim_t[], const linexpr0 *const [], const abstract0&)",r);
873 ap_abstract0_free(m.get_ap_manager_t(), dst.a);
874 dst.a = r;
875 return dst;
876}
877
878inline abstract0& substitute(manager& m, abstract0& dst, const abstract0& src, const std::vector<ap_dim_t>& dim, const std::vector<const linexpr0*>& l, const abstract0& inter = abstract0::null)
879{
880 if (l.size()!=dim.size())
881 throw std::invalid_argument("apron::substitute(manager&, abstract0, const abstract0&, const std::vector<ap_dim_t>&, const std::vector<const linexpr0*>&, const abstract0&) vectors have different size");
882 const linexpr0* ll[l.size()];
883 ap_dim_t dd[dim.size()];
884 for (size_t i=0;i<l.size();i++) {
885 ll[i] = l[i];
886 dd[i] = dim[i];
887 }
888 return substitute(m, dst, src, l.size(), dd, ll, inter);
889}
890
891
892
893
894
895inline abstract0& abstract0::substitute(manager& m, ap_dim_t dim, const texpr0& l, const abstract0& inter)
896{
897 const texpr0* ll = &l;
898 return substitute(m, 1, &dim, &ll, inter);
899}
900
901inline abstract0& abstract0::substitute(manager& m, size_t size, const ap_dim_t dim[], const texpr0 * const l[], const abstract0& inter)
902{
903 a = ap_abstract0_substitute_texpr_array(m.get_ap_manager_t(), true, a,
904 const_cast<ap_dim_t*>(dim),
905 reinterpret_cast<ap_texpr0_t**>(const_cast<texpr0**>(l)),
906 size, inter.a);
907 m.raise("apron::abstract0::substitute(manager&, size_t size, const ap_dim_t[], const texpr0 * const [], const abstract0&)");
908 return *this;
909}
910
911inline abstract0& abstract0::substitute(manager& m, const std::vector<ap_dim_t>& dim, const std::vector<const texpr0*>& l, const abstract0& inter)
912{
913 if (l.size()!=dim.size())
914 throw std::invalid_argument("apron::abstract0::substitute(manager&, const std::vector<ap_dim_t>&, const std::vector<const texpr0*>&, const abstract0&) vectors have different size");
915 const texpr0* ll[l.size()];
916 ap_dim_t dd[dim.size()];
917 for (size_t i=0;i<l.size();i++) {
918 ll[i] = l[i];
919 dd[i] = dim[i];
920 }
921 return substitute(m, l.size(), dd, ll, inter);
922}
923
924inline abstract0& substitute(manager& m, abstract0& dst, const abstract0& src, ap_dim_t dim, const texpr0& l, const abstract0& inter = abstract0::null)
925{
926 const texpr0* ll = &l;
927 return substitute(m, dst, src, 1, &dim, &ll, inter);
928}
929
930inline abstract0& substitute(manager& m, abstract0& dst, const abstract0& src, size_t size, const ap_dim_t dim[], const texpr0 * const l[], const abstract0& inter = abstract0::null)
931{
932 ap_abstract0_t* r =
933 ap_abstract0_substitute_texpr_array(m.get_ap_manager_t(), false, src.a,
934 const_cast<ap_dim_t*>(dim),
935 reinterpret_cast<ap_texpr0_t**>(const_cast<texpr0**>(l)),
936 size, inter.a);
937 m.raise("apron::substitute((manager&, abstract0&, const abstract0&, size_t size, const ap_dim_t[], const texpr0 * const [], const abstract0&)",r);
938 ap_abstract0_free(m.get_ap_manager_t(), dst.a);
939 dst.a = r;
940 return dst;
941}
942
943inline abstract0& substitute(manager& m, abstract0& dst, const abstract0& src, const std::vector<ap_dim_t>& dim, const std::vector<const texpr0*>& l, const abstract0& inter = abstract0::null)
944{
945 if (l.size()!=dim.size())
946 throw std::invalid_argument("apron::substitute(manager&, abstract0, const abstract0&, const std::vector<ap_dim_t>&, const std::vector<const texpr0*>&, const abstract0&) vectors have different size");
947 const texpr0* ll[l.size()];
948 ap_dim_t dd[dim.size()];
949 for (size_t i=0;i<l.size();i++) {
950 ll[i] = l[i];
951 dd[i] = dim[i];
952 }
953 return substitute(m, dst, src, l.size(), dd, ll, inter);
954}
955
956
957
958
959/* Projection */
960/* ========== */
961
962inline abstract0& abstract0::forget(manager& m, ap_dim_t dim, bool project)
963{
964 return forget(m, 1, &dim, project);
965}
966
967inline abstract0& abstract0::forget(manager& m, size_t size, const ap_dim_t dim[], bool project)
968{
969 a = ap_abstract0_forget_array(m.get_ap_manager_t(), true, a,
970 const_cast<ap_dim_t*>(dim),
971 size, project);
972 m.raise("apron::abstract0::substitute(orget(manager&, size_t size, const ap_dim_t[], bool)");
973 return *this;
974}
975
976inline abstract0& abstract0::forget(manager& m, const std::vector<ap_dim_t> dim, bool project)
977{
978 ap_dim_t dd[dim.size()];
979 for (size_t i=0;i<dim.size();i++) dd[i] = dim[i];
980 return forget(m, dim.size(), dd, project);
981}
982
983inline abstract0& forget(manager& m, abstract0& dst, const abstract0& src, ap_dim_t dim, bool project = false)
984{
985 return forget(m, dst, src, 1, &dim, project);
986}
987
988inline abstract0& forget(manager& m, abstract0& dst, const abstract0& src, size_t size, const ap_dim_t dim[], bool project = false)
989{
990 ap_abstract0_t* r =
991 ap_abstract0_forget_array(m.get_ap_manager_t(), false, src.a,
992 const_cast<ap_dim_t*>(dim),
993 size, project);
994 m.raise("apron::forget(manager&, abstract0&, const abstract0&, size_t size, const ap_dim_t[], bool)",r);
995 ap_abstract0_free(m.get_ap_manager_t(), dst.a);
996 dst.a = r;
997 return dst;
998}
999
1000inline abstract0& forget(manager& m, abstract0& dst, const abstract0& src, const std::vector<ap_dim_t> dim, bool project = false)
1001{
1002 ap_dim_t dd[dim.size()];
1003 for (size_t i=0;i<dim.size();i++) dd[i] = dim[i];
1004 return forget(m, dst, src, dim.size(), dd, project);
1005}
1006
1007
1008/* Change of dimension */
1009/* =================== */
1010
1011inline abstract0& abstract0::add_dimensions(manager& m, const dimchange& d, bool project)
1012{
1013 a = ap_abstract0_add_dimensions(m.get_ap_manager_t(), true, a,
1014 const_cast<ap_dimchange_t*>(d.get_ap_dimchange_t()),
1015 project);
1016 m.raise("apron::abstract0::add_dimensions(manager&, const dimchange&, bool)");
1017 return *this;
1018}
1019
1020
1021inline abstract0& abstract0::remove_dimensions(manager& m, const dimchange& d)
1022{
1023 a = ap_abstract0_remove_dimensions(m.get_ap_manager_t(), true, a,
1024 const_cast<ap_dimchange_t*>(d.get_ap_dimchange_t()));
1025 m.raise("apron::abstract0::remove_dimensions(manager&, const dimchange&)");
1026 return *this;
1027}
1028
1029inline abstract0& abstract0::permute_dimensions(manager& m, const dimperm& d)
1030{
1031 a = ap_abstract0_permute_dimensions(m.get_ap_manager_t(), true, a,
1032 const_cast<ap_dimperm_t*>(d.get_ap_dimperm_t()));
1033 m.raise("apron::abstract0::permute_dimensions(manager&, const dimperm&)");
1034 return *this;
1035}
1036
1037inline abstract0& add_dimensions(manager& m, abstract0& dst, const abstract0& src, const dimchange& d, bool project = false)
1038{
1039 ap_abstract0_t* r =
1040 ap_abstract0_add_dimensions(m.get_ap_manager_t(), false, src.a,
1041 const_cast<ap_dimchange_t*>(d.get_ap_dimchange_t()),
1042 project);
1043 m.raise("apron::add_dimensions(manager&, abstract0&, const abstract0&, const dimchange&, bool)",r);
1044 ap_abstract0_free(m.get_ap_manager_t(), dst.a);
1045 dst.a = r;
1046 return dst;
1047}
1048
1049inline abstract0& remove_dimensions(manager& m, abstract0& dst, const abstract0& src, const dimchange& d)
1050{
1051 ap_abstract0_t* r =
1052 ap_abstract0_remove_dimensions(m.get_ap_manager_t(), false, src.a,
1053 const_cast<ap_dimchange_t*>(d.get_ap_dimchange_t()));
1054 m.raise("apron::remove_dimensions(manager&, abstract0&, const abstract0&, const dimchange&)",r);
1055 ap_abstract0_free(m.get_ap_manager_t(), dst.a);
1056 dst.a = r;
1057 return dst;
1058}
1059
1060inline abstract0& permute_dimensions(manager& m, abstract0& dst, const abstract0& src, const dimperm& d)
1061{
1062 ap_abstract0_t* r =
1063 ap_abstract0_permute_dimensions(m.get_ap_manager_t(), false, src.a,
1064 const_cast<ap_dimperm_t*>(d.get_ap_dimperm_t()));
1065 m.raise("apron::permute_dimensions(manager&, abstract0&, const abstract0&, const dimperm&)",r);
1066 ap_abstract0_free(m.get_ap_manager_t(), dst.a);
1067 dst.a = r;
1068 return dst;
1069}
1070
1071
1072
1073/* Expansion and folding */
1074/* ===================== */
1075
1076inline abstract0& abstract0::expand(manager& m, ap_dim_t dim, size_t n)
1077{
1078 a = ap_abstract0_expand(m.get_ap_manager_t(), true, a, dim, n);
1079 m.raise("apron::abstract0::expand(manager&, ap_dim_t, size_t)");
1080 return *this;
1081}
1082
1083inline abstract0& expand(manager& m, abstract0& dst, const abstract0& src, ap_dim_t dim, size_t n = 1)
1084{
1085 ap_abstract0_t* r = ap_abstract0_expand(m.get_ap_manager_t(), false, src.a, dim, n);
1086 m.raise("apron::expand(manager&, abstract0&, const abstract0&, ap_dim_t, size_t)",r);
1087 ap_abstract0_free(m.get_ap_manager_t(), dst.a);
1088 dst.a = r;
1089 return dst;
1090}
1091
1092inline abstract0& abstract0::fold(manager& m, size_t size, const ap_dim_t dim[])
1093{
1094 a = ap_abstract0_fold(m.get_ap_manager_t(), true, a, const_cast<ap_dim_t*>(dim), size);
1095 m.raise("apron::abstract0::fold(manager&, size_t size, const ap_dim_t[])");
1096 return *this;
1097}
1098
1099inline abstract0& abstract0::fold(manager& m, const std::vector<ap_dim_t>& dim)
1100{
1101 ap_dim_t dd[dim.size()];
1102 for (size_t i=0;i<dim.size();i++) dd[i] = dim[i];
1103 return fold(m, dim.size(), dd);
1104}
1105
1106inline abstract0& fold(manager& m, abstract0& dst, const abstract0& src, size_t size, const ap_dim_t dim[])
1107{
1108 ap_abstract0_t* r =
1109 ap_abstract0_fold(m.get_ap_manager_t(), false, src.a, const_cast<ap_dim_t*>(dim), size);
1110 m.raise("apron::fold(manager&, abstract0&, const abstract0&, size_t size, const ap_dim_t[])",r);
1111 ap_abstract0_free(m.get_ap_manager_t(), dst.a);
1112 dst.a = r;
1113 return dst;
1114}
1115
1116inline abstract0& fold(manager& m, abstract0& dst, const abstract0& src, const std::vector<ap_dim_t>& dim)
1117{
1118 ap_dim_t dd[dim.size()];
1119 for (size_t i=0;i<dim.size();i++) dd[i] = dim[i];
1120 return fold(m, dst, src, dim.size(), dd);
1121}
1122
1123
1124/* Widenings */
1125/* ========= */
1126
1127inline abstract0& widening(manager& m, abstract0& dst, const abstract0& x, const abstract0& y)
1128{
1129 ap_abstract0_t* r = ap_abstract0_widening(m.get_ap_manager_t(), x.a, y.a);
1130 m.raise("apron::wideningg(manager&, abstract0&, const abstract0&, const abstract0&)",r);
1131 ap_abstract0_free(m.get_ap_manager_t(), dst.a);
1132 dst.a = r;
1133 return dst;
1134}
1135
1136inline abstract0& widening(manager& m, abstract0& dst, const abstract0& x, const abstract0& y, const lincons0_array& l)
1137{
1138 ap_abstract0_t* r =
1139 ap_abstract0_widening_threshold(m.get_ap_manager_t(), x.a, y.a,
1140 const_cast<ap_lincons0_array_t*>(l.get_ap_lincons0_array_t()));
1141 m.raise("apron::widening(manager&, abstract0&, const abstract0&, const abstract0&, const lincons0_array&)",r);
1142 ap_abstract0_free(m.get_ap_manager_t(), dst.a);
1143 dst.a = r;
1144 return dst;
1145}
1146
1147
1148/* Closure */
1149/* ======= */
1150
1151inline abstract0& abstract0::closure(manager& m)
1152{
1153 a = ap_abstract0_closure(m.get_ap_manager_t(), true, a);
1154 m.raise("apron::abstract0::closured(manager&)");
1155 return *this;
1156}
1157
1158inline abstract0& closure(manager& m, abstract0& dst, const abstract0& src)
1159{
1160 ap_abstract0_t* r = ap_abstract0_closure(m.get_ap_manager_t(), false, src.a);
1161 m.raise("apron::closure(manager&, abstract0&, const abstract0&)",r);
1162 ap_abstract0_free(m.get_ap_manager_t(), dst.a);
1163 dst.a = r;
1164 return dst;
1165}
1166
1167
1168
1169/* C-level compatibility */
1170/* ===================== */
1171
1172inline ap_abstract0_t* abstract0::get_ap_abstract0_t()
1173{
1174 return a;
1175}
1176
1177inline const ap_abstract0_t* abstract0::get_ap_abstract0_t() const
1178{
1179 return a;
1180}
bool operator==(const abstract0 &x, const abstract0 &y)
Definition apxx_abstract0_inline.hh:409
abstract0 & add_dimensions(manager &m, abstract0 &dst, const abstract0 &src, const dimchange &d, bool project=false)
Definition apxx_abstract0_inline.hh:1037
void printdiff(manager &m, const abstract0 &x, const abstract0 &y, char **name_of_dim=NULL, FILE *stream=stdout)
Definition apxx_abstract0_inline.hh:280
abstract0 & add_rays(manager &m, abstract0 &dst, const abstract0 &x, const generator0_array &y)
Definition apxx_abstract0_inline.hh:644
abstract0 & forget(manager &m, abstract0 &dst, const abstract0 &src, ap_dim_t dim, bool project=false)
Definition apxx_abstract0_inline.hh:983
abstract0 & expand(manager &m, abstract0 &dst, const abstract0 &src, ap_dim_t dim, size_t n=1)
Definition apxx_abstract0_inline.hh:1083
bool operator<=(const abstract0 &x, const abstract0 &y)
Definition apxx_abstract0_inline.hh:421
abstract0 & remove_dimensions(manager &m, abstract0 &dst, const abstract0 &src, const dimchange &d)
Definition apxx_abstract0_inline.hh:1049
bool operator>(const abstract0 &x, const abstract0 &y)
Definition apxx_abstract0_inline.hh:433
abstract0 & join(manager &m, abstract0 &dst, const abstract0 &x, const abstract0 &y)
Definition apxx_abstract0_inline.hh:560
bool operator<(const abstract0 &x, const abstract0 &y)
Definition apxx_abstract0_inline.hh:438
abstract0 & substitute(manager &m, abstract0 &dst, const abstract0 &src, ap_dim_t dim, const linexpr0 &l, const abstract0 &inter=abstract0::null)
Definition apxx_abstract0_inline.hh:859
abstract0 & meet(manager &m, abstract0 &dst, const abstract0 &x, const abstract0 &y)
Definition apxx_abstract0_inline.hh:518
abstract0 & assign(manager &m, abstract0 &dst, const abstract0 &src, ap_dim_t dim, const linexpr0 &l, const abstract0 &inter=abstract0::null)
Definition apxx_abstract0_inline.hh:728
abstract0 & fold(manager &m, abstract0 &dst, const abstract0 &src, size_t size, const ap_dim_t dim[])
Definition apxx_abstract0_inline.hh:1106
abstract0 & closure(manager &m, abstract0 &dst, const abstract0 &src)
Definition apxx_abstract0_inline.hh:1158
bool operator>=(const abstract0 &x, const abstract0 &y)
Definition apxx_abstract0_inline.hh:428
abstract0 & deserialize(manager &m, abstract0 &dst, const std::string &s, size_t *eaten=NULL)
Definition apxx_abstract0_inline.hh:313
bool operator!=(const abstract0 &x, const abstract0 &y)
Definition apxx_abstract0_inline.hh:416
std::ostream & operator<<(std::ostream &os, const abstract0 &s)
Definition apxx_abstract0_inline.hh:292
abstract0 & widening(manager &m, abstract0 &dst, const abstract0 &x, const abstract0 &y)
Definition apxx_abstract0_inline.hh:1127
abstract0 & permute_dimensions(manager &m, abstract0 &dst, const abstract0 &src, const dimperm &d)
Definition apxx_abstract0_inline.hh:1060