APRONXX  0.9.12
/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 
27 inline abstract0::abstract0(ap_abstract0_t* x)
28  : a(x)
29 {}
30 
31 inline 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 
37 inline 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 
43 inline 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 
49 inline 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 
58 inline 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 
65 inline 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 
72 inline 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 
83 inline abstract0::~abstract0()
84 {
85  if (a && a->value) ap_abstract0_free(a->man, a);
86  a = NULL;
87 }
88 
89 inline 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 
99 inline 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 
110 inline 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 
120 inline 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 
130 inline 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 
143 inline 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 
155 inline 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 
167 inline 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 
178 inline 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 
190 inline 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 
202 inline 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 
217 inline 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 
231 inline 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 
249 inline 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 
256 inline 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 
263 inline 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 
274 inline 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 
280 inline 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 
286 inline 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 
292 inline 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 
304 inline 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 
313 inline 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 
328 inline manager abstract0::get_manager() const
329 {
330  return ap_manager_copy(ap_abstract0_manager(a));
331 }
332 
333 inline 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 
340 inline 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 
352 inline 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 
359 inline 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 
366 inline 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 
373 inline 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 
380 inline 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 
387 inline 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 
394 inline 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 
401 inline 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 
409 inline 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 
416 inline bool operator!= (const abstract0& x, const abstract0& y)
417 {
418  return !(x==y);
419 }
420 
421 inline 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 
428 inline bool operator>= (const abstract0& x, const abstract0& y)
429 {
430  return y<=x;
431 }
432 
433 inline bool operator> (const abstract0& x, const abstract0& y)
434 {
435  return !(x<=y);
436 }
437 
438 inline bool operator< (const abstract0& x, const abstract0& y)
439 {
440  return !(y<=x);
441 }
442 
443 
444 /* Properties */
445 /* ========== */
446 
447 inline 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 
457 inline 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 
467 inline 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 
475 inline 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 
483 inline 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 
491 inline 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 
499 inline 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 
511 inline 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 
518 inline 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 
527 inline 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 
540 inline 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 
553 inline 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 
560 inline 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 
569 inline 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 
582 inline 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 
595 inline 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 
603 inline 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 
615 inline 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 
623 inline 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 
636 inline 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 
644 inline 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 
657 inline 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 
664 inline 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 
671 inline 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 
679 inline 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 
687 inline 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 
699 inline 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 
705 inline 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 
715 inline 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 
728 inline 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 
734 inline 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 
747 inline 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 
764 inline 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 
770 inline 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 
780 inline 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 
793 inline 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 
799 inline 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 
812 inline 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 
830 inline 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 
836 inline 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 
846 inline 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 
859 inline 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 
865 inline 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 
878 inline 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 
895 inline 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 
901 inline 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 
911 inline 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 
924 inline 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 
930 inline 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 
943 inline 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 
962 inline abstract0& abstract0::forget(manager& m, ap_dim_t dim, bool project)
963 {
964  return forget(m, 1, &dim, project);
965 }
966 
967 inline 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 
976 inline 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 
983 inline 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 
988 inline 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 
1000 inline 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 
1011 inline 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 
1021 inline 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 
1029 inline 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 
1037 inline 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 
1049 inline 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 
1060 inline 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 
1076 inline 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 
1083 inline 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 
1092 inline 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 
1099 inline 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 
1106 inline 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 
1116 inline 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 
1127 inline 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 
1136 inline 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 
1151 inline 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 
1158 inline 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 
1172 inline ap_abstract0_t* abstract0::get_ap_abstract0_t()
1173 {
1174  return a;
1175 }
1176 
1177 inline const ap_abstract0_t* abstract0::get_ap_abstract0_t() const
1178 {
1179  return a;
1180 }
abstract0 & forget(manager &m, abstract0 &dst, const abstract0 &src, ap_dim_t dim, bool project=false)
Definition: apxx_abstract0_inline.hh:983
abstract0 & fold(manager &m, abstract0 &dst, const abstract0 &src, size_t size, const ap_dim_t dim[])
Definition: apxx_abstract0_inline.hh:1106
bool operator==(const abstract0 &x, const abstract0 &y)
Definition: apxx_abstract0_inline.hh:409
abstract0 & closure(manager &m, abstract0 &dst, const abstract0 &src)
Definition: apxx_abstract0_inline.hh:1158
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:428
abstract0 & add_dimensions(manager &m, abstract0 &dst, const abstract0 &src, const dimchange &d, bool project=false)
Definition: apxx_abstract0_inline.hh:1037
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 & permute_dimensions(manager &m, abstract0 &dst, const abstract0 &src, const dimperm &d)
Definition: apxx_abstract0_inline.hh:1060
abstract0 & deserialize(manager &m, abstract0 &dst, const std::string &s, size_t *eaten=NULL)
Definition: apxx_abstract0_inline.hh:313
abstract0 & expand(manager &m, abstract0 &dst, const abstract0 &src, ap_dim_t dim, size_t n=1)
Definition: apxx_abstract0_inline.hh:1083
abstract0 & widening(manager &m, abstract0 &dst, const abstract0 &x, const abstract0 &y)
Definition: apxx_abstract0_inline.hh:1127
abstract0 & add_rays(manager &m, abstract0 &dst, const abstract0 &x, const generator0_array &y)
Definition: apxx_abstract0_inline.hh:644
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 & 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:416
void printdiff(manager &m, const abstract0 &x, const abstract0 &y, char **name_of_dim=NULL, FILE *stream=stdout)
Definition: apxx_abstract0_inline.hh:280
bool operator<=(const abstract0 &x, const abstract0 &y)
Definition: apxx_abstract0_inline.hh:421
std::ostream & operator<<(std::ostream &os, const abstract0 &s)
Definition: apxx_abstract0_inline.hh:292
bool operator>(const abstract0 &x, const abstract0 &y)
Definition: apxx_abstract0_inline.hh:433
bool operator<(const abstract0 &x, const abstract0 &y)
Definition: apxx_abstract0_inline.hh:438