1 /// These are automatically generated checked C++ bindings for isl.
2 ///
3 /// isl is a library for computing with integer sets and maps described by
4 /// Presburger formulas. On top of this, isl provides various tools for
5 /// polyhedral compilation, ranging from dependence analysis over scheduling
6 /// to AST generation.
7 
8 // clang-format off
9 
10 #ifndef ISL_CPP_CHECKED
11 #define ISL_CPP_CHECKED
12 
13 #include <stdio.h>
14 #include <stdlib.h>
15 #include <isl/set.h>
16 
17 #include <functional>
18 #include <memory>
19 #include <ostream>
20 #include <string>
21 #include <type_traits>
22 
23 namespace isl {
24 
25 #define ISLPP_STRINGIZE_(X) #X
26 #define ISLPP_STRINGIZE(X) ISLPP_STRINGIZE_(X)
27 
28 #define ISLPP_ASSERT(test, message)                          \
29   do {                                                       \
30     if (test)                                                \
31       break;                                                 \
32     fputs("Assertion \"" #test "\" failed at " __FILE__      \
33       ":" ISLPP_STRINGIZE(__LINE__) "\n  " message "\n",     \
34       stderr);                                               \
35     abort();                                                 \
36   } while (0)
37 
38 /* Class used to check that isl::checked::boolean,
39  * isl::checked::stat and isl::checked::size values are checked for errors.
40  */
41 struct checker {
42 	bool checked = false;
~checkerchecker43 	~checker() {
44 		//ISLPP_ASSERT(checked, "IMPLEMENTATION ERROR: Unchecked state");
45 	}
46 };
47 
48 class boolean {
49 private:
50   mutable std::shared_ptr<checker> check = std::make_shared<checker>();
51   isl_bool val;
52 
53   friend boolean manage(isl_bool val);
boolean(isl_bool val)54   boolean(isl_bool val): val(val) {}
55 public:
error()56   static boolean error() {
57     return boolean(isl_bool_error);
58   }
boolean()59   boolean()
60       : val(isl_bool_error) {}
61 
boolean(bool val)62   /* implicit */ boolean(bool val)
63       : val(val ? isl_bool_true : isl_bool_false) {}
64 
release()65   isl_bool release() {
66     auto tmp = val;
67     val = isl_bool_error;
68     check->checked = true;
69     return tmp;
70   }
71 
is_error()72   bool is_error() const { check->checked = true; return val == isl_bool_error; }
is_false()73   bool is_false() const { check->checked = true; return val == isl_bool_false; }
is_true()74   bool is_true() const { check->checked = true; return val == isl_bool_true; }
75 
76   operator bool() const {
77     //ISLPP_ASSERT(check->checked, "IMPLEMENTATION ERROR: Unchecked error state");
78     ISLPP_ASSERT(!is_error(), "IMPLEMENTATION ERROR: Unhandled error state");
79     return is_true();
80   }
81 
negate()82   boolean negate() {
83     if (val == isl_bool_true)
84       val = isl_bool_false;
85     else if (val == isl_bool_false)
86       val = isl_bool_true;
87     return *this;
88   }
89 
90   boolean operator!() const {
91     return boolean(*this).negate();
92   }
93 };
94 
manage(isl_bool val)95 inline boolean manage(isl_bool val) {
96   return boolean(val);
97 }
98 
99 class ctx {
100   isl_ctx *ptr;
101 public:
ctx(isl_ctx * ctx)102   /* implicit */ ctx(isl_ctx *ctx)
103       : ptr(ctx) {}
release()104   isl_ctx *release() {
105     auto tmp = ptr;
106     ptr = nullptr;
107     return tmp;
108   }
get()109   isl_ctx *get() {
110     return ptr;
111   }
112 };
113 
114 /* Class encapsulating an isl_stat value.
115  */
116 class stat {
117 private:
118 	mutable std::shared_ptr<checker> check = std::make_shared<checker>();
119 	isl_stat val;
120 
121 	friend stat manage(isl_stat val);
stat(isl_stat val)122 	stat(isl_stat val) : val(val) {}
123 public:
ok()124 	static stat ok() {
125 		return stat(isl_stat_ok);
126 	}
error()127 	static stat error() {
128 		return stat(isl_stat_error);
129 	}
stat()130 	stat() : val(isl_stat_error) {}
131 
release()132 	isl_stat release() {
133 		check->checked = true;
134 		return val;
135 	}
136 
is_error()137 	bool is_error() const {
138 		check->checked = true;
139 		return val == isl_stat_error;
140 	}
is_ok()141 	bool is_ok() const {
142 		check->checked = true;
143 		return val == isl_stat_ok;
144 	}
145 };
146 
manage(isl_stat val)147 inline stat manage(isl_stat val)
148 {
149 	return stat(val);
150 }
151 
152 /* Class encapsulating an isl_size value.
153  */
154 class size {
155 private:
156 	mutable std::shared_ptr<checker> check = std::make_shared<checker>();
157 	isl_size val;
158 
159 	friend size manage(isl_size val);
size(isl_size val)160 	size(isl_size val) : val(val) {}
161 public:
size()162 	size() : val(isl_size_error) {}
163 
release()164 	isl_size release() {
165 		auto tmp = val;
166 		val = isl_size_error;
167 		check->checked = true;
168 		return tmp;
169 	}
170 
is_error()171 	bool is_error() const {
172 		check->checked = true;
173 		return val == isl_size_error;
174 	}
175 
176 	explicit operator unsigned() const {
177 		ISLPP_ASSERT(check->checked,
178 			    "IMPLEMENTATION ERROR: Unchecked error state");
179 		ISLPP_ASSERT(!is_error(),
180 			    "IMPLEMENTATION ERROR: Unhandled error state");
181 		return val;
182 	}
183 };
184 
manage(isl_size val)185 inline size manage(isl_size val)
186 {
187 	return size(val);
188 }
189 
190 enum class dim {
191   cst = isl_dim_cst,
192   param = isl_dim_param,
193   in = isl_dim_in,
194   out = isl_dim_out,
195   set = isl_dim_set,
196   div = isl_dim_div,
197   all = isl_dim_all
198 };
199 
200 } // namespace isl
201 #include <isl/id.h>
202 #include <isl/space.h>
203 #include <isl/val.h>
204 #include <isl/aff.h>
205 #include <isl/set.h>
206 #include <isl/map.h>
207 #include <isl/ilp.h>
208 #include <isl/constraint.h>
209 #include <isl/union_set.h>
210 #include <isl/union_map.h>
211 #include <isl/flow.h>
212 #include <isl/schedule.h>
213 #include <isl/schedule_node.h>
214 #include <isl/ast_build.h>
215 #include <isl/fixed_box.h>
216 
217 namespace isl {
218 
219 // forward declarations
220 class aff;
221 class aff_list;
222 class ast_build;
223 class ast_expr;
224 class ast_expr_id;
225 class ast_expr_int;
226 class ast_expr_op;
227 class ast_expr_op_access;
228 class ast_expr_op_add;
229 class ast_expr_op_address_of;
230 class ast_expr_op_and;
231 class ast_expr_op_and_then;
232 class ast_expr_op_call;
233 class ast_expr_op_cond;
234 class ast_expr_op_div;
235 class ast_expr_op_eq;
236 class ast_expr_op_fdiv_q;
237 class ast_expr_op_ge;
238 class ast_expr_op_gt;
239 class ast_expr_op_le;
240 class ast_expr_op_lt;
241 class ast_expr_op_max;
242 class ast_expr_op_member;
243 class ast_expr_op_min;
244 class ast_expr_op_minus;
245 class ast_expr_op_mul;
246 class ast_expr_op_or;
247 class ast_expr_op_or_else;
248 class ast_expr_op_pdiv_q;
249 class ast_expr_op_pdiv_r;
250 class ast_expr_op_select;
251 class ast_expr_op_sub;
252 class ast_expr_op_zdiv_r;
253 class ast_node;
254 class ast_node_block;
255 class ast_node_for;
256 class ast_node_if;
257 class ast_node_list;
258 class ast_node_mark;
259 class ast_node_user;
260 class basic_map;
261 class basic_map_list;
262 class basic_set;
263 class basic_set_list;
264 class constraint;
265 class fixed_box;
266 class id;
267 class id_list;
268 class id_to_ast_expr;
269 class local_space;
270 class map;
271 class map_list;
272 class multi_aff;
273 class multi_id;
274 class multi_pw_aff;
275 class multi_union_pw_aff;
276 class multi_val;
277 class point;
278 class pw_aff;
279 class pw_aff_list;
280 class pw_multi_aff;
281 class pw_multi_aff_list;
282 class schedule;
283 class schedule_constraints;
284 class schedule_node;
285 class schedule_node_band;
286 class schedule_node_context;
287 class schedule_node_domain;
288 class schedule_node_expansion;
289 class schedule_node_extension;
290 class schedule_node_filter;
291 class schedule_node_guard;
292 class schedule_node_leaf;
293 class schedule_node_mark;
294 class schedule_node_sequence;
295 class schedule_node_set;
296 class set;
297 class set_list;
298 class space;
299 class union_access_info;
300 class union_flow;
301 class union_map;
302 class union_pw_aff;
303 class union_pw_aff_list;
304 class union_pw_multi_aff;
305 class union_set;
306 class union_set_list;
307 class val;
308 class val_list;
309 
310 // declarations for isl::aff
311 inline aff manage(__isl_take isl_aff *ptr);
312 inline aff manage_copy(__isl_keep isl_aff *ptr);
313 
314 class aff {
315   friend inline aff manage(__isl_take isl_aff *ptr);
316   friend inline aff manage_copy(__isl_keep isl_aff *ptr);
317 
318 protected:
319   isl_aff *ptr = nullptr;
320 
321   inline explicit aff(__isl_take isl_aff *ptr);
322 
323 public:
324   inline /* implicit */ aff();
325   inline /* implicit */ aff(const aff &obj);
326   inline explicit aff(isl::ctx ctx, const std::string &str);
327   inline explicit aff(isl::local_space ls, isl::val val);
328   inline explicit aff(isl::local_space ls);
329   inline aff &operator=(aff obj);
330   inline ~aff();
331   inline __isl_give isl_aff *copy() const &;
332   inline __isl_give isl_aff *copy() && = delete;
333   inline __isl_keep isl_aff *get() const;
334   inline __isl_give isl_aff *release();
335   inline bool is_null() const;
336   inline isl::ctx ctx() const;
337 
338   inline isl::aff add(isl::aff aff2) const;
339   inline isl::multi_aff add(const isl::multi_aff &multi2) const;
340   inline isl::multi_pw_aff add(const isl::multi_pw_aff &multi2) const;
341   inline isl::multi_union_pw_aff add(const isl::multi_union_pw_aff &multi2) const;
342   inline isl::pw_aff add(const isl::pw_aff &pwaff2) const;
343   inline isl::pw_multi_aff add(const isl::pw_multi_aff &pma2) const;
344   inline isl::union_pw_aff add(const isl::union_pw_aff &upa2) const;
345   inline isl::union_pw_multi_aff add(const isl::union_pw_multi_aff &upma2) const;
346   inline isl::aff add_constant(isl::val v) const;
347   inline isl::aff add_constant(long v) const;
348   inline isl::multi_aff add_constant(const isl::multi_val &mv) const;
349   inline isl::aff add_constant_si(int v) const;
350   inline isl::pw_aff add_dims(isl::dim type, unsigned int n) const;
351   inline isl::union_pw_multi_aff add_pw_multi_aff(const isl::pw_multi_aff &pma) const;
352   inline isl::union_pw_multi_aff apply(const isl::union_pw_multi_aff &upma2) const;
353   inline isl::aff as_aff() const;
354   inline isl::map as_map() const;
355   inline isl::multi_aff as_multi_aff() const;
356   inline isl::multi_union_pw_aff as_multi_union_pw_aff() const;
357   inline isl::pw_multi_aff as_pw_multi_aff() const;
358   inline isl::set as_set() const;
359   inline isl::union_map as_union_map() const;
360   inline isl::aff at(int pos) const;
361   inline isl::basic_set bind(isl::id id) const;
362   inline isl::basic_set bind(const std::string &id) const;
363   inline isl::basic_set bind(const isl::multi_id &tuple) const;
364   inline isl::pw_aff bind_domain(const isl::multi_id &tuple) const;
365   inline isl::pw_aff bind_domain_wrapped_domain(const isl::multi_id &tuple) const;
366   inline isl::aff ceil() const;
367   inline isl::pw_aff coalesce() const;
368   inline isl::pw_aff cond(const isl::pw_aff &pwaff_true, const isl::pw_aff &pwaff_false) const;
369   inline isl::multi_val constant_multi_val() const;
370   inline isl::val constant_val() const;
371   inline isl::val get_constant_val() const;
372   inline isl::val denominator_val() const;
373   inline isl::val get_denominator_val() const;
374   inline class size dim(isl::dim type) const;
375   inline isl::id dim_id(isl::dim type, unsigned int pos) const;
376   inline isl::aff div(isl::aff aff2) const;
377   inline isl::pw_aff div(const isl::pw_aff &pa2) const;
378   inline isl::set domain() const;
379   inline isl::space domain_space() const;
380   inline isl::pw_multi_aff drop_dims(isl::dim type, unsigned int first, unsigned int n) const;
381   inline isl::set eq_set(isl::aff aff2) const;
382   inline isl::set eq_set(const isl::pw_aff &pwaff2) const;
383   inline isl::val eval(isl::point pnt) const;
384   inline isl::pw_multi_aff extract_pw_multi_aff(const isl::space &space) const;
385   inline isl::multi_aff flat_range_product(const isl::multi_aff &multi2) const;
386   inline isl::multi_pw_aff flat_range_product(const isl::multi_pw_aff &multi2) const;
387   inline isl::multi_union_pw_aff flat_range_product(const isl::multi_union_pw_aff &multi2) const;
388   inline isl::pw_multi_aff flat_range_product(const isl::pw_multi_aff &pma2) const;
389   inline isl::union_pw_multi_aff flat_range_product(const isl::union_pw_multi_aff &upma2) const;
390   inline isl::aff floor() const;
391   inline stat foreach_piece(const std::function<stat(isl::set, isl::aff)> &fn) const;
392   inline stat foreach_piece(const std::function<stat(isl::set, isl::multi_aff)> &fn) const;
393   inline stat foreach_pw_aff(const std::function<stat(isl::pw_aff)> &fn) const;
394   inline isl::set ge_set(isl::aff aff2) const;
395   inline isl::set ge_set(const isl::pw_aff &pwaff2) const;
396   inline isl::aff gist(isl::set context) const;
397   inline isl::union_pw_aff gist(const isl::union_set &context) const;
398   inline isl::aff gist(const isl::basic_set &context) const;
399   inline isl::aff gist(const isl::point &context) const;
400   inline isl::set gt_set(isl::aff aff2) const;
401   inline isl::set gt_set(const isl::pw_aff &pwaff2) const;
402   inline boolean has_range_tuple_id() const;
403   inline isl::multi_aff identity() const;
404   inline isl::pw_aff insert_domain(const isl::space &domain) const;
405   inline isl::pw_aff intersect_domain(const isl::set &set) const;
406   inline isl::union_pw_aff intersect_domain(const isl::space &space) const;
407   inline isl::union_pw_aff intersect_domain(const isl::union_set &uset) const;
408   inline isl::union_pw_aff intersect_domain_wrapped_domain(const isl::union_set &uset) const;
409   inline isl::union_pw_aff intersect_domain_wrapped_range(const isl::union_set &uset) const;
410   inline isl::pw_aff intersect_params(const isl::set &set) const;
411   inline boolean involves_locals() const;
412   inline boolean involves_nan() const;
413   inline boolean involves_param(const isl::id &id) const;
414   inline boolean involves_param(const std::string &id) const;
415   inline boolean involves_param(const isl::id_list &list) const;
416   inline boolean is_cst() const;
417   inline boolean is_equal(const isl::pw_aff &pa2) const;
418   inline boolean isa_aff() const;
419   inline boolean isa_multi_aff() const;
420   inline boolean isa_pw_multi_aff() const;
421   inline isl::set le_set(isl::aff aff2) const;
422   inline isl::set le_set(const isl::pw_aff &pwaff2) const;
423   inline isl::aff_list list() const;
424   inline isl::set lt_set(isl::aff aff2) const;
425   inline isl::set lt_set(const isl::pw_aff &pwaff2) const;
426   inline isl::multi_pw_aff max(const isl::multi_pw_aff &multi2) const;
427   inline isl::pw_aff max(const isl::pw_aff &pwaff2) const;
428   inline isl::multi_val max_multi_val() const;
429   inline isl::multi_pw_aff min(const isl::multi_pw_aff &multi2) const;
430   inline isl::pw_aff min(const isl::pw_aff &pwaff2) const;
431   inline isl::multi_val min_multi_val() const;
432   inline isl::aff mod(isl::val mod) const;
433   inline isl::aff mod(long mod) const;
434   inline isl::aff mul(isl::aff aff2) const;
435   inline isl::pw_aff mul(const isl::pw_aff &pwaff2) const;
436   inline class size n_piece() const;
437   inline isl::set ne_set(isl::aff aff2) const;
438   inline isl::set ne_set(const isl::pw_aff &pwaff2) const;
439   inline isl::aff neg() const;
440   inline boolean plain_is_empty() const;
441   inline boolean plain_is_equal(const isl::multi_aff &multi2) const;
442   inline boolean plain_is_equal(const isl::multi_pw_aff &multi2) const;
443   inline boolean plain_is_equal(const isl::multi_union_pw_aff &multi2) const;
444   inline isl::pw_multi_aff preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const;
445   inline isl::union_pw_multi_aff preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const;
446   inline isl::multi_aff product(const isl::multi_aff &multi2) const;
447   inline isl::multi_pw_aff product(const isl::multi_pw_aff &multi2) const;
448   inline isl::pw_multi_aff product(const isl::pw_multi_aff &pma2) const;
449   inline isl::aff pullback(isl::multi_aff ma) const;
450   inline isl::pw_aff pullback(const isl::multi_pw_aff &mpa) const;
451   inline isl::pw_aff pullback(const isl::pw_multi_aff &pma) const;
452   inline isl::union_pw_aff pullback(const isl::union_pw_multi_aff &upma) const;
453   inline isl::aff pullback(const isl::aff &ma) const;
454   inline isl::pw_multi_aff_list pw_multi_aff_list() const;
455   inline isl::pw_multi_aff range_factor_domain() const;
456   inline isl::pw_multi_aff range_factor_range() const;
457   inline isl::multi_aff range_product(const isl::multi_aff &multi2) const;
458   inline isl::multi_pw_aff range_product(const isl::multi_pw_aff &multi2) const;
459   inline isl::multi_union_pw_aff range_product(const isl::multi_union_pw_aff &multi2) const;
460   inline isl::pw_multi_aff range_product(const isl::pw_multi_aff &pma2) const;
461   inline isl::union_pw_multi_aff range_product(const isl::union_pw_multi_aff &upma2) const;
462   inline isl::id range_tuple_id() const;
463   inline isl::multi_aff reset_range_tuple_id() const;
464   inline isl::multi_aff reset_tuple_id(isl::dim type) const;
465   inline isl::aff scale(isl::val v) const;
466   inline isl::aff scale(long v) const;
467   inline isl::multi_aff scale(const isl::multi_val &mv) const;
468   inline isl::aff scale_down(isl::val v) const;
469   inline isl::aff scale_down(long v) const;
470   inline isl::multi_aff scale_down(const isl::multi_val &mv) const;
471   inline isl::multi_aff set_aff(int pos, const isl::aff &el) const;
472   inline isl::multi_aff set_at(int pos, const isl::aff &el) const;
473   inline isl::multi_pw_aff set_at(int pos, const isl::pw_aff &el) const;
474   inline isl::multi_union_pw_aff set_at(int pos, const isl::union_pw_aff &el) const;
475   inline isl::aff set_constant_si(int v) const;
476   inline isl::multi_pw_aff set_pw_aff(int pos, const isl::pw_aff &el) const;
477   inline isl::pw_multi_aff set_pw_aff(unsigned int pos, const isl::pw_aff &pa) const;
478   inline isl::multi_aff set_range_tuple(const isl::id &id) const;
479   inline isl::multi_aff set_range_tuple(const std::string &id) const;
480   inline isl::pw_aff set_tuple_id(isl::dim type, const isl::id &id) const;
481   inline isl::pw_aff set_tuple_id(isl::dim type, const std::string &id) const;
482   inline isl::multi_union_pw_aff set_union_pw_aff(int pos, const isl::union_pw_aff &el) const;
483   inline class size size() const;
484   inline isl::space space() const;
485   inline isl::aff sub(isl::aff aff2) const;
486   inline isl::multi_aff sub(const isl::multi_aff &multi2) const;
487   inline isl::multi_pw_aff sub(const isl::multi_pw_aff &multi2) const;
488   inline isl::multi_union_pw_aff sub(const isl::multi_union_pw_aff &multi2) const;
489   inline isl::pw_aff sub(const isl::pw_aff &pwaff2) const;
490   inline isl::pw_multi_aff sub(const isl::pw_multi_aff &pma2) const;
491   inline isl::union_pw_aff sub(const isl::union_pw_aff &upa2) const;
492   inline isl::union_pw_multi_aff sub(const isl::union_pw_multi_aff &upma2) const;
493   inline isl::pw_aff subtract_domain(const isl::set &set) const;
494   inline isl::union_pw_aff subtract_domain(const isl::space &space) const;
495   inline isl::union_pw_aff subtract_domain(const isl::union_set &uset) const;
496   inline isl::pw_aff tdiv_q(const isl::pw_aff &pa2) const;
497   inline isl::pw_aff tdiv_r(const isl::pw_aff &pa2) const;
498   inline isl::aff_list to_list() const;
499   inline isl::multi_pw_aff to_multi_pw_aff() const;
500   inline isl::multi_union_pw_aff to_multi_union_pw_aff() const;
501   inline isl::pw_multi_aff to_pw_multi_aff() const;
502   inline isl::union_pw_aff to_union_pw_aff() const;
503   inline isl::union_pw_multi_aff to_union_pw_multi_aff() const;
504   inline isl::id tuple_id(isl::dim type) const;
505   inline isl::aff unbind_params_insert_domain(isl::multi_id domain) const;
506   inline isl::multi_pw_aff union_add(const isl::multi_pw_aff &mpa2) const;
507   inline isl::multi_union_pw_aff union_add(const isl::multi_union_pw_aff &mupa2) const;
508   inline isl::pw_aff union_add(const isl::pw_aff &pwaff2) const;
509   inline isl::pw_multi_aff union_add(const isl::pw_multi_aff &pma2) const;
510   inline isl::union_pw_aff union_add(const isl::union_pw_aff &upa2) const;
511   inline isl::union_pw_multi_aff union_add(const isl::union_pw_multi_aff &upma2) const;
512   static inline isl::aff var_on_domain(isl::local_space ls, isl::dim type, unsigned int pos);
513   static inline isl::aff zero_on_domain(isl::space space);
514 };
515 
516 // declarations for isl::aff_list
517 inline aff_list manage(__isl_take isl_aff_list *ptr);
518 inline aff_list manage_copy(__isl_keep isl_aff_list *ptr);
519 
520 class aff_list {
521   friend inline aff_list manage(__isl_take isl_aff_list *ptr);
522   friend inline aff_list manage_copy(__isl_keep isl_aff_list *ptr);
523 
524 protected:
525   isl_aff_list *ptr = nullptr;
526 
527   inline explicit aff_list(__isl_take isl_aff_list *ptr);
528 
529 public:
530   inline /* implicit */ aff_list();
531   inline /* implicit */ aff_list(const aff_list &obj);
532   inline explicit aff_list(isl::ctx ctx, int n);
533   inline explicit aff_list(isl::aff el);
534   inline explicit aff_list(isl::ctx ctx, const std::string &str);
535   inline aff_list &operator=(aff_list obj);
536   inline ~aff_list();
537   inline __isl_give isl_aff_list *copy() const &;
538   inline __isl_give isl_aff_list *copy() && = delete;
539   inline __isl_keep isl_aff_list *get() const;
540   inline __isl_give isl_aff_list *release();
541   inline bool is_null() const;
542   inline isl::ctx ctx() const;
543 
544   inline isl::aff_list add(isl::aff el) const;
545   inline isl::aff at(int index) const;
546   inline isl::aff get_at(int index) const;
547   inline isl::aff_list clear() const;
548   inline isl::aff_list concat(isl::aff_list list2) const;
549   inline isl::aff_list drop(unsigned int first, unsigned int n) const;
550   inline stat foreach(const std::function<stat(isl::aff)> &fn) const;
551   inline isl::aff_list insert(unsigned int pos, isl::aff el) const;
552   inline class size size() const;
553 };
554 
555 // declarations for isl::ast_build
556 inline ast_build manage(__isl_take isl_ast_build *ptr);
557 inline ast_build manage_copy(__isl_keep isl_ast_build *ptr);
558 
559 class ast_build {
560   friend inline ast_build manage(__isl_take isl_ast_build *ptr);
561   friend inline ast_build manage_copy(__isl_keep isl_ast_build *ptr);
562 
563 protected:
564   isl_ast_build *ptr = nullptr;
565 
566   inline explicit ast_build(__isl_take isl_ast_build *ptr);
567 
568 public:
569   inline /* implicit */ ast_build();
570   inline /* implicit */ ast_build(const ast_build &obj);
571   inline explicit ast_build(isl::ctx ctx);
572   inline ast_build &operator=(ast_build obj);
573   inline ~ast_build();
574   inline __isl_give isl_ast_build *copy() const &;
575   inline __isl_give isl_ast_build *copy() && = delete;
576   inline __isl_keep isl_ast_build *get() const;
577   inline __isl_give isl_ast_build *release();
578   inline bool is_null() const;
579   inline isl::ctx ctx() const;
580 
581 private:
582   inline ast_build &copy_callbacks(const ast_build &obj);
583   struct at_each_domain_data {
584     std::function<isl::ast_node(isl::ast_node, isl::ast_build)> func;
585   };
586   std::shared_ptr<at_each_domain_data> at_each_domain_data;
587   static inline isl_ast_node *at_each_domain(isl_ast_node *arg_0, isl_ast_build *arg_1, void *arg_2);
588   inline void set_at_each_domain_data(const std::function<isl::ast_node(isl::ast_node, isl::ast_build)> &fn);
589 public:
590   inline isl::ast_build set_at_each_domain(const std::function<isl::ast_node(isl::ast_node, isl::ast_build)> &fn) const;
591   inline isl::ast_expr access_from(isl::multi_pw_aff mpa) const;
592   inline isl::ast_expr access_from(isl::pw_multi_aff pma) const;
593   inline isl::ast_expr call_from(isl::multi_pw_aff mpa) const;
594   inline isl::ast_expr call_from(isl::pw_multi_aff pma) const;
595   inline isl::ast_expr expr_from(isl::pw_aff pa) const;
596   inline isl::ast_expr expr_from(isl::set set) const;
597   static inline isl::ast_build from_context(isl::set set);
598   inline isl::ast_node node_from(isl::schedule schedule) const;
599   inline isl::ast_node node_from_schedule_map(isl::union_map schedule) const;
600   inline isl::ast_build restrict(isl::set set) const;
601   inline isl::union_map schedule() const;
602   inline isl::union_map get_schedule() const;
603 };
604 
605 // declarations for isl::ast_expr
606 inline ast_expr manage(__isl_take isl_ast_expr *ptr);
607 inline ast_expr manage_copy(__isl_keep isl_ast_expr *ptr);
608 
609 class ast_expr {
610   friend inline ast_expr manage(__isl_take isl_ast_expr *ptr);
611   friend inline ast_expr manage_copy(__isl_keep isl_ast_expr *ptr);
612 
613 protected:
614   isl_ast_expr *ptr = nullptr;
615 
616   inline explicit ast_expr(__isl_take isl_ast_expr *ptr);
617 
618 public:
619   inline /* implicit */ ast_expr();
620   inline /* implicit */ ast_expr(const ast_expr &obj);
621   inline ast_expr &operator=(ast_expr obj);
622   inline ~ast_expr();
623   inline __isl_give isl_ast_expr *copy() const &;
624   inline __isl_give isl_ast_expr *copy() && = delete;
625   inline __isl_keep isl_ast_expr *get() const;
626   inline __isl_give isl_ast_expr *release();
627   inline bool is_null() const;
628 private:
629   template <typename T,
630           typename = typename std::enable_if<std::is_same<
631                   const decltype(isl_ast_expr_get_type(nullptr)),
632                   const T>::value>::type>
633   inline boolean isa_type(T subtype) const;
634 public:
635   template <class T> inline boolean isa() const;
636   template <class T> inline T as() const;
637   inline isl::ctx ctx() const;
638 
639   inline isl::ast_expr add(isl::ast_expr expr2) const;
640   inline isl::ast_expr address_of() const;
641   inline isl::ast_expr eq(isl::ast_expr expr2) const;
642   static inline isl::ast_expr from_val(isl::val v);
643   inline isl::id id() const;
644   inline isl::id get_id() const;
645   inline isl::ast_expr le(isl::ast_expr expr2) const;
646   inline isl::ast_expr mul(isl::ast_expr expr2) const;
647   inline isl::ast_expr op_arg(int pos) const;
648   inline isl::ast_expr get_op_arg(int pos) const;
649   inline std::string to_C_str() const;
650   inline isl::val val() const;
651   inline isl::val get_val() const;
652 };
653 
654 // declarations for isl::ast_expr_id
655 
656 class ast_expr_id : public ast_expr {
657   template <class T>
658   friend boolean ast_expr::isa() const;
659   friend ast_expr_id ast_expr::as<ast_expr_id>() const;
660   static const auto type = isl_ast_expr_id;
661 
662 protected:
663   inline explicit ast_expr_id(__isl_take isl_ast_expr *ptr);
664 
665 public:
666   inline /* implicit */ ast_expr_id();
667   inline /* implicit */ ast_expr_id(const ast_expr_id &obj);
668   inline ast_expr_id &operator=(ast_expr_id obj);
669   inline isl::ctx ctx() const;
670 
671   inline isl::id id() const;
672   inline isl::id get_id() const;
673 };
674 
675 // declarations for isl::ast_expr_int
676 
677 class ast_expr_int : public ast_expr {
678   template <class T>
679   friend boolean ast_expr::isa() const;
680   friend ast_expr_int ast_expr::as<ast_expr_int>() const;
681   static const auto type = isl_ast_expr_int;
682 
683 protected:
684   inline explicit ast_expr_int(__isl_take isl_ast_expr *ptr);
685 
686 public:
687   inline /* implicit */ ast_expr_int();
688   inline /* implicit */ ast_expr_int(const ast_expr_int &obj);
689   inline ast_expr_int &operator=(ast_expr_int obj);
690   inline isl::ctx ctx() const;
691 
692   inline isl::val val() const;
693   inline isl::val get_val() const;
694 };
695 
696 // declarations for isl::ast_expr_op
697 
698 class ast_expr_op : public ast_expr {
699   template <class T>
700   friend boolean ast_expr::isa() const;
701   friend ast_expr_op ast_expr::as<ast_expr_op>() const;
702   static const auto type = isl_ast_expr_op;
703 
704 protected:
705   inline explicit ast_expr_op(__isl_take isl_ast_expr *ptr);
706 
707 public:
708   inline /* implicit */ ast_expr_op();
709   inline /* implicit */ ast_expr_op(const ast_expr_op &obj);
710   inline ast_expr_op &operator=(ast_expr_op obj);
711 private:
712   template <typename T,
713           typename = typename std::enable_if<std::is_same<
714                   const decltype(isl_ast_expr_op_get_type(nullptr)),
715                   const T>::value>::type>
716   inline boolean isa_type(T subtype) const;
717 public:
718   template <class T> inline boolean isa() const;
719   template <class T> inline T as() const;
720   inline isl::ctx ctx() const;
721 
722   inline isl::ast_expr arg(int pos) const;
723   inline isl::ast_expr get_arg(int pos) const;
724   inline class size n_arg() const;
725   inline class size get_n_arg() const;
726 };
727 
728 // declarations for isl::ast_expr_op_access
729 
730 class ast_expr_op_access : public ast_expr_op {
731   template <class T>
732   friend boolean ast_expr_op::isa() const;
733   friend ast_expr_op_access ast_expr_op::as<ast_expr_op_access>() const;
734   static const auto type = isl_ast_expr_op_access;
735 
736 protected:
737   inline explicit ast_expr_op_access(__isl_take isl_ast_expr *ptr);
738 
739 public:
740   inline /* implicit */ ast_expr_op_access();
741   inline /* implicit */ ast_expr_op_access(const ast_expr_op_access &obj);
742   inline ast_expr_op_access &operator=(ast_expr_op_access obj);
743   inline isl::ctx ctx() const;
744 
745 };
746 
747 // declarations for isl::ast_expr_op_add
748 
749 class ast_expr_op_add : public ast_expr_op {
750   template <class T>
751   friend boolean ast_expr_op::isa() const;
752   friend ast_expr_op_add ast_expr_op::as<ast_expr_op_add>() const;
753   static const auto type = isl_ast_expr_op_add;
754 
755 protected:
756   inline explicit ast_expr_op_add(__isl_take isl_ast_expr *ptr);
757 
758 public:
759   inline /* implicit */ ast_expr_op_add();
760   inline /* implicit */ ast_expr_op_add(const ast_expr_op_add &obj);
761   inline ast_expr_op_add &operator=(ast_expr_op_add obj);
762   inline isl::ctx ctx() const;
763 
764 };
765 
766 // declarations for isl::ast_expr_op_address_of
767 
768 class ast_expr_op_address_of : public ast_expr_op {
769   template <class T>
770   friend boolean ast_expr_op::isa() const;
771   friend ast_expr_op_address_of ast_expr_op::as<ast_expr_op_address_of>() const;
772   static const auto type = isl_ast_expr_op_address_of;
773 
774 protected:
775   inline explicit ast_expr_op_address_of(__isl_take isl_ast_expr *ptr);
776 
777 public:
778   inline /* implicit */ ast_expr_op_address_of();
779   inline /* implicit */ ast_expr_op_address_of(const ast_expr_op_address_of &obj);
780   inline ast_expr_op_address_of &operator=(ast_expr_op_address_of obj);
781   inline isl::ctx ctx() const;
782 
783 };
784 
785 // declarations for isl::ast_expr_op_and
786 
787 class ast_expr_op_and : public ast_expr_op {
788   template <class T>
789   friend boolean ast_expr_op::isa() const;
790   friend ast_expr_op_and ast_expr_op::as<ast_expr_op_and>() const;
791   static const auto type = isl_ast_expr_op_and;
792 
793 protected:
794   inline explicit ast_expr_op_and(__isl_take isl_ast_expr *ptr);
795 
796 public:
797   inline /* implicit */ ast_expr_op_and();
798   inline /* implicit */ ast_expr_op_and(const ast_expr_op_and &obj);
799   inline ast_expr_op_and &operator=(ast_expr_op_and obj);
800   inline isl::ctx ctx() const;
801 
802 };
803 
804 // declarations for isl::ast_expr_op_and_then
805 
806 class ast_expr_op_and_then : public ast_expr_op {
807   template <class T>
808   friend boolean ast_expr_op::isa() const;
809   friend ast_expr_op_and_then ast_expr_op::as<ast_expr_op_and_then>() const;
810   static const auto type = isl_ast_expr_op_and_then;
811 
812 protected:
813   inline explicit ast_expr_op_and_then(__isl_take isl_ast_expr *ptr);
814 
815 public:
816   inline /* implicit */ ast_expr_op_and_then();
817   inline /* implicit */ ast_expr_op_and_then(const ast_expr_op_and_then &obj);
818   inline ast_expr_op_and_then &operator=(ast_expr_op_and_then obj);
819   inline isl::ctx ctx() const;
820 
821 };
822 
823 // declarations for isl::ast_expr_op_call
824 
825 class ast_expr_op_call : public ast_expr_op {
826   template <class T>
827   friend boolean ast_expr_op::isa() const;
828   friend ast_expr_op_call ast_expr_op::as<ast_expr_op_call>() const;
829   static const auto type = isl_ast_expr_op_call;
830 
831 protected:
832   inline explicit ast_expr_op_call(__isl_take isl_ast_expr *ptr);
833 
834 public:
835   inline /* implicit */ ast_expr_op_call();
836   inline /* implicit */ ast_expr_op_call(const ast_expr_op_call &obj);
837   inline ast_expr_op_call &operator=(ast_expr_op_call obj);
838   inline isl::ctx ctx() const;
839 
840 };
841 
842 // declarations for isl::ast_expr_op_cond
843 
844 class ast_expr_op_cond : public ast_expr_op {
845   template <class T>
846   friend boolean ast_expr_op::isa() const;
847   friend ast_expr_op_cond ast_expr_op::as<ast_expr_op_cond>() const;
848   static const auto type = isl_ast_expr_op_cond;
849 
850 protected:
851   inline explicit ast_expr_op_cond(__isl_take isl_ast_expr *ptr);
852 
853 public:
854   inline /* implicit */ ast_expr_op_cond();
855   inline /* implicit */ ast_expr_op_cond(const ast_expr_op_cond &obj);
856   inline ast_expr_op_cond &operator=(ast_expr_op_cond obj);
857   inline isl::ctx ctx() const;
858 
859 };
860 
861 // declarations for isl::ast_expr_op_div
862 
863 class ast_expr_op_div : public ast_expr_op {
864   template <class T>
865   friend boolean ast_expr_op::isa() const;
866   friend ast_expr_op_div ast_expr_op::as<ast_expr_op_div>() const;
867   static const auto type = isl_ast_expr_op_div;
868 
869 protected:
870   inline explicit ast_expr_op_div(__isl_take isl_ast_expr *ptr);
871 
872 public:
873   inline /* implicit */ ast_expr_op_div();
874   inline /* implicit */ ast_expr_op_div(const ast_expr_op_div &obj);
875   inline ast_expr_op_div &operator=(ast_expr_op_div obj);
876   inline isl::ctx ctx() const;
877 
878 };
879 
880 // declarations for isl::ast_expr_op_eq
881 
882 class ast_expr_op_eq : public ast_expr_op {
883   template <class T>
884   friend boolean ast_expr_op::isa() const;
885   friend ast_expr_op_eq ast_expr_op::as<ast_expr_op_eq>() const;
886   static const auto type = isl_ast_expr_op_eq;
887 
888 protected:
889   inline explicit ast_expr_op_eq(__isl_take isl_ast_expr *ptr);
890 
891 public:
892   inline /* implicit */ ast_expr_op_eq();
893   inline /* implicit */ ast_expr_op_eq(const ast_expr_op_eq &obj);
894   inline ast_expr_op_eq &operator=(ast_expr_op_eq obj);
895   inline isl::ctx ctx() const;
896 
897 };
898 
899 // declarations for isl::ast_expr_op_fdiv_q
900 
901 class ast_expr_op_fdiv_q : public ast_expr_op {
902   template <class T>
903   friend boolean ast_expr_op::isa() const;
904   friend ast_expr_op_fdiv_q ast_expr_op::as<ast_expr_op_fdiv_q>() const;
905   static const auto type = isl_ast_expr_op_fdiv_q;
906 
907 protected:
908   inline explicit ast_expr_op_fdiv_q(__isl_take isl_ast_expr *ptr);
909 
910 public:
911   inline /* implicit */ ast_expr_op_fdiv_q();
912   inline /* implicit */ ast_expr_op_fdiv_q(const ast_expr_op_fdiv_q &obj);
913   inline ast_expr_op_fdiv_q &operator=(ast_expr_op_fdiv_q obj);
914   inline isl::ctx ctx() const;
915 
916 };
917 
918 // declarations for isl::ast_expr_op_ge
919 
920 class ast_expr_op_ge : public ast_expr_op {
921   template <class T>
922   friend boolean ast_expr_op::isa() const;
923   friend ast_expr_op_ge ast_expr_op::as<ast_expr_op_ge>() const;
924   static const auto type = isl_ast_expr_op_ge;
925 
926 protected:
927   inline explicit ast_expr_op_ge(__isl_take isl_ast_expr *ptr);
928 
929 public:
930   inline /* implicit */ ast_expr_op_ge();
931   inline /* implicit */ ast_expr_op_ge(const ast_expr_op_ge &obj);
932   inline ast_expr_op_ge &operator=(ast_expr_op_ge obj);
933   inline isl::ctx ctx() const;
934 
935 };
936 
937 // declarations for isl::ast_expr_op_gt
938 
939 class ast_expr_op_gt : public ast_expr_op {
940   template <class T>
941   friend boolean ast_expr_op::isa() const;
942   friend ast_expr_op_gt ast_expr_op::as<ast_expr_op_gt>() const;
943   static const auto type = isl_ast_expr_op_gt;
944 
945 protected:
946   inline explicit ast_expr_op_gt(__isl_take isl_ast_expr *ptr);
947 
948 public:
949   inline /* implicit */ ast_expr_op_gt();
950   inline /* implicit */ ast_expr_op_gt(const ast_expr_op_gt &obj);
951   inline ast_expr_op_gt &operator=(ast_expr_op_gt obj);
952   inline isl::ctx ctx() const;
953 
954 };
955 
956 // declarations for isl::ast_expr_op_le
957 
958 class ast_expr_op_le : public ast_expr_op {
959   template <class T>
960   friend boolean ast_expr_op::isa() const;
961   friend ast_expr_op_le ast_expr_op::as<ast_expr_op_le>() const;
962   static const auto type = isl_ast_expr_op_le;
963 
964 protected:
965   inline explicit ast_expr_op_le(__isl_take isl_ast_expr *ptr);
966 
967 public:
968   inline /* implicit */ ast_expr_op_le();
969   inline /* implicit */ ast_expr_op_le(const ast_expr_op_le &obj);
970   inline ast_expr_op_le &operator=(ast_expr_op_le obj);
971   inline isl::ctx ctx() const;
972 
973 };
974 
975 // declarations for isl::ast_expr_op_lt
976 
977 class ast_expr_op_lt : public ast_expr_op {
978   template <class T>
979   friend boolean ast_expr_op::isa() const;
980   friend ast_expr_op_lt ast_expr_op::as<ast_expr_op_lt>() const;
981   static const auto type = isl_ast_expr_op_lt;
982 
983 protected:
984   inline explicit ast_expr_op_lt(__isl_take isl_ast_expr *ptr);
985 
986 public:
987   inline /* implicit */ ast_expr_op_lt();
988   inline /* implicit */ ast_expr_op_lt(const ast_expr_op_lt &obj);
989   inline ast_expr_op_lt &operator=(ast_expr_op_lt obj);
990   inline isl::ctx ctx() const;
991 
992 };
993 
994 // declarations for isl::ast_expr_op_max
995 
996 class ast_expr_op_max : public ast_expr_op {
997   template <class T>
998   friend boolean ast_expr_op::isa() const;
999   friend ast_expr_op_max ast_expr_op::as<ast_expr_op_max>() const;
1000   static const auto type = isl_ast_expr_op_max;
1001 
1002 protected:
1003   inline explicit ast_expr_op_max(__isl_take isl_ast_expr *ptr);
1004 
1005 public:
1006   inline /* implicit */ ast_expr_op_max();
1007   inline /* implicit */ ast_expr_op_max(const ast_expr_op_max &obj);
1008   inline ast_expr_op_max &operator=(ast_expr_op_max obj);
1009   inline isl::ctx ctx() const;
1010 
1011 };
1012 
1013 // declarations for isl::ast_expr_op_member
1014 
1015 class ast_expr_op_member : public ast_expr_op {
1016   template <class T>
1017   friend boolean ast_expr_op::isa() const;
1018   friend ast_expr_op_member ast_expr_op::as<ast_expr_op_member>() const;
1019   static const auto type = isl_ast_expr_op_member;
1020 
1021 protected:
1022   inline explicit ast_expr_op_member(__isl_take isl_ast_expr *ptr);
1023 
1024 public:
1025   inline /* implicit */ ast_expr_op_member();
1026   inline /* implicit */ ast_expr_op_member(const ast_expr_op_member &obj);
1027   inline ast_expr_op_member &operator=(ast_expr_op_member obj);
1028   inline isl::ctx ctx() const;
1029 
1030 };
1031 
1032 // declarations for isl::ast_expr_op_min
1033 
1034 class ast_expr_op_min : public ast_expr_op {
1035   template <class T>
1036   friend boolean ast_expr_op::isa() const;
1037   friend ast_expr_op_min ast_expr_op::as<ast_expr_op_min>() const;
1038   static const auto type = isl_ast_expr_op_min;
1039 
1040 protected:
1041   inline explicit ast_expr_op_min(__isl_take isl_ast_expr *ptr);
1042 
1043 public:
1044   inline /* implicit */ ast_expr_op_min();
1045   inline /* implicit */ ast_expr_op_min(const ast_expr_op_min &obj);
1046   inline ast_expr_op_min &operator=(ast_expr_op_min obj);
1047   inline isl::ctx ctx() const;
1048 
1049 };
1050 
1051 // declarations for isl::ast_expr_op_minus
1052 
1053 class ast_expr_op_minus : public ast_expr_op {
1054   template <class T>
1055   friend boolean ast_expr_op::isa() const;
1056   friend ast_expr_op_minus ast_expr_op::as<ast_expr_op_minus>() const;
1057   static const auto type = isl_ast_expr_op_minus;
1058 
1059 protected:
1060   inline explicit ast_expr_op_minus(__isl_take isl_ast_expr *ptr);
1061 
1062 public:
1063   inline /* implicit */ ast_expr_op_minus();
1064   inline /* implicit */ ast_expr_op_minus(const ast_expr_op_minus &obj);
1065   inline ast_expr_op_minus &operator=(ast_expr_op_minus obj);
1066   inline isl::ctx ctx() const;
1067 
1068 };
1069 
1070 // declarations for isl::ast_expr_op_mul
1071 
1072 class ast_expr_op_mul : public ast_expr_op {
1073   template <class T>
1074   friend boolean ast_expr_op::isa() const;
1075   friend ast_expr_op_mul ast_expr_op::as<ast_expr_op_mul>() const;
1076   static const auto type = isl_ast_expr_op_mul;
1077 
1078 protected:
1079   inline explicit ast_expr_op_mul(__isl_take isl_ast_expr *ptr);
1080 
1081 public:
1082   inline /* implicit */ ast_expr_op_mul();
1083   inline /* implicit */ ast_expr_op_mul(const ast_expr_op_mul &obj);
1084   inline ast_expr_op_mul &operator=(ast_expr_op_mul obj);
1085   inline isl::ctx ctx() const;
1086 
1087 };
1088 
1089 // declarations for isl::ast_expr_op_or
1090 
1091 class ast_expr_op_or : public ast_expr_op {
1092   template <class T>
1093   friend boolean ast_expr_op::isa() const;
1094   friend ast_expr_op_or ast_expr_op::as<ast_expr_op_or>() const;
1095   static const auto type = isl_ast_expr_op_or;
1096 
1097 protected:
1098   inline explicit ast_expr_op_or(__isl_take isl_ast_expr *ptr);
1099 
1100 public:
1101   inline /* implicit */ ast_expr_op_or();
1102   inline /* implicit */ ast_expr_op_or(const ast_expr_op_or &obj);
1103   inline ast_expr_op_or &operator=(ast_expr_op_or obj);
1104   inline isl::ctx ctx() const;
1105 
1106 };
1107 
1108 // declarations for isl::ast_expr_op_or_else
1109 
1110 class ast_expr_op_or_else : public ast_expr_op {
1111   template <class T>
1112   friend boolean ast_expr_op::isa() const;
1113   friend ast_expr_op_or_else ast_expr_op::as<ast_expr_op_or_else>() const;
1114   static const auto type = isl_ast_expr_op_or_else;
1115 
1116 protected:
1117   inline explicit ast_expr_op_or_else(__isl_take isl_ast_expr *ptr);
1118 
1119 public:
1120   inline /* implicit */ ast_expr_op_or_else();
1121   inline /* implicit */ ast_expr_op_or_else(const ast_expr_op_or_else &obj);
1122   inline ast_expr_op_or_else &operator=(ast_expr_op_or_else obj);
1123   inline isl::ctx ctx() const;
1124 
1125 };
1126 
1127 // declarations for isl::ast_expr_op_pdiv_q
1128 
1129 class ast_expr_op_pdiv_q : public ast_expr_op {
1130   template <class T>
1131   friend boolean ast_expr_op::isa() const;
1132   friend ast_expr_op_pdiv_q ast_expr_op::as<ast_expr_op_pdiv_q>() const;
1133   static const auto type = isl_ast_expr_op_pdiv_q;
1134 
1135 protected:
1136   inline explicit ast_expr_op_pdiv_q(__isl_take isl_ast_expr *ptr);
1137 
1138 public:
1139   inline /* implicit */ ast_expr_op_pdiv_q();
1140   inline /* implicit */ ast_expr_op_pdiv_q(const ast_expr_op_pdiv_q &obj);
1141   inline ast_expr_op_pdiv_q &operator=(ast_expr_op_pdiv_q obj);
1142   inline isl::ctx ctx() const;
1143 
1144 };
1145 
1146 // declarations for isl::ast_expr_op_pdiv_r
1147 
1148 class ast_expr_op_pdiv_r : public ast_expr_op {
1149   template <class T>
1150   friend boolean ast_expr_op::isa() const;
1151   friend ast_expr_op_pdiv_r ast_expr_op::as<ast_expr_op_pdiv_r>() const;
1152   static const auto type = isl_ast_expr_op_pdiv_r;
1153 
1154 protected:
1155   inline explicit ast_expr_op_pdiv_r(__isl_take isl_ast_expr *ptr);
1156 
1157 public:
1158   inline /* implicit */ ast_expr_op_pdiv_r();
1159   inline /* implicit */ ast_expr_op_pdiv_r(const ast_expr_op_pdiv_r &obj);
1160   inline ast_expr_op_pdiv_r &operator=(ast_expr_op_pdiv_r obj);
1161   inline isl::ctx ctx() const;
1162 
1163 };
1164 
1165 // declarations for isl::ast_expr_op_select
1166 
1167 class ast_expr_op_select : public ast_expr_op {
1168   template <class T>
1169   friend boolean ast_expr_op::isa() const;
1170   friend ast_expr_op_select ast_expr_op::as<ast_expr_op_select>() const;
1171   static const auto type = isl_ast_expr_op_select;
1172 
1173 protected:
1174   inline explicit ast_expr_op_select(__isl_take isl_ast_expr *ptr);
1175 
1176 public:
1177   inline /* implicit */ ast_expr_op_select();
1178   inline /* implicit */ ast_expr_op_select(const ast_expr_op_select &obj);
1179   inline ast_expr_op_select &operator=(ast_expr_op_select obj);
1180   inline isl::ctx ctx() const;
1181 
1182 };
1183 
1184 // declarations for isl::ast_expr_op_sub
1185 
1186 class ast_expr_op_sub : public ast_expr_op {
1187   template <class T>
1188   friend boolean ast_expr_op::isa() const;
1189   friend ast_expr_op_sub ast_expr_op::as<ast_expr_op_sub>() const;
1190   static const auto type = isl_ast_expr_op_sub;
1191 
1192 protected:
1193   inline explicit ast_expr_op_sub(__isl_take isl_ast_expr *ptr);
1194 
1195 public:
1196   inline /* implicit */ ast_expr_op_sub();
1197   inline /* implicit */ ast_expr_op_sub(const ast_expr_op_sub &obj);
1198   inline ast_expr_op_sub &operator=(ast_expr_op_sub obj);
1199   inline isl::ctx ctx() const;
1200 
1201 };
1202 
1203 // declarations for isl::ast_expr_op_zdiv_r
1204 
1205 class ast_expr_op_zdiv_r : public ast_expr_op {
1206   template <class T>
1207   friend boolean ast_expr_op::isa() const;
1208   friend ast_expr_op_zdiv_r ast_expr_op::as<ast_expr_op_zdiv_r>() const;
1209   static const auto type = isl_ast_expr_op_zdiv_r;
1210 
1211 protected:
1212   inline explicit ast_expr_op_zdiv_r(__isl_take isl_ast_expr *ptr);
1213 
1214 public:
1215   inline /* implicit */ ast_expr_op_zdiv_r();
1216   inline /* implicit */ ast_expr_op_zdiv_r(const ast_expr_op_zdiv_r &obj);
1217   inline ast_expr_op_zdiv_r &operator=(ast_expr_op_zdiv_r obj);
1218   inline isl::ctx ctx() const;
1219 
1220 };
1221 
1222 // declarations for isl::ast_node
1223 inline ast_node manage(__isl_take isl_ast_node *ptr);
1224 inline ast_node manage_copy(__isl_keep isl_ast_node *ptr);
1225 
1226 class ast_node {
1227   friend inline ast_node manage(__isl_take isl_ast_node *ptr);
1228   friend inline ast_node manage_copy(__isl_keep isl_ast_node *ptr);
1229 
1230 protected:
1231   isl_ast_node *ptr = nullptr;
1232 
1233   inline explicit ast_node(__isl_take isl_ast_node *ptr);
1234 
1235 public:
1236   inline /* implicit */ ast_node();
1237   inline /* implicit */ ast_node(const ast_node &obj);
1238   inline ast_node &operator=(ast_node obj);
1239   inline ~ast_node();
1240   inline __isl_give isl_ast_node *copy() const &;
1241   inline __isl_give isl_ast_node *copy() && = delete;
1242   inline __isl_keep isl_ast_node *get() const;
1243   inline __isl_give isl_ast_node *release();
1244   inline bool is_null() const;
1245 private:
1246   template <typename T,
1247           typename = typename std::enable_if<std::is_same<
1248                   const decltype(isl_ast_node_get_type(nullptr)),
1249                   const T>::value>::type>
1250   inline boolean isa_type(T subtype) const;
1251 public:
1252   template <class T> inline boolean isa() const;
1253   template <class T> inline T as() const;
1254   inline isl::ctx ctx() const;
1255 
1256   inline isl::id annotation() const;
1257   inline isl::id get_annotation() const;
1258   inline std::string to_C_str() const;
1259   inline isl::ast_node_list to_list() const;
1260 };
1261 
1262 // declarations for isl::ast_node_block
1263 
1264 class ast_node_block : public ast_node {
1265   template <class T>
1266   friend boolean ast_node::isa() const;
1267   friend ast_node_block ast_node::as<ast_node_block>() const;
1268   static const auto type = isl_ast_node_block;
1269 
1270 protected:
1271   inline explicit ast_node_block(__isl_take isl_ast_node *ptr);
1272 
1273 public:
1274   inline /* implicit */ ast_node_block();
1275   inline /* implicit */ ast_node_block(const ast_node_block &obj);
1276   inline ast_node_block &operator=(ast_node_block obj);
1277   inline isl::ctx ctx() const;
1278 
1279   inline isl::ast_node_list children() const;
1280   inline isl::ast_node_list get_children() const;
1281 };
1282 
1283 // declarations for isl::ast_node_for
1284 
1285 class ast_node_for : public ast_node {
1286   template <class T>
1287   friend boolean ast_node::isa() const;
1288   friend ast_node_for ast_node::as<ast_node_for>() const;
1289   static const auto type = isl_ast_node_for;
1290 
1291 protected:
1292   inline explicit ast_node_for(__isl_take isl_ast_node *ptr);
1293 
1294 public:
1295   inline /* implicit */ ast_node_for();
1296   inline /* implicit */ ast_node_for(const ast_node_for &obj);
1297   inline ast_node_for &operator=(ast_node_for obj);
1298   inline isl::ctx ctx() const;
1299 
1300   inline isl::ast_node body() const;
1301   inline isl::ast_node get_body() const;
1302   inline isl::ast_expr cond() const;
1303   inline isl::ast_expr get_cond() const;
1304   inline isl::ast_expr inc() const;
1305   inline isl::ast_expr get_inc() const;
1306   inline isl::ast_expr init() const;
1307   inline isl::ast_expr get_init() const;
1308   inline boolean is_degenerate() const;
1309   inline isl::ast_expr iterator() const;
1310   inline isl::ast_expr get_iterator() const;
1311 };
1312 
1313 // declarations for isl::ast_node_if
1314 
1315 class ast_node_if : public ast_node {
1316   template <class T>
1317   friend boolean ast_node::isa() const;
1318   friend ast_node_if ast_node::as<ast_node_if>() const;
1319   static const auto type = isl_ast_node_if;
1320 
1321 protected:
1322   inline explicit ast_node_if(__isl_take isl_ast_node *ptr);
1323 
1324 public:
1325   inline /* implicit */ ast_node_if();
1326   inline /* implicit */ ast_node_if(const ast_node_if &obj);
1327   inline ast_node_if &operator=(ast_node_if obj);
1328   inline isl::ctx ctx() const;
1329 
1330   inline isl::ast_expr cond() const;
1331   inline isl::ast_expr get_cond() const;
1332   inline isl::ast_node else_node() const;
1333   inline isl::ast_node get_else_node() const;
1334   inline boolean has_else_node() const;
1335   inline isl::ast_node then_node() const;
1336   inline isl::ast_node get_then_node() const;
1337 };
1338 
1339 // declarations for isl::ast_node_list
1340 inline ast_node_list manage(__isl_take isl_ast_node_list *ptr);
1341 inline ast_node_list manage_copy(__isl_keep isl_ast_node_list *ptr);
1342 
1343 class ast_node_list {
1344   friend inline ast_node_list manage(__isl_take isl_ast_node_list *ptr);
1345   friend inline ast_node_list manage_copy(__isl_keep isl_ast_node_list *ptr);
1346 
1347 protected:
1348   isl_ast_node_list *ptr = nullptr;
1349 
1350   inline explicit ast_node_list(__isl_take isl_ast_node_list *ptr);
1351 
1352 public:
1353   inline /* implicit */ ast_node_list();
1354   inline /* implicit */ ast_node_list(const ast_node_list &obj);
1355   inline explicit ast_node_list(isl::ctx ctx, int n);
1356   inline explicit ast_node_list(isl::ast_node el);
1357   inline ast_node_list &operator=(ast_node_list obj);
1358   inline ~ast_node_list();
1359   inline __isl_give isl_ast_node_list *copy() const &;
1360   inline __isl_give isl_ast_node_list *copy() && = delete;
1361   inline __isl_keep isl_ast_node_list *get() const;
1362   inline __isl_give isl_ast_node_list *release();
1363   inline bool is_null() const;
1364   inline isl::ctx ctx() const;
1365 
1366   inline isl::ast_node_list add(isl::ast_node el) const;
1367   inline isl::ast_node at(int index) const;
1368   inline isl::ast_node get_at(int index) const;
1369   inline isl::ast_node_list clear() const;
1370   inline isl::ast_node_list concat(isl::ast_node_list list2) const;
1371   inline isl::ast_node_list drop(unsigned int first, unsigned int n) const;
1372   inline stat foreach(const std::function<stat(isl::ast_node)> &fn) const;
1373   inline isl::ast_node_list insert(unsigned int pos, isl::ast_node el) const;
1374   inline class size size() const;
1375 };
1376 
1377 // declarations for isl::ast_node_mark
1378 
1379 class ast_node_mark : public ast_node {
1380   template <class T>
1381   friend boolean ast_node::isa() const;
1382   friend ast_node_mark ast_node::as<ast_node_mark>() const;
1383   static const auto type = isl_ast_node_mark;
1384 
1385 protected:
1386   inline explicit ast_node_mark(__isl_take isl_ast_node *ptr);
1387 
1388 public:
1389   inline /* implicit */ ast_node_mark();
1390   inline /* implicit */ ast_node_mark(const ast_node_mark &obj);
1391   inline ast_node_mark &operator=(ast_node_mark obj);
1392   inline isl::ctx ctx() const;
1393 
1394   inline isl::id id() const;
1395   inline isl::id get_id() const;
1396   inline isl::ast_node node() const;
1397   inline isl::ast_node get_node() const;
1398 };
1399 
1400 // declarations for isl::ast_node_user
1401 
1402 class ast_node_user : public ast_node {
1403   template <class T>
1404   friend boolean ast_node::isa() const;
1405   friend ast_node_user ast_node::as<ast_node_user>() const;
1406   static const auto type = isl_ast_node_user;
1407 
1408 protected:
1409   inline explicit ast_node_user(__isl_take isl_ast_node *ptr);
1410 
1411 public:
1412   inline /* implicit */ ast_node_user();
1413   inline /* implicit */ ast_node_user(const ast_node_user &obj);
1414   inline ast_node_user &operator=(ast_node_user obj);
1415   inline isl::ctx ctx() const;
1416 
1417   inline isl::ast_expr expr() const;
1418   inline isl::ast_expr get_expr() const;
1419 };
1420 
1421 // declarations for isl::basic_map
1422 inline basic_map manage(__isl_take isl_basic_map *ptr);
1423 inline basic_map manage_copy(__isl_keep isl_basic_map *ptr);
1424 
1425 class basic_map {
1426   friend inline basic_map manage(__isl_take isl_basic_map *ptr);
1427   friend inline basic_map manage_copy(__isl_keep isl_basic_map *ptr);
1428 
1429 protected:
1430   isl_basic_map *ptr = nullptr;
1431 
1432   inline explicit basic_map(__isl_take isl_basic_map *ptr);
1433 
1434 public:
1435   inline /* implicit */ basic_map();
1436   inline /* implicit */ basic_map(const basic_map &obj);
1437   inline explicit basic_map(isl::ctx ctx, const std::string &str);
1438   inline basic_map &operator=(basic_map obj);
1439   inline ~basic_map();
1440   inline __isl_give isl_basic_map *copy() const &;
1441   inline __isl_give isl_basic_map *copy() && = delete;
1442   inline __isl_keep isl_basic_map *get() const;
1443   inline __isl_give isl_basic_map *release();
1444   inline bool is_null() const;
1445   inline isl::ctx ctx() const;
1446 
1447   inline isl::map add_constraint(const isl::constraint &constraint) const;
1448   inline isl::map add_dims(isl::dim type, unsigned int n) const;
1449   inline isl::basic_map affine_hull() const;
1450   inline isl::map align_params(const isl::space &model) const;
1451   inline isl::basic_map apply_domain(isl::basic_map bmap2) const;
1452   inline isl::map apply_domain(const isl::map &map2) const;
1453   inline isl::union_map apply_domain(const isl::union_map &umap2) const;
1454   inline isl::basic_map apply_range(isl::basic_map bmap2) const;
1455   inline isl::map apply_range(const isl::map &map2) const;
1456   inline isl::union_map apply_range(const isl::union_map &umap2) const;
1457   inline isl::map as_map() const;
1458   inline isl::multi_union_pw_aff as_multi_union_pw_aff() const;
1459   inline isl::pw_multi_aff as_pw_multi_aff() const;
1460   inline isl::union_pw_multi_aff as_union_pw_multi_aff() const;
1461   inline isl::basic_map_list basic_map_list() const;
1462   inline isl::set bind_domain(const isl::multi_id &tuple) const;
1463   inline isl::set bind_range(const isl::multi_id &tuple) const;
1464   inline boolean can_curry() const;
1465   inline isl::map coalesce() const;
1466   inline isl::map complement() const;
1467   inline isl::union_map compute_divs() const;
1468   inline isl::map curry() const;
1469   inline isl::basic_set deltas() const;
1470   inline isl::basic_map detect_equalities() const;
1471   inline class size dim(isl::dim type) const;
1472   inline isl::pw_aff dim_max(int pos) const;
1473   inline isl::pw_aff dim_min(int pos) const;
1474   inline isl::basic_set domain() const;
1475   inline isl::map domain_factor_domain() const;
1476   inline isl::map domain_factor_range() const;
1477   inline isl::map domain_map() const;
1478   inline isl::union_pw_multi_aff domain_map_union_pw_multi_aff() const;
1479   inline isl::map domain_product(const isl::map &map2) const;
1480   inline isl::union_map domain_product(const isl::union_map &umap2) const;
1481   inline class size domain_tuple_dim() const;
1482   inline isl::id domain_tuple_id() const;
1483   inline isl::map eq_at(const isl::multi_pw_aff &mpa) const;
1484   inline isl::union_map eq_at(const isl::multi_union_pw_aff &mupa) const;
1485   static inline isl::basic_map equal(isl::space space, unsigned int n_equal);
1486   inline isl::basic_map equate(isl::dim type1, int pos1, isl::dim type2, int pos2) const;
1487   inline boolean every_map(const std::function<boolean(isl::map)> &test) const;
1488   inline isl::map extract_map(const isl::space &space) const;
1489   inline isl::map factor_domain() const;
1490   inline isl::map factor_range() const;
1491   inline isl::basic_map fix_si(isl::dim type, unsigned int pos, int value) const;
1492   inline isl::basic_map fix_val(isl::dim type, unsigned int pos, isl::val v) const;
1493   inline isl::basic_map fix_val(isl::dim type, unsigned int pos, long v) const;
1494   inline isl::union_map fixed_power(const isl::val &exp) const;
1495   inline isl::union_map fixed_power(long exp) const;
1496   inline isl::map flat_range_product(const isl::map &map2) const;
1497   inline isl::union_map flat_range_product(const isl::union_map &umap2) const;
1498   inline isl::basic_map flatten() const;
1499   inline isl::basic_map flatten_domain() const;
1500   inline isl::basic_map flatten_range() const;
1501   inline isl::map floordiv_val(const isl::val &d) const;
1502   inline isl::map floordiv_val(long d) const;
1503   inline stat foreach_basic_map(const std::function<stat(isl::basic_map)> &fn) const;
1504   inline stat foreach_map(const std::function<stat(isl::map)> &fn) const;
1505   static inline isl::basic_map from_aff(isl::aff aff);
1506   static inline isl::basic_map from_domain_and_range(isl::basic_set domain, isl::basic_set range);
1507   inline isl::basic_map gist(isl::basic_map context) const;
1508   inline isl::map gist(const isl::map &context) const;
1509   inline isl::union_map gist(const isl::union_map &context) const;
1510   inline isl::map gist_domain(const isl::set &context) const;
1511   inline isl::union_map gist_domain(const isl::union_set &uset) const;
1512   inline isl::map gist_params(const isl::set &context) const;
1513   inline isl::union_map gist_range(const isl::union_set &uset) const;
1514   inline boolean has_domain_tuple_id() const;
1515   inline boolean has_equal_space(const isl::map &map2) const;
1516   inline boolean has_range_tuple_id() const;
1517   inline boolean has_tuple_id(isl::dim type) const;
1518   inline boolean has_tuple_name(isl::dim type) const;
1519   inline isl::basic_map intersect(isl::basic_map bmap2) const;
1520   inline isl::map intersect(const isl::map &map2) const;
1521   inline isl::union_map intersect(const isl::union_map &umap2) const;
1522   inline isl::basic_map intersect_domain(isl::basic_set bset) const;
1523   inline isl::map intersect_domain(const isl::set &set) const;
1524   inline isl::union_map intersect_domain(const isl::space &space) const;
1525   inline isl::union_map intersect_domain(const isl::union_set &uset) const;
1526   inline isl::basic_map intersect_domain(const isl::point &bset) const;
1527   inline isl::map intersect_domain_factor_domain(const isl::map &factor) const;
1528   inline isl::union_map intersect_domain_factor_domain(const isl::union_map &factor) const;
1529   inline isl::map intersect_domain_factor_range(const isl::map &factor) const;
1530   inline isl::union_map intersect_domain_factor_range(const isl::union_map &factor) const;
1531   inline isl::map intersect_params(const isl::set &params) const;
1532   inline isl::basic_map intersect_range(isl::basic_set bset) const;
1533   inline isl::map intersect_range(const isl::set &set) const;
1534   inline isl::union_map intersect_range(const isl::space &space) const;
1535   inline isl::union_map intersect_range(const isl::union_set &uset) const;
1536   inline isl::basic_map intersect_range(const isl::point &bset) const;
1537   inline isl::map intersect_range_factor_domain(const isl::map &factor) const;
1538   inline isl::union_map intersect_range_factor_domain(const isl::union_map &factor) const;
1539   inline isl::map intersect_range_factor_range(const isl::map &factor) const;
1540   inline isl::union_map intersect_range_factor_range(const isl::union_map &factor) const;
1541   inline boolean involves_dims(isl::dim type, unsigned int first, unsigned int n) const;
1542   inline boolean is_bijective() const;
1543   inline boolean is_disjoint(const isl::map &map2) const;
1544   inline boolean is_disjoint(const isl::union_map &umap2) const;
1545   inline boolean is_empty() const;
1546   inline boolean is_equal(const isl::basic_map &bmap2) const;
1547   inline boolean is_equal(const isl::map &map2) const;
1548   inline boolean is_equal(const isl::union_map &umap2) const;
1549   inline boolean is_injective() const;
1550   inline boolean is_single_valued() const;
1551   inline boolean is_strict_subset(const isl::map &map2) const;
1552   inline boolean is_strict_subset(const isl::union_map &umap2) const;
1553   inline boolean is_subset(const isl::basic_map &bmap2) const;
1554   inline boolean is_subset(const isl::map &map2) const;
1555   inline boolean is_subset(const isl::union_map &umap2) const;
1556   inline boolean isa_map() const;
1557   inline isl::map lex_ge_at(const isl::multi_pw_aff &mpa) const;
1558   inline isl::map lex_gt_at(const isl::multi_pw_aff &mpa) const;
1559   inline isl::map lex_le_at(const isl::multi_pw_aff &mpa) const;
1560   inline isl::map lex_lt_at(const isl::multi_pw_aff &mpa) const;
1561   inline isl::map lexmax() const;
1562   inline isl::pw_multi_aff lexmax_pw_multi_aff() const;
1563   inline isl::map lexmin() const;
1564   inline isl::pw_multi_aff lexmin_pw_multi_aff() const;
1565   inline isl::map lower_bound(const isl::multi_pw_aff &lower) const;
1566   inline isl::map lower_bound_si(isl::dim type, unsigned int pos, int value) const;
1567   inline isl::map_list map_list() const;
1568   inline isl::multi_pw_aff max_multi_pw_aff() const;
1569   inline isl::multi_pw_aff min_multi_pw_aff() const;
1570   inline isl::map move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const;
1571   inline class size n_basic_map() const;
1572   inline isl::map order_lt(isl::dim type1, int pos1, isl::dim type2, int pos2) const;
1573   inline isl::set params() const;
1574   inline isl::val plain_get_val_if_fixed(isl::dim type, unsigned int pos) const;
1575   inline isl::basic_map polyhedral_hull() const;
1576   inline isl::map preimage_domain(const isl::multi_aff &ma) const;
1577   inline isl::map preimage_domain(const isl::multi_pw_aff &mpa) const;
1578   inline isl::map preimage_domain(const isl::pw_multi_aff &pma) const;
1579   inline isl::union_map preimage_domain(const isl::union_pw_multi_aff &upma) const;
1580   inline isl::map preimage_range(const isl::multi_aff &ma) const;
1581   inline isl::map preimage_range(const isl::pw_multi_aff &pma) const;
1582   inline isl::union_map preimage_range(const isl::union_pw_multi_aff &upma) const;
1583   inline isl::map product(const isl::map &map2) const;
1584   inline isl::union_map product(const isl::union_map &umap2) const;
1585   inline isl::map project_out(isl::dim type, unsigned int first, unsigned int n) const;
1586   inline isl::map project_out_all_params() const;
1587   inline isl::set range() const;
1588   inline isl::map range_factor_domain() const;
1589   inline isl::map range_factor_range() const;
1590   inline isl::fixed_box range_lattice_tile() const;
1591   inline isl::map range_map() const;
1592   inline isl::map range_product(const isl::map &map2) const;
1593   inline isl::union_map range_product(const isl::union_map &umap2) const;
1594   inline isl::map range_reverse() const;
1595   inline isl::fixed_box range_simple_fixed_box_hull() const;
1596   inline class size range_tuple_dim() const;
1597   inline isl::id range_tuple_id() const;
1598   inline isl::basic_map reverse() const;
1599   inline isl::basic_map sample() const;
1600   inline isl::map set_domain_tuple(const isl::id &id) const;
1601   inline isl::map set_domain_tuple(const std::string &id) const;
1602   inline isl::map set_range_tuple(const isl::id &id) const;
1603   inline isl::map set_range_tuple(const std::string &id) const;
1604   inline isl::map set_tuple_id(isl::dim type, const isl::id &id) const;
1605   inline isl::map set_tuple_id(isl::dim type, const std::string &id) const;
1606   inline isl::space space() const;
1607   inline isl::map subtract(const isl::map &map2) const;
1608   inline isl::union_map subtract(const isl::union_map &umap2) const;
1609   inline isl::union_map subtract_domain(const isl::union_set &dom) const;
1610   inline isl::union_map subtract_range(const isl::union_set &dom) const;
1611   inline isl::map sum(const isl::map &map2) const;
1612   inline isl::basic_map_list to_list() const;
1613   inline isl::union_map to_union_map() const;
1614   inline isl::id tuple_id(isl::dim type) const;
1615   inline isl::map uncurry() const;
1616   inline isl::map unite(isl::basic_map bmap2) const;
1617   inline isl::map unite(const isl::map &map2) const;
1618   inline isl::union_map unite(const isl::union_map &umap2) const;
1619   static inline isl::basic_map universe(isl::space space);
1620   inline isl::basic_map unshifted_simple_hull() const;
1621   inline isl::map upper_bound(const isl::multi_pw_aff &upper) const;
1622   inline isl::map upper_bound_si(isl::dim type, unsigned int pos, int value) const;
1623   inline isl::set wrap() const;
1624   inline isl::map zip() const;
1625 };
1626 
1627 // declarations for isl::basic_map_list
1628 inline basic_map_list manage(__isl_take isl_basic_map_list *ptr);
1629 inline basic_map_list manage_copy(__isl_keep isl_basic_map_list *ptr);
1630 
1631 class basic_map_list {
1632   friend inline basic_map_list manage(__isl_take isl_basic_map_list *ptr);
1633   friend inline basic_map_list manage_copy(__isl_keep isl_basic_map_list *ptr);
1634 
1635 protected:
1636   isl_basic_map_list *ptr = nullptr;
1637 
1638   inline explicit basic_map_list(__isl_take isl_basic_map_list *ptr);
1639 
1640 public:
1641   inline /* implicit */ basic_map_list();
1642   inline /* implicit */ basic_map_list(const basic_map_list &obj);
1643   inline explicit basic_map_list(isl::ctx ctx, int n);
1644   inline explicit basic_map_list(isl::basic_map el);
1645   inline basic_map_list &operator=(basic_map_list obj);
1646   inline ~basic_map_list();
1647   inline __isl_give isl_basic_map_list *copy() const &;
1648   inline __isl_give isl_basic_map_list *copy() && = delete;
1649   inline __isl_keep isl_basic_map_list *get() const;
1650   inline __isl_give isl_basic_map_list *release();
1651   inline bool is_null() const;
1652   inline isl::ctx ctx() const;
1653 
1654   inline isl::basic_map_list add(isl::basic_map el) const;
1655   inline isl::basic_map at(int index) const;
1656   inline isl::basic_map get_at(int index) const;
1657   inline isl::basic_map_list clear() const;
1658   inline isl::basic_map_list concat(isl::basic_map_list list2) const;
1659   inline isl::basic_map_list drop(unsigned int first, unsigned int n) const;
1660   inline stat foreach(const std::function<stat(isl::basic_map)> &fn) const;
1661   inline isl::basic_map_list insert(unsigned int pos, isl::basic_map el) const;
1662   inline class size size() const;
1663 };
1664 
1665 // declarations for isl::basic_set
1666 inline basic_set manage(__isl_take isl_basic_set *ptr);
1667 inline basic_set manage_copy(__isl_keep isl_basic_set *ptr);
1668 
1669 class basic_set {
1670   friend inline basic_set manage(__isl_take isl_basic_set *ptr);
1671   friend inline basic_set manage_copy(__isl_keep isl_basic_set *ptr);
1672 
1673 protected:
1674   isl_basic_set *ptr = nullptr;
1675 
1676   inline explicit basic_set(__isl_take isl_basic_set *ptr);
1677 
1678 public:
1679   inline /* implicit */ basic_set();
1680   inline /* implicit */ basic_set(const basic_set &obj);
1681   inline /* implicit */ basic_set(isl::point pnt);
1682   inline explicit basic_set(isl::ctx ctx, const std::string &str);
1683   inline basic_set &operator=(basic_set obj);
1684   inline ~basic_set();
1685   inline __isl_give isl_basic_set *copy() const &;
1686   inline __isl_give isl_basic_set *copy() && = delete;
1687   inline __isl_keep isl_basic_set *get() const;
1688   inline __isl_give isl_basic_set *release();
1689   inline bool is_null() const;
1690   inline isl::ctx ctx() const;
1691 
1692   inline isl::set add_constraint(const isl::constraint &constraint) const;
1693   inline isl::set add_dims(isl::dim type, unsigned int n) const;
1694   inline isl::basic_set affine_hull() const;
1695   inline isl::set align_params(const isl::space &model) const;
1696   inline isl::basic_set apply(isl::basic_map bmap) const;
1697   inline isl::set apply(const isl::map &map) const;
1698   inline isl::union_set apply(const isl::union_map &umap) const;
1699   inline isl::pw_multi_aff as_pw_multi_aff() const;
1700   inline isl::set as_set() const;
1701   inline isl::basic_set_list basic_set_list() const;
1702   inline isl::set bind(const isl::multi_id &tuple) const;
1703   inline isl::set coalesce() const;
1704   inline isl::set complement() const;
1705   inline isl::union_set compute_divs() const;
1706   inline boolean contains(const isl::space &space) const;
1707   inline isl::basic_set convex_hull() const;
1708   inline isl::basic_set detect_equalities() const;
1709   inline class size dim(isl::dim type) const;
1710   inline boolean dim_has_any_lower_bound(isl::dim type, unsigned int pos) const;
1711   inline isl::id dim_id(isl::dim type, unsigned int pos) const;
1712   inline isl::pw_aff dim_max(int pos) const;
1713   inline isl::val dim_max_val(int pos) const;
1714   inline isl::pw_aff dim_min(int pos) const;
1715   inline isl::val dim_min_val(int pos) const;
1716   inline std::string dim_name(isl::dim type, unsigned int pos) const;
1717   inline isl::aff div(int pos) const;
1718   inline isl::aff get_div(int pos) const;
1719   inline isl::set drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const;
1720   inline isl::set eliminate(isl::dim type, unsigned int first, unsigned int n) const;
1721   inline boolean every_set(const std::function<boolean(isl::set)> &test) const;
1722   inline isl::set extract_set(const isl::space &space) const;
1723   inline int find_dim_by_id(isl::dim type, const isl::id &id) const;
1724   inline int find_dim_by_id(isl::dim type, const std::string &id) const;
1725   inline isl::basic_set fix_si(isl::dim type, unsigned int pos, int value) const;
1726   inline isl::basic_set fix_val(isl::dim type, unsigned int pos, isl::val v) const;
1727   inline isl::basic_set fix_val(isl::dim type, unsigned int pos, long v) const;
1728   inline isl::basic_set flatten() const;
1729   inline stat foreach_basic_set(const std::function<stat(isl::basic_set)> &fn) const;
1730   inline stat foreach_point(const std::function<stat(isl::point)> &fn) const;
1731   inline stat foreach_set(const std::function<stat(isl::set)> &fn) const;
1732   inline isl::basic_set gist(isl::basic_set context) const;
1733   inline isl::set gist(const isl::set &context) const;
1734   inline isl::union_set gist(const isl::union_set &context) const;
1735   inline isl::basic_set gist(const isl::point &context) const;
1736   inline isl::set gist_params(const isl::set &context) const;
1737   inline boolean has_equal_space(const isl::set &set2) const;
1738   inline isl::map identity() const;
1739   inline isl::union_pw_multi_aff identity_union_pw_multi_aff() const;
1740   inline isl::pw_aff indicator_function() const;
1741   inline isl::set insert_dims(isl::dim type, unsigned int pos, unsigned int n) const;
1742   inline isl::map insert_domain(const isl::space &domain) const;
1743   inline isl::basic_set intersect(isl::basic_set bset2) const;
1744   inline isl::set intersect(const isl::set &set2) const;
1745   inline isl::union_set intersect(const isl::union_set &uset2) const;
1746   inline isl::basic_set intersect(const isl::point &bset2) const;
1747   inline isl::basic_set intersect_params(isl::basic_set bset2) const;
1748   inline isl::set intersect_params(const isl::set &params) const;
1749   inline isl::basic_set intersect_params(const isl::point &bset2) const;
1750   inline boolean involves_dims(isl::dim type, unsigned int first, unsigned int n) const;
1751   inline boolean involves_locals() const;
1752   inline boolean is_bounded() const;
1753   inline boolean is_disjoint(const isl::set &set2) const;
1754   inline boolean is_disjoint(const isl::union_set &uset2) const;
1755   inline boolean is_empty() const;
1756   inline boolean is_equal(const isl::basic_set &bset2) const;
1757   inline boolean is_equal(const isl::set &set2) const;
1758   inline boolean is_equal(const isl::union_set &uset2) const;
1759   inline boolean is_equal(const isl::point &bset2) const;
1760   inline boolean is_params() const;
1761   inline boolean is_singleton() const;
1762   inline boolean is_strict_subset(const isl::set &set2) const;
1763   inline boolean is_strict_subset(const isl::union_set &uset2) const;
1764   inline boolean is_subset(const isl::basic_set &bset2) const;
1765   inline boolean is_subset(const isl::set &set2) const;
1766   inline boolean is_subset(const isl::union_set &uset2) const;
1767   inline boolean is_subset(const isl::point &bset2) const;
1768   inline boolean is_wrapping() const;
1769   inline boolean isa_set() const;
1770   inline isl::set lexmax() const;
1771   inline isl::pw_multi_aff lexmax_pw_multi_aff() const;
1772   inline isl::set lexmin() const;
1773   inline isl::pw_multi_aff lexmin_pw_multi_aff() const;
1774   inline isl::set lower_bound(const isl::multi_pw_aff &lower) const;
1775   inline isl::set lower_bound(const isl::multi_val &lower) const;
1776   inline isl::set lower_bound_si(isl::dim type, unsigned int pos, int value) const;
1777   inline isl::set lower_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const;
1778   inline isl::set lower_bound_val(isl::dim type, unsigned int pos, long value) const;
1779   inline isl::multi_pw_aff max_multi_pw_aff() const;
1780   inline isl::val max_val(const isl::aff &obj) const;
1781   inline isl::multi_pw_aff min_multi_pw_aff() const;
1782   inline isl::val min_val(const isl::aff &obj) const;
1783   inline class size n_basic_set() const;
1784   inline isl::basic_set params() const;
1785   inline isl::val plain_get_val_if_fixed(isl::dim type, unsigned int pos) const;
1786   inline isl::multi_val plain_multi_val_if_fixed() const;
1787   inline isl::basic_set polyhedral_hull() const;
1788   inline isl::set preimage(const isl::multi_aff &ma) const;
1789   inline isl::set preimage(const isl::multi_pw_aff &mpa) const;
1790   inline isl::set preimage(const isl::pw_multi_aff &pma) const;
1791   inline isl::union_set preimage(const isl::union_pw_multi_aff &upma) const;
1792   inline isl::set product(const isl::set &set2) const;
1793   inline isl::basic_set project_out(isl::dim type, unsigned int first, unsigned int n) const;
1794   inline isl::set project_out_all_params() const;
1795   inline isl::set project_out_param(const isl::id &id) const;
1796   inline isl::set project_out_param(const std::string &id) const;
1797   inline isl::set project_out_param(const isl::id_list &list) const;
1798   inline isl::pw_multi_aff pw_multi_aff_on_domain(const isl::multi_val &mv) const;
1799   inline isl::set remove_dims(isl::dim type, unsigned int first, unsigned int n) const;
1800   inline isl::set remove_divs() const;
1801   inline isl::set remove_redundancies() const;
1802   inline isl::set reset_tuple_id() const;
1803   inline isl::basic_set sample() const;
1804   inline isl::point sample_point() const;
1805   inline isl::set set_dim_id(isl::dim type, unsigned int pos, const isl::id &id) const;
1806   inline isl::set set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const;
1807   inline isl::set_list set_list() const;
1808   inline isl::set set_tuple_id(const isl::id &id) const;
1809   inline isl::set set_tuple_id(const std::string &id) const;
1810   inline isl::fixed_box simple_fixed_box_hull() const;
1811   inline isl::basic_set simple_hull() const;
1812   inline isl::space space() const;
1813   inline isl::space get_space() const;
1814   inline isl::val stride(int pos) const;
1815   inline isl::set subtract(const isl::set &set2) const;
1816   inline isl::union_set subtract(const isl::union_set &uset2) const;
1817   inline isl::basic_set_list to_list() const;
1818   inline isl::set to_set() const;
1819   inline isl::union_set to_union_set() const;
1820   inline isl::map translation() const;
1821   inline class size tuple_dim() const;
1822   inline isl::id tuple_id() const;
1823   inline std::string tuple_name() const;
1824   inline isl::set unbind_params(const isl::multi_id &tuple) const;
1825   inline isl::map unbind_params_insert_domain(const isl::multi_id &domain) const;
1826   inline isl::set unite(isl::basic_set bset2) const;
1827   inline isl::set unite(const isl::set &set2) const;
1828   inline isl::union_set unite(const isl::union_set &uset2) const;
1829   inline isl::set unite(const isl::point &bset2) const;
1830   static inline isl::basic_set universe(isl::space space);
1831   inline isl::basic_set unshifted_simple_hull() const;
1832   inline isl::map unwrap() const;
1833   inline isl::set upper_bound(const isl::multi_pw_aff &upper) const;
1834   inline isl::set upper_bound(const isl::multi_val &upper) const;
1835   inline isl::set upper_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const;
1836   inline isl::set upper_bound_val(isl::dim type, unsigned int pos, long value) const;
1837 };
1838 
1839 // declarations for isl::basic_set_list
1840 inline basic_set_list manage(__isl_take isl_basic_set_list *ptr);
1841 inline basic_set_list manage_copy(__isl_keep isl_basic_set_list *ptr);
1842 
1843 class basic_set_list {
1844   friend inline basic_set_list manage(__isl_take isl_basic_set_list *ptr);
1845   friend inline basic_set_list manage_copy(__isl_keep isl_basic_set_list *ptr);
1846 
1847 protected:
1848   isl_basic_set_list *ptr = nullptr;
1849 
1850   inline explicit basic_set_list(__isl_take isl_basic_set_list *ptr);
1851 
1852 public:
1853   inline /* implicit */ basic_set_list();
1854   inline /* implicit */ basic_set_list(const basic_set_list &obj);
1855   inline explicit basic_set_list(isl::ctx ctx, int n);
1856   inline explicit basic_set_list(isl::basic_set el);
1857   inline basic_set_list &operator=(basic_set_list obj);
1858   inline ~basic_set_list();
1859   inline __isl_give isl_basic_set_list *copy() const &;
1860   inline __isl_give isl_basic_set_list *copy() && = delete;
1861   inline __isl_keep isl_basic_set_list *get() const;
1862   inline __isl_give isl_basic_set_list *release();
1863   inline bool is_null() const;
1864   inline isl::ctx ctx() const;
1865 
1866   inline isl::basic_set_list add(isl::basic_set el) const;
1867   inline isl::basic_set at(int index) const;
1868   inline isl::basic_set get_at(int index) const;
1869   inline isl::basic_set_list clear() const;
1870   inline isl::basic_set_list concat(isl::basic_set_list list2) const;
1871   inline isl::basic_set_list drop(unsigned int first, unsigned int n) const;
1872   inline stat foreach(const std::function<stat(isl::basic_set)> &fn) const;
1873   inline isl::basic_set_list insert(unsigned int pos, isl::basic_set el) const;
1874   inline class size size() const;
1875 };
1876 
1877 // declarations for isl::constraint
1878 inline constraint manage(__isl_take isl_constraint *ptr);
1879 inline constraint manage_copy(__isl_keep isl_constraint *ptr);
1880 
1881 class constraint {
1882   friend inline constraint manage(__isl_take isl_constraint *ptr);
1883   friend inline constraint manage_copy(__isl_keep isl_constraint *ptr);
1884 
1885 protected:
1886   isl_constraint *ptr = nullptr;
1887 
1888   inline explicit constraint(__isl_take isl_constraint *ptr);
1889 
1890 public:
1891   inline /* implicit */ constraint();
1892   inline /* implicit */ constraint(const constraint &obj);
1893   inline constraint &operator=(constraint obj);
1894   inline ~constraint();
1895   inline __isl_give isl_constraint *copy() const &;
1896   inline __isl_give isl_constraint *copy() && = delete;
1897   inline __isl_keep isl_constraint *get() const;
1898   inline __isl_give isl_constraint *release();
1899   inline bool is_null() const;
1900   inline isl::ctx ctx() const;
1901 
1902   static inline isl::constraint alloc_equality(isl::local_space ls);
1903   static inline isl::constraint alloc_inequality(isl::local_space ls);
1904   inline isl::constraint set_coefficient_si(isl::dim type, int pos, int v) const;
1905   inline isl::constraint set_constant_si(int v) const;
1906   inline isl::constraint set_constant_val(isl::val v) const;
1907   inline isl::constraint set_constant_val(long v) const;
1908 };
1909 
1910 // declarations for isl::fixed_box
1911 inline fixed_box manage(__isl_take isl_fixed_box *ptr);
1912 inline fixed_box manage_copy(__isl_keep isl_fixed_box *ptr);
1913 
1914 class fixed_box {
1915   friend inline fixed_box manage(__isl_take isl_fixed_box *ptr);
1916   friend inline fixed_box manage_copy(__isl_keep isl_fixed_box *ptr);
1917 
1918 protected:
1919   isl_fixed_box *ptr = nullptr;
1920 
1921   inline explicit fixed_box(__isl_take isl_fixed_box *ptr);
1922 
1923 public:
1924   inline /* implicit */ fixed_box();
1925   inline /* implicit */ fixed_box(const fixed_box &obj);
1926   inline fixed_box &operator=(fixed_box obj);
1927   inline ~fixed_box();
1928   inline __isl_give isl_fixed_box *copy() const &;
1929   inline __isl_give isl_fixed_box *copy() && = delete;
1930   inline __isl_keep isl_fixed_box *get() const;
1931   inline __isl_give isl_fixed_box *release();
1932   inline bool is_null() const;
1933   inline isl::ctx ctx() const;
1934 
1935   inline boolean is_valid() const;
1936   inline isl::multi_aff offset() const;
1937   inline isl::multi_aff get_offset() const;
1938   inline isl::multi_val size() const;
1939   inline isl::multi_val get_size() const;
1940   inline isl::space space() const;
1941   inline isl::space get_space() const;
1942 };
1943 
1944 // declarations for isl::id
1945 inline id manage(__isl_take isl_id *ptr);
1946 inline id manage_copy(__isl_keep isl_id *ptr);
1947 
1948 class id {
1949   friend inline id manage(__isl_take isl_id *ptr);
1950   friend inline id manage_copy(__isl_keep isl_id *ptr);
1951 
1952 protected:
1953   isl_id *ptr = nullptr;
1954 
1955   inline explicit id(__isl_take isl_id *ptr);
1956 
1957 public:
1958   inline /* implicit */ id();
1959   inline /* implicit */ id(const id &obj);
1960   inline explicit id(isl::ctx ctx, const std::string &str);
1961   inline id &operator=(id obj);
1962   inline ~id();
1963   inline __isl_give isl_id *copy() const &;
1964   inline __isl_give isl_id *copy() && = delete;
1965   inline __isl_keep isl_id *get() const;
1966   inline __isl_give isl_id *release();
1967   inline bool is_null() const;
1968   inline isl::ctx ctx() const;
1969 
1970   static inline isl::id alloc(isl::ctx ctx, const std::string &name, void * user);
1971   inline std::string name() const;
1972   inline std::string get_name() const;
1973   inline isl::id_list to_list() const;
1974   inline void * user() const;
1975   inline void * get_user() const;
1976 };
1977 
1978 // declarations for isl::id_list
1979 inline id_list manage(__isl_take isl_id_list *ptr);
1980 inline id_list manage_copy(__isl_keep isl_id_list *ptr);
1981 
1982 class id_list {
1983   friend inline id_list manage(__isl_take isl_id_list *ptr);
1984   friend inline id_list manage_copy(__isl_keep isl_id_list *ptr);
1985 
1986 protected:
1987   isl_id_list *ptr = nullptr;
1988 
1989   inline explicit id_list(__isl_take isl_id_list *ptr);
1990 
1991 public:
1992   inline /* implicit */ id_list();
1993   inline /* implicit */ id_list(const id_list &obj);
1994   inline explicit id_list(isl::ctx ctx, int n);
1995   inline explicit id_list(isl::id el);
1996   inline explicit id_list(isl::ctx ctx, const std::string &str);
1997   inline id_list &operator=(id_list obj);
1998   inline ~id_list();
1999   inline __isl_give isl_id_list *copy() const &;
2000   inline __isl_give isl_id_list *copy() && = delete;
2001   inline __isl_keep isl_id_list *get() const;
2002   inline __isl_give isl_id_list *release();
2003   inline bool is_null() const;
2004   inline isl::ctx ctx() const;
2005 
2006   inline isl::id_list add(isl::id el) const;
2007   inline isl::id_list add(const std::string &el) const;
2008   inline isl::id at(int index) const;
2009   inline isl::id get_at(int index) const;
2010   inline isl::id_list clear() const;
2011   inline isl::id_list concat(isl::id_list list2) const;
2012   inline isl::id_list drop(unsigned int first, unsigned int n) const;
2013   inline stat foreach(const std::function<stat(isl::id)> &fn) const;
2014   inline isl::id_list insert(unsigned int pos, isl::id el) const;
2015   inline isl::id_list insert(unsigned int pos, const std::string &el) const;
2016   inline class size size() const;
2017 };
2018 
2019 // declarations for isl::id_to_ast_expr
2020 inline id_to_ast_expr manage(__isl_take isl_id_to_ast_expr *ptr);
2021 inline id_to_ast_expr manage_copy(__isl_keep isl_id_to_ast_expr *ptr);
2022 
2023 class id_to_ast_expr {
2024   friend inline id_to_ast_expr manage(__isl_take isl_id_to_ast_expr *ptr);
2025   friend inline id_to_ast_expr manage_copy(__isl_keep isl_id_to_ast_expr *ptr);
2026 
2027 protected:
2028   isl_id_to_ast_expr *ptr = nullptr;
2029 
2030   inline explicit id_to_ast_expr(__isl_take isl_id_to_ast_expr *ptr);
2031 
2032 public:
2033   inline /* implicit */ id_to_ast_expr();
2034   inline /* implicit */ id_to_ast_expr(const id_to_ast_expr &obj);
2035   inline id_to_ast_expr &operator=(id_to_ast_expr obj);
2036   inline ~id_to_ast_expr();
2037   inline __isl_give isl_id_to_ast_expr *copy() const &;
2038   inline __isl_give isl_id_to_ast_expr *copy() && = delete;
2039   inline __isl_keep isl_id_to_ast_expr *get() const;
2040   inline __isl_give isl_id_to_ast_expr *release();
2041   inline bool is_null() const;
2042   inline isl::ctx ctx() const;
2043 
2044   static inline isl::id_to_ast_expr alloc(isl::ctx ctx, int min_size);
2045   inline isl::id_to_ast_expr set(isl::id key, isl::ast_expr val) const;
2046   inline isl::id_to_ast_expr set(const std::string &key, const isl::ast_expr &val) const;
2047 };
2048 
2049 // declarations for isl::local_space
2050 inline local_space manage(__isl_take isl_local_space *ptr);
2051 inline local_space manage_copy(__isl_keep isl_local_space *ptr);
2052 
2053 class local_space {
2054   friend inline local_space manage(__isl_take isl_local_space *ptr);
2055   friend inline local_space manage_copy(__isl_keep isl_local_space *ptr);
2056 
2057 protected:
2058   isl_local_space *ptr = nullptr;
2059 
2060   inline explicit local_space(__isl_take isl_local_space *ptr);
2061 
2062 public:
2063   inline /* implicit */ local_space();
2064   inline /* implicit */ local_space(const local_space &obj);
2065   inline explicit local_space(isl::space space);
2066   inline local_space &operator=(local_space obj);
2067   inline ~local_space();
2068   inline __isl_give isl_local_space *copy() const &;
2069   inline __isl_give isl_local_space *copy() && = delete;
2070   inline __isl_keep isl_local_space *get() const;
2071   inline __isl_give isl_local_space *release();
2072   inline bool is_null() const;
2073   inline isl::ctx ctx() const;
2074 
2075 };
2076 
2077 // declarations for isl::map
2078 inline map manage(__isl_take isl_map *ptr);
2079 inline map manage_copy(__isl_keep isl_map *ptr);
2080 
2081 class map {
2082   friend inline map manage(__isl_take isl_map *ptr);
2083   friend inline map manage_copy(__isl_keep isl_map *ptr);
2084 
2085 protected:
2086   isl_map *ptr = nullptr;
2087 
2088   inline explicit map(__isl_take isl_map *ptr);
2089 
2090 public:
2091   inline /* implicit */ map();
2092   inline /* implicit */ map(const map &obj);
2093   inline /* implicit */ map(isl::basic_map bmap);
2094   inline explicit map(isl::ctx ctx, const std::string &str);
2095   inline map &operator=(map obj);
2096   inline ~map();
2097   inline __isl_give isl_map *copy() const &;
2098   inline __isl_give isl_map *copy() && = delete;
2099   inline __isl_keep isl_map *get() const;
2100   inline __isl_give isl_map *release();
2101   inline bool is_null() const;
2102   inline isl::ctx ctx() const;
2103 
2104   inline isl::map add_constraint(isl::constraint constraint) const;
2105   inline isl::map add_dims(isl::dim type, unsigned int n) const;
2106   inline isl::basic_map affine_hull() const;
2107   inline isl::map align_params(isl::space model) const;
2108   inline isl::map apply_domain(isl::map map2) const;
2109   inline isl::union_map apply_domain(const isl::union_map &umap2) const;
2110   inline isl::map apply_domain(const isl::basic_map &map2) const;
2111   inline isl::map apply_range(isl::map map2) const;
2112   inline isl::union_map apply_range(const isl::union_map &umap2) const;
2113   inline isl::map apply_range(const isl::basic_map &map2) const;
2114   inline isl::map as_map() const;
2115   inline isl::multi_union_pw_aff as_multi_union_pw_aff() const;
2116   inline isl::pw_multi_aff as_pw_multi_aff() const;
2117   inline isl::union_pw_multi_aff as_union_pw_multi_aff() const;
2118   inline isl::basic_map_list basic_map_list() const;
2119   inline isl::basic_map_list get_basic_map_list() const;
2120   inline isl::set bind_domain(isl::multi_id tuple) const;
2121   inline isl::set bind_range(isl::multi_id tuple) const;
2122   inline boolean can_curry() const;
2123   inline isl::map coalesce() const;
2124   inline isl::map complement() const;
2125   inline isl::union_map compute_divs() const;
2126   inline isl::map curry() const;
2127   inline isl::set deltas() const;
2128   inline isl::map detect_equalities() const;
2129   inline class size dim(isl::dim type) const;
2130   inline isl::pw_aff dim_max(int pos) const;
2131   inline isl::pw_aff dim_min(int pos) const;
2132   inline isl::set domain() const;
2133   inline isl::map domain_factor_domain() const;
2134   inline isl::map domain_factor_range() const;
2135   inline isl::map domain_map() const;
2136   inline isl::union_pw_multi_aff domain_map_union_pw_multi_aff() const;
2137   inline isl::map domain_product(isl::map map2) const;
2138   inline isl::union_map domain_product(const isl::union_map &umap2) const;
2139   inline isl::map domain_product(const isl::basic_map &map2) const;
2140   inline class size domain_tuple_dim() const;
2141   inline isl::id domain_tuple_id() const;
2142   inline isl::id get_domain_tuple_id() const;
2143   static inline isl::map empty(isl::space space);
2144   inline isl::map eq_at(isl::multi_pw_aff mpa) const;
2145   inline isl::union_map eq_at(const isl::multi_union_pw_aff &mupa) const;
2146   inline isl::map eq_at(const isl::aff &mpa) const;
2147   inline isl::map eq_at(const isl::multi_aff &mpa) const;
2148   inline isl::map eq_at(const isl::pw_aff &mpa) const;
2149   inline isl::map eq_at(const isl::pw_multi_aff &mpa) const;
2150   inline isl::map equate(isl::dim type1, int pos1, isl::dim type2, int pos2) const;
2151   inline boolean every_map(const std::function<boolean(isl::map)> &test) const;
2152   inline isl::map extract_map(const isl::space &space) const;
2153   inline isl::map factor_domain() const;
2154   inline isl::map factor_range() const;
2155   inline isl::map fix_si(isl::dim type, unsigned int pos, int value) const;
2156   inline isl::union_map fixed_power(const isl::val &exp) const;
2157   inline isl::union_map fixed_power(long exp) const;
2158   inline isl::map flat_range_product(isl::map map2) const;
2159   inline isl::union_map flat_range_product(const isl::union_map &umap2) const;
2160   inline isl::map flat_range_product(const isl::basic_map &map2) const;
2161   inline isl::map flatten() const;
2162   inline isl::map flatten_domain() const;
2163   inline isl::map flatten_range() const;
2164   inline isl::map floordiv_val(isl::val d) const;
2165   inline isl::map floordiv_val(long d) const;
2166   inline stat foreach_basic_map(const std::function<stat(isl::basic_map)> &fn) const;
2167   inline stat foreach_map(const std::function<stat(isl::map)> &fn) const;
2168   static inline isl::map from_aff(isl::aff aff);
2169   static inline isl::map from_domain(isl::set set);
2170   static inline isl::map from_domain_and_range(isl::set domain, isl::set range);
2171   static inline isl::map from_multi_aff(isl::multi_aff maff);
2172   static inline isl::map from_pw_aff(isl::pw_aff pwaff);
2173   static inline isl::map from_range(isl::set set);
2174   static inline isl::map from_union_map(isl::union_map umap);
2175   inline isl::map gist(isl::map context) const;
2176   inline isl::union_map gist(const isl::union_map &context) const;
2177   inline isl::map gist(const isl::basic_map &context) const;
2178   inline isl::map gist_domain(isl::set context) const;
2179   inline isl::union_map gist_domain(const isl::union_set &uset) const;
2180   inline isl::map gist_domain(const isl::basic_set &context) const;
2181   inline isl::map gist_domain(const isl::point &context) const;
2182   inline isl::map gist_params(isl::set context) const;
2183   inline isl::union_map gist_range(const isl::union_set &uset) const;
2184   inline boolean has_domain_tuple_id() const;
2185   inline boolean has_equal_space(const isl::map &map2) const;
2186   inline boolean has_range_tuple_id() const;
2187   inline boolean has_tuple_id(isl::dim type) const;
2188   inline boolean has_tuple_name(isl::dim type) const;
2189   static inline isl::map identity(isl::space space);
2190   inline isl::map intersect(isl::map map2) const;
2191   inline isl::union_map intersect(const isl::union_map &umap2) const;
2192   inline isl::map intersect(const isl::basic_map &map2) const;
2193   inline isl::map intersect_domain(isl::set set) const;
2194   inline isl::union_map intersect_domain(const isl::space &space) const;
2195   inline isl::union_map intersect_domain(const isl::union_set &uset) const;
2196   inline isl::map intersect_domain(const isl::basic_set &set) const;
2197   inline isl::map intersect_domain(const isl::point &set) const;
2198   inline isl::map intersect_domain_factor_domain(isl::map factor) const;
2199   inline isl::union_map intersect_domain_factor_domain(const isl::union_map &factor) const;
2200   inline isl::map intersect_domain_factor_domain(const isl::basic_map &factor) const;
2201   inline isl::map intersect_domain_factor_range(isl::map factor) const;
2202   inline isl::union_map intersect_domain_factor_range(const isl::union_map &factor) const;
2203   inline isl::map intersect_domain_factor_range(const isl::basic_map &factor) const;
2204   inline isl::map intersect_params(isl::set params) const;
2205   inline isl::map intersect_range(isl::set set) const;
2206   inline isl::union_map intersect_range(const isl::space &space) const;
2207   inline isl::union_map intersect_range(const isl::union_set &uset) const;
2208   inline isl::map intersect_range(const isl::basic_set &set) const;
2209   inline isl::map intersect_range(const isl::point &set) const;
2210   inline isl::map intersect_range_factor_domain(isl::map factor) const;
2211   inline isl::union_map intersect_range_factor_domain(const isl::union_map &factor) const;
2212   inline isl::map intersect_range_factor_domain(const isl::basic_map &factor) const;
2213   inline isl::map intersect_range_factor_range(isl::map factor) const;
2214   inline isl::union_map intersect_range_factor_range(const isl::union_map &factor) const;
2215   inline isl::map intersect_range_factor_range(const isl::basic_map &factor) const;
2216   inline boolean involves_dims(isl::dim type, unsigned int first, unsigned int n) const;
2217   inline boolean is_bijective() const;
2218   inline boolean is_disjoint(const isl::map &map2) const;
2219   inline boolean is_disjoint(const isl::union_map &umap2) const;
2220   inline boolean is_disjoint(const isl::basic_map &map2) const;
2221   inline boolean is_empty() const;
2222   inline boolean is_equal(const isl::map &map2) const;
2223   inline boolean is_equal(const isl::union_map &umap2) const;
2224   inline boolean is_equal(const isl::basic_map &map2) const;
2225   inline boolean is_injective() const;
2226   inline boolean is_single_valued() const;
2227   inline boolean is_strict_subset(const isl::map &map2) const;
2228   inline boolean is_strict_subset(const isl::union_map &umap2) const;
2229   inline boolean is_strict_subset(const isl::basic_map &map2) const;
2230   inline boolean is_subset(const isl::map &map2) const;
2231   inline boolean is_subset(const isl::union_map &umap2) const;
2232   inline boolean is_subset(const isl::basic_map &map2) const;
2233   inline boolean isa_map() const;
2234   static inline isl::map lex_ge(isl::space set_space);
2235   inline isl::map lex_ge_at(isl::multi_pw_aff mpa) const;
2236   static inline isl::map lex_gt(isl::space set_space);
2237   inline isl::map lex_gt_at(isl::multi_pw_aff mpa) const;
2238   static inline isl::map lex_le(isl::space set_space);
2239   inline isl::map lex_le_at(isl::multi_pw_aff mpa) const;
2240   static inline isl::map lex_lt(isl::space set_space);
2241   inline isl::map lex_lt_at(isl::multi_pw_aff mpa) const;
2242   inline isl::map lexmax() const;
2243   inline isl::pw_multi_aff lexmax_pw_multi_aff() const;
2244   inline isl::map lexmin() const;
2245   inline isl::pw_multi_aff lexmin_pw_multi_aff() const;
2246   inline isl::map lower_bound(isl::multi_pw_aff lower) const;
2247   inline isl::map lower_bound_si(isl::dim type, unsigned int pos, int value) const;
2248   inline isl::map_list map_list() const;
2249   inline isl::multi_pw_aff max_multi_pw_aff() const;
2250   inline isl::multi_pw_aff min_multi_pw_aff() const;
2251   inline isl::map move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const;
2252   inline class size n_basic_map() const;
2253   inline isl::map order_lt(isl::dim type1, int pos1, isl::dim type2, int pos2) const;
2254   inline isl::set params() const;
2255   inline isl::basic_map polyhedral_hull() const;
2256   inline isl::map preimage_domain(isl::multi_aff ma) const;
2257   inline isl::map preimage_domain(isl::multi_pw_aff mpa) const;
2258   inline isl::map preimage_domain(isl::pw_multi_aff pma) const;
2259   inline isl::union_map preimage_domain(const isl::union_pw_multi_aff &upma) const;
2260   inline isl::map preimage_range(isl::multi_aff ma) const;
2261   inline isl::map preimage_range(isl::pw_multi_aff pma) const;
2262   inline isl::union_map preimage_range(const isl::union_pw_multi_aff &upma) const;
2263   inline isl::map product(isl::map map2) const;
2264   inline isl::union_map product(const isl::union_map &umap2) const;
2265   inline isl::map product(const isl::basic_map &map2) const;
2266   inline isl::map project_out(isl::dim type, unsigned int first, unsigned int n) const;
2267   inline isl::map project_out_all_params() const;
2268   inline isl::set range() const;
2269   inline isl::map range_factor_domain() const;
2270   inline isl::map range_factor_range() const;
2271   inline isl::fixed_box range_lattice_tile() const;
2272   inline isl::fixed_box get_range_lattice_tile() const;
2273   inline isl::map range_map() const;
2274   inline isl::map range_product(isl::map map2) const;
2275   inline isl::union_map range_product(const isl::union_map &umap2) const;
2276   inline isl::map range_product(const isl::basic_map &map2) const;
2277   inline isl::map range_reverse() const;
2278   inline isl::fixed_box range_simple_fixed_box_hull() const;
2279   inline isl::fixed_box get_range_simple_fixed_box_hull() const;
2280   inline class size range_tuple_dim() const;
2281   inline isl::id range_tuple_id() const;
2282   inline isl::id get_range_tuple_id() const;
2283   inline isl::map reverse() const;
2284   inline isl::basic_map sample() const;
2285   inline isl::map set_domain_tuple(isl::id id) const;
2286   inline isl::map set_domain_tuple(const std::string &id) const;
2287   inline isl::map set_range_tuple(isl::id id) const;
2288   inline isl::map set_range_tuple(const std::string &id) const;
2289   inline isl::map set_tuple_id(isl::dim type, isl::id id) const;
2290   inline isl::map set_tuple_id(isl::dim type, const std::string &id) const;
2291   inline isl::space space() const;
2292   inline isl::space get_space() const;
2293   inline isl::map subtract(isl::map map2) const;
2294   inline isl::union_map subtract(const isl::union_map &umap2) const;
2295   inline isl::map subtract(const isl::basic_map &map2) const;
2296   inline isl::union_map subtract_domain(const isl::union_set &dom) const;
2297   inline isl::union_map subtract_range(const isl::union_set &dom) const;
2298   inline isl::map sum(isl::map map2) const;
2299   inline isl::map_list to_list() const;
2300   inline isl::union_map to_union_map() const;
2301   inline isl::id tuple_id(isl::dim type) const;
2302   inline isl::id get_tuple_id(isl::dim type) const;
2303   inline isl::map uncurry() const;
2304   inline isl::map unite(isl::map map2) const;
2305   inline isl::union_map unite(const isl::union_map &umap2) const;
2306   inline isl::map unite(const isl::basic_map &map2) const;
2307   static inline isl::map universe(isl::space space);
2308   inline isl::basic_map unshifted_simple_hull() const;
2309   inline isl::map upper_bound(isl::multi_pw_aff upper) const;
2310   inline isl::map upper_bound_si(isl::dim type, unsigned int pos, int value) const;
2311   inline isl::set wrap() const;
2312   inline isl::map zip() const;
2313 };
2314 
2315 // declarations for isl::map_list
2316 inline map_list manage(__isl_take isl_map_list *ptr);
2317 inline map_list manage_copy(__isl_keep isl_map_list *ptr);
2318 
2319 class map_list {
2320   friend inline map_list manage(__isl_take isl_map_list *ptr);
2321   friend inline map_list manage_copy(__isl_keep isl_map_list *ptr);
2322 
2323 protected:
2324   isl_map_list *ptr = nullptr;
2325 
2326   inline explicit map_list(__isl_take isl_map_list *ptr);
2327 
2328 public:
2329   inline /* implicit */ map_list();
2330   inline /* implicit */ map_list(const map_list &obj);
2331   inline explicit map_list(isl::ctx ctx, int n);
2332   inline explicit map_list(isl::map el);
2333   inline explicit map_list(isl::ctx ctx, const std::string &str);
2334   inline map_list &operator=(map_list obj);
2335   inline ~map_list();
2336   inline __isl_give isl_map_list *copy() const &;
2337   inline __isl_give isl_map_list *copy() && = delete;
2338   inline __isl_keep isl_map_list *get() const;
2339   inline __isl_give isl_map_list *release();
2340   inline bool is_null() const;
2341   inline isl::ctx ctx() const;
2342 
2343   inline isl::map_list add(isl::map el) const;
2344   inline isl::map at(int index) const;
2345   inline isl::map get_at(int index) const;
2346   inline isl::map_list clear() const;
2347   inline isl::map_list concat(isl::map_list list2) const;
2348   inline isl::map_list drop(unsigned int first, unsigned int n) const;
2349   inline stat foreach(const std::function<stat(isl::map)> &fn) const;
2350   inline isl::map_list insert(unsigned int pos, isl::map el) const;
2351   inline class size size() const;
2352 };
2353 
2354 // declarations for isl::multi_aff
2355 inline multi_aff manage(__isl_take isl_multi_aff *ptr);
2356 inline multi_aff manage_copy(__isl_keep isl_multi_aff *ptr);
2357 
2358 class multi_aff {
2359   friend inline multi_aff manage(__isl_take isl_multi_aff *ptr);
2360   friend inline multi_aff manage_copy(__isl_keep isl_multi_aff *ptr);
2361 
2362 protected:
2363   isl_multi_aff *ptr = nullptr;
2364 
2365   inline explicit multi_aff(__isl_take isl_multi_aff *ptr);
2366 
2367 public:
2368   inline /* implicit */ multi_aff();
2369   inline /* implicit */ multi_aff(const multi_aff &obj);
2370   inline /* implicit */ multi_aff(isl::aff aff);
2371   inline explicit multi_aff(isl::space space, isl::aff_list list);
2372   inline explicit multi_aff(isl::ctx ctx, const std::string &str);
2373   inline multi_aff &operator=(multi_aff obj);
2374   inline ~multi_aff();
2375   inline __isl_give isl_multi_aff *copy() const &;
2376   inline __isl_give isl_multi_aff *copy() && = delete;
2377   inline __isl_keep isl_multi_aff *get() const;
2378   inline __isl_give isl_multi_aff *release();
2379   inline bool is_null() const;
2380   inline isl::ctx ctx() const;
2381 
2382   inline isl::multi_aff add(isl::multi_aff multi2) const;
2383   inline isl::multi_pw_aff add(const isl::multi_pw_aff &multi2) const;
2384   inline isl::multi_union_pw_aff add(const isl::multi_union_pw_aff &multi2) const;
2385   inline isl::pw_multi_aff add(const isl::pw_multi_aff &pma2) const;
2386   inline isl::union_pw_multi_aff add(const isl::union_pw_multi_aff &upma2) const;
2387   inline isl::multi_aff add(const isl::aff &multi2) const;
2388   inline isl::multi_aff add_constant(isl::multi_val mv) const;
2389   inline isl::multi_aff add_constant(isl::val v) const;
2390   inline isl::multi_aff add_constant(long v) const;
2391   inline isl::union_pw_multi_aff add_pw_multi_aff(const isl::pw_multi_aff &pma) const;
2392   inline isl::union_pw_multi_aff apply(const isl::union_pw_multi_aff &upma2) const;
2393   inline isl::map as_map() const;
2394   inline isl::multi_aff as_multi_aff() const;
2395   inline isl::multi_union_pw_aff as_multi_union_pw_aff() const;
2396   inline isl::pw_multi_aff as_pw_multi_aff() const;
2397   inline isl::set as_set() const;
2398   inline isl::union_map as_union_map() const;
2399   inline isl::aff at(int pos) const;
2400   inline isl::aff get_at(int pos) const;
2401   inline isl::basic_set bind(isl::multi_id tuple) const;
2402   inline isl::multi_aff bind_domain(isl::multi_id tuple) const;
2403   inline isl::multi_aff bind_domain_wrapped_domain(isl::multi_id tuple) const;
2404   inline isl::pw_multi_aff coalesce() const;
2405   inline isl::multi_val constant_multi_val() const;
2406   inline isl::multi_val get_constant_multi_val() const;
2407   inline class size dim(isl::dim type) const;
2408   inline isl::set domain() const;
2409   static inline isl::multi_aff domain_map(isl::space space);
2410   inline isl::pw_multi_aff drop_dims(isl::dim type, unsigned int first, unsigned int n) const;
2411   inline isl::pw_multi_aff extract_pw_multi_aff(const isl::space &space) const;
2412   inline isl::multi_aff flat_range_product(isl::multi_aff multi2) const;
2413   inline isl::multi_pw_aff flat_range_product(const isl::multi_pw_aff &multi2) const;
2414   inline isl::multi_union_pw_aff flat_range_product(const isl::multi_union_pw_aff &multi2) const;
2415   inline isl::pw_multi_aff flat_range_product(const isl::pw_multi_aff &pma2) const;
2416   inline isl::union_pw_multi_aff flat_range_product(const isl::union_pw_multi_aff &upma2) const;
2417   inline isl::multi_aff flat_range_product(const isl::aff &multi2) const;
2418   inline isl::multi_aff floor() const;
2419   inline stat foreach_piece(const std::function<stat(isl::set, isl::multi_aff)> &fn) const;
2420   inline isl::multi_aff gist(isl::set context) const;
2421   inline isl::union_pw_multi_aff gist(const isl::union_set &context) const;
2422   inline isl::multi_aff gist(const isl::basic_set &context) const;
2423   inline isl::multi_aff gist(const isl::point &context) const;
2424   inline boolean has_range_tuple_id() const;
2425   static inline isl::multi_aff identity(isl::space space);
2426   inline isl::multi_aff identity() const;
2427   static inline isl::multi_aff identity_on_domain(isl::space space);
2428   inline isl::multi_aff insert_domain(isl::space domain) const;
2429   inline isl::pw_multi_aff intersect_domain(const isl::set &set) const;
2430   inline isl::union_pw_multi_aff intersect_domain(const isl::space &space) const;
2431   inline isl::union_pw_multi_aff intersect_domain(const isl::union_set &uset) const;
2432   inline isl::union_pw_multi_aff intersect_domain_wrapped_domain(const isl::union_set &uset) const;
2433   inline isl::union_pw_multi_aff intersect_domain_wrapped_range(const isl::union_set &uset) const;
2434   inline isl::pw_multi_aff intersect_params(const isl::set &set) const;
2435   inline boolean involves_locals() const;
2436   inline boolean involves_nan() const;
2437   inline boolean involves_param(const isl::id &id) const;
2438   inline boolean involves_param(const std::string &id) const;
2439   inline boolean involves_param(const isl::id_list &list) const;
2440   inline boolean isa_multi_aff() const;
2441   inline boolean isa_pw_multi_aff() const;
2442   inline isl::aff_list list() const;
2443   inline isl::aff_list get_list() const;
2444   inline isl::multi_pw_aff max(const isl::multi_pw_aff &multi2) const;
2445   inline isl::multi_val max_multi_val() const;
2446   inline isl::multi_pw_aff min(const isl::multi_pw_aff &multi2) const;
2447   inline isl::multi_val min_multi_val() const;
2448   static inline isl::multi_aff multi_val_on_domain(isl::space space, isl::multi_val mv);
2449   inline class size n_piece() const;
2450   inline isl::multi_aff neg() const;
2451   inline boolean plain_is_empty() const;
2452   inline boolean plain_is_equal(const isl::multi_aff &multi2) const;
2453   inline boolean plain_is_equal(const isl::multi_pw_aff &multi2) const;
2454   inline boolean plain_is_equal(const isl::multi_union_pw_aff &multi2) const;
2455   inline boolean plain_is_equal(const isl::aff &multi2) const;
2456   inline isl::pw_multi_aff preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const;
2457   inline isl::union_pw_multi_aff preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const;
2458   inline isl::multi_aff product(isl::multi_aff multi2) const;
2459   inline isl::multi_pw_aff product(const isl::multi_pw_aff &multi2) const;
2460   inline isl::pw_multi_aff product(const isl::pw_multi_aff &pma2) const;
2461   inline isl::multi_aff product(const isl::aff &multi2) const;
2462   inline isl::multi_aff pullback(isl::multi_aff ma2) const;
2463   inline isl::multi_pw_aff pullback(const isl::multi_pw_aff &mpa2) const;
2464   inline isl::pw_multi_aff pullback(const isl::pw_multi_aff &pma2) const;
2465   inline isl::union_pw_multi_aff pullback(const isl::union_pw_multi_aff &upma2) const;
2466   inline isl::multi_aff pullback(const isl::aff &ma2) const;
2467   inline isl::pw_multi_aff_list pw_multi_aff_list() const;
2468   inline isl::pw_multi_aff range_factor_domain() const;
2469   inline isl::pw_multi_aff range_factor_range() const;
2470   static inline isl::multi_aff range_map(isl::space space);
2471   inline isl::multi_aff range_product(isl::multi_aff multi2) const;
2472   inline isl::multi_pw_aff range_product(const isl::multi_pw_aff &multi2) const;
2473   inline isl::multi_union_pw_aff range_product(const isl::multi_union_pw_aff &multi2) const;
2474   inline isl::pw_multi_aff range_product(const isl::pw_multi_aff &pma2) const;
2475   inline isl::union_pw_multi_aff range_product(const isl::union_pw_multi_aff &upma2) const;
2476   inline isl::multi_aff range_product(const isl::aff &multi2) const;
2477   inline isl::id range_tuple_id() const;
2478   inline isl::id get_range_tuple_id() const;
2479   inline isl::multi_aff reset_range_tuple_id() const;
2480   inline isl::multi_aff reset_tuple_id(isl::dim type) const;
2481   inline isl::multi_aff scale(isl::multi_val mv) const;
2482   inline isl::multi_aff scale(isl::val v) const;
2483   inline isl::multi_aff scale(long v) const;
2484   inline isl::multi_aff scale_down(isl::multi_val mv) const;
2485   inline isl::multi_aff scale_down(isl::val v) const;
2486   inline isl::multi_aff scale_down(long v) const;
2487   inline isl::multi_aff set_aff(int pos, isl::aff el) const;
2488   inline isl::multi_aff set_at(int pos, isl::aff el) const;
2489   inline isl::multi_pw_aff set_at(int pos, const isl::pw_aff &el) const;
2490   inline isl::multi_union_pw_aff set_at(int pos, const isl::union_pw_aff &el) const;
2491   inline isl::multi_pw_aff set_pw_aff(int pos, const isl::pw_aff &el) const;
2492   inline isl::pw_multi_aff set_pw_aff(unsigned int pos, const isl::pw_aff &pa) const;
2493   inline isl::multi_aff set_range_tuple(isl::id id) const;
2494   inline isl::multi_aff set_range_tuple(const std::string &id) const;
2495   inline isl::multi_union_pw_aff set_union_pw_aff(int pos, const isl::union_pw_aff &el) const;
2496   inline class size size() const;
2497   inline isl::space space() const;
2498   inline isl::space get_space() const;
2499   inline isl::multi_aff sub(isl::multi_aff multi2) const;
2500   inline isl::multi_pw_aff sub(const isl::multi_pw_aff &multi2) const;
2501   inline isl::multi_union_pw_aff sub(const isl::multi_union_pw_aff &multi2) const;
2502   inline isl::pw_multi_aff sub(const isl::pw_multi_aff &pma2) const;
2503   inline isl::union_pw_multi_aff sub(const isl::union_pw_multi_aff &upma2) const;
2504   inline isl::multi_aff sub(const isl::aff &multi2) const;
2505   inline isl::pw_multi_aff subtract_domain(const isl::set &set) const;
2506   inline isl::union_pw_multi_aff subtract_domain(const isl::space &space) const;
2507   inline isl::union_pw_multi_aff subtract_domain(const isl::union_set &uset) const;
2508   inline isl::pw_multi_aff_list to_list() const;
2509   inline isl::multi_pw_aff to_multi_pw_aff() const;
2510   inline isl::multi_union_pw_aff to_multi_union_pw_aff() const;
2511   inline isl::pw_multi_aff to_pw_multi_aff() const;
2512   inline isl::union_pw_multi_aff to_union_pw_multi_aff() const;
2513   inline isl::id tuple_id(isl::dim type) const;
2514   inline isl::multi_aff unbind_params_insert_domain(isl::multi_id domain) const;
2515   inline isl::multi_pw_aff union_add(const isl::multi_pw_aff &mpa2) const;
2516   inline isl::multi_union_pw_aff union_add(const isl::multi_union_pw_aff &mupa2) const;
2517   inline isl::pw_multi_aff union_add(const isl::pw_multi_aff &pma2) const;
2518   inline isl::union_pw_multi_aff union_add(const isl::union_pw_multi_aff &upma2) const;
2519   static inline isl::multi_aff zero(isl::space space);
2520 };
2521 
2522 // declarations for isl::multi_id
2523 inline multi_id manage(__isl_take isl_multi_id *ptr);
2524 inline multi_id manage_copy(__isl_keep isl_multi_id *ptr);
2525 
2526 class multi_id {
2527   friend inline multi_id manage(__isl_take isl_multi_id *ptr);
2528   friend inline multi_id manage_copy(__isl_keep isl_multi_id *ptr);
2529 
2530 protected:
2531   isl_multi_id *ptr = nullptr;
2532 
2533   inline explicit multi_id(__isl_take isl_multi_id *ptr);
2534 
2535 public:
2536   inline /* implicit */ multi_id();
2537   inline /* implicit */ multi_id(const multi_id &obj);
2538   inline explicit multi_id(isl::space space, isl::id_list list);
2539   inline explicit multi_id(isl::ctx ctx, const std::string &str);
2540   inline multi_id &operator=(multi_id obj);
2541   inline ~multi_id();
2542   inline __isl_give isl_multi_id *copy() const &;
2543   inline __isl_give isl_multi_id *copy() && = delete;
2544   inline __isl_keep isl_multi_id *get() const;
2545   inline __isl_give isl_multi_id *release();
2546   inline bool is_null() const;
2547   inline isl::ctx ctx() const;
2548 
2549   inline isl::id at(int pos) const;
2550   inline isl::id get_at(int pos) const;
2551   inline isl::multi_id flat_range_product(isl::multi_id multi2) const;
2552   inline isl::id_list list() const;
2553   inline isl::id_list get_list() const;
2554   inline boolean plain_is_equal(const isl::multi_id &multi2) const;
2555   inline isl::multi_id range_product(isl::multi_id multi2) const;
2556   inline isl::multi_id set_at(int pos, isl::id el) const;
2557   inline isl::multi_id set_at(int pos, const std::string &el) const;
2558   inline isl::multi_id set_id(int pos, isl::id el) const;
2559   inline isl::multi_id set_id(int pos, const std::string &el) const;
2560   inline class size size() const;
2561   inline isl::space space() const;
2562   inline isl::space get_space() const;
2563 };
2564 
2565 // declarations for isl::multi_pw_aff
2566 inline multi_pw_aff manage(__isl_take isl_multi_pw_aff *ptr);
2567 inline multi_pw_aff manage_copy(__isl_keep isl_multi_pw_aff *ptr);
2568 
2569 class multi_pw_aff {
2570   friend inline multi_pw_aff manage(__isl_take isl_multi_pw_aff *ptr);
2571   friend inline multi_pw_aff manage_copy(__isl_keep isl_multi_pw_aff *ptr);
2572 
2573 protected:
2574   isl_multi_pw_aff *ptr = nullptr;
2575 
2576   inline explicit multi_pw_aff(__isl_take isl_multi_pw_aff *ptr);
2577 
2578 public:
2579   inline /* implicit */ multi_pw_aff();
2580   inline /* implicit */ multi_pw_aff(const multi_pw_aff &obj);
2581   inline /* implicit */ multi_pw_aff(isl::aff aff);
2582   inline /* implicit */ multi_pw_aff(isl::multi_aff ma);
2583   inline /* implicit */ multi_pw_aff(isl::pw_aff pa);
2584   inline explicit multi_pw_aff(isl::space space, isl::pw_aff_list list);
2585   inline /* implicit */ multi_pw_aff(isl::pw_multi_aff pma);
2586   inline explicit multi_pw_aff(isl::ctx ctx, const std::string &str);
2587   inline multi_pw_aff &operator=(multi_pw_aff obj);
2588   inline ~multi_pw_aff();
2589   inline __isl_give isl_multi_pw_aff *copy() const &;
2590   inline __isl_give isl_multi_pw_aff *copy() && = delete;
2591   inline __isl_keep isl_multi_pw_aff *get() const;
2592   inline __isl_give isl_multi_pw_aff *release();
2593   inline bool is_null() const;
2594   inline isl::ctx ctx() const;
2595 
2596   inline isl::multi_pw_aff add(isl::multi_pw_aff multi2) const;
2597   inline isl::multi_union_pw_aff add(const isl::multi_union_pw_aff &multi2) const;
2598   inline isl::multi_pw_aff add(const isl::aff &multi2) const;
2599   inline isl::multi_pw_aff add(const isl::multi_aff &multi2) const;
2600   inline isl::multi_pw_aff add(const isl::pw_aff &multi2) const;
2601   inline isl::multi_pw_aff add(const isl::pw_multi_aff &multi2) const;
2602   inline isl::multi_pw_aff add_constant(isl::multi_val mv) const;
2603   inline isl::multi_pw_aff add_constant(isl::val v) const;
2604   inline isl::multi_pw_aff add_constant(long v) const;
2605   inline isl::map as_map() const;
2606   inline isl::multi_aff as_multi_aff() const;
2607   inline isl::set as_set() const;
2608   inline isl::pw_aff at(int pos) const;
2609   inline isl::pw_aff get_at(int pos) const;
2610   inline isl::set bind(isl::multi_id tuple) const;
2611   inline isl::multi_pw_aff bind_domain(isl::multi_id tuple) const;
2612   inline isl::multi_pw_aff bind_domain_wrapped_domain(isl::multi_id tuple) const;
2613   inline isl::multi_pw_aff coalesce() const;
2614   inline class size dim(isl::dim type) const;
2615   inline isl::set domain() const;
2616   inline isl::multi_pw_aff flat_range_product(isl::multi_pw_aff multi2) const;
2617   inline isl::multi_union_pw_aff flat_range_product(const isl::multi_union_pw_aff &multi2) const;
2618   inline isl::multi_pw_aff flat_range_product(const isl::aff &multi2) const;
2619   inline isl::multi_pw_aff flat_range_product(const isl::multi_aff &multi2) const;
2620   inline isl::multi_pw_aff flat_range_product(const isl::pw_aff &multi2) const;
2621   inline isl::multi_pw_aff flat_range_product(const isl::pw_multi_aff &multi2) const;
2622   inline isl::multi_pw_aff gist(isl::set set) const;
2623   inline isl::multi_union_pw_aff gist(const isl::union_set &context) const;
2624   inline isl::multi_pw_aff gist(const isl::basic_set &set) const;
2625   inline isl::multi_pw_aff gist(const isl::point &set) const;
2626   inline boolean has_range_tuple_id() const;
2627   static inline isl::multi_pw_aff identity(isl::space space);
2628   inline isl::multi_pw_aff identity() const;
2629   static inline isl::multi_pw_aff identity_on_domain(isl::space space);
2630   inline isl::multi_pw_aff insert_domain(isl::space domain) const;
2631   inline isl::multi_pw_aff intersect_domain(isl::set domain) const;
2632   inline isl::multi_union_pw_aff intersect_domain(const isl::union_set &uset) const;
2633   inline isl::multi_pw_aff intersect_domain(const isl::basic_set &domain) const;
2634   inline isl::multi_pw_aff intersect_domain(const isl::point &domain) const;
2635   inline isl::multi_pw_aff intersect_params(isl::set set) const;
2636   inline boolean involves_nan() const;
2637   inline boolean involves_param(const isl::id &id) const;
2638   inline boolean involves_param(const std::string &id) const;
2639   inline boolean involves_param(const isl::id_list &list) const;
2640   inline boolean isa_multi_aff() const;
2641   inline isl::pw_aff_list list() const;
2642   inline isl::pw_aff_list get_list() const;
2643   inline isl::multi_pw_aff max(isl::multi_pw_aff multi2) const;
2644   inline isl::multi_val max_multi_val() const;
2645   inline isl::multi_pw_aff min(isl::multi_pw_aff multi2) const;
2646   inline isl::multi_val min_multi_val() const;
2647   inline isl::multi_pw_aff neg() const;
2648   inline boolean plain_is_equal(const isl::multi_pw_aff &multi2) const;
2649   inline boolean plain_is_equal(const isl::multi_union_pw_aff &multi2) const;
2650   inline boolean plain_is_equal(const isl::aff &multi2) const;
2651   inline boolean plain_is_equal(const isl::multi_aff &multi2) const;
2652   inline boolean plain_is_equal(const isl::pw_aff &multi2) const;
2653   inline boolean plain_is_equal(const isl::pw_multi_aff &multi2) const;
2654   inline isl::multi_pw_aff product(isl::multi_pw_aff multi2) const;
2655   inline isl::multi_pw_aff pullback(isl::multi_aff ma) const;
2656   inline isl::multi_pw_aff pullback(isl::multi_pw_aff mpa2) const;
2657   inline isl::multi_pw_aff pullback(isl::pw_multi_aff pma) const;
2658   inline isl::multi_union_pw_aff pullback(const isl::union_pw_multi_aff &upma) const;
2659   inline isl::multi_pw_aff range_product(isl::multi_pw_aff multi2) const;
2660   inline isl::multi_union_pw_aff range_product(const isl::multi_union_pw_aff &multi2) const;
2661   inline isl::multi_pw_aff range_product(const isl::aff &multi2) const;
2662   inline isl::multi_pw_aff range_product(const isl::multi_aff &multi2) const;
2663   inline isl::multi_pw_aff range_product(const isl::pw_aff &multi2) const;
2664   inline isl::multi_pw_aff range_product(const isl::pw_multi_aff &multi2) const;
2665   inline isl::id range_tuple_id() const;
2666   inline isl::id get_range_tuple_id() const;
2667   inline isl::multi_pw_aff reset_range_tuple_id() const;
2668   inline isl::multi_pw_aff reset_tuple_id(isl::dim type) const;
2669   inline isl::multi_pw_aff scale(isl::multi_val mv) const;
2670   inline isl::multi_pw_aff scale(isl::val v) const;
2671   inline isl::multi_pw_aff scale(long v) const;
2672   inline isl::multi_pw_aff scale_down(isl::multi_val mv) const;
2673   inline isl::multi_pw_aff scale_down(isl::val v) const;
2674   inline isl::multi_pw_aff scale_down(long v) const;
2675   inline isl::multi_pw_aff set_at(int pos, isl::pw_aff el) const;
2676   inline isl::multi_union_pw_aff set_at(int pos, const isl::union_pw_aff &el) const;
2677   inline isl::multi_pw_aff set_pw_aff(int pos, isl::pw_aff el) const;
2678   inline isl::multi_pw_aff set_range_tuple(isl::id id) const;
2679   inline isl::multi_pw_aff set_range_tuple(const std::string &id) const;
2680   inline isl::multi_union_pw_aff set_union_pw_aff(int pos, const isl::union_pw_aff &el) const;
2681   inline class size size() const;
2682   inline isl::space space() const;
2683   inline isl::space get_space() const;
2684   inline isl::multi_pw_aff sub(isl::multi_pw_aff multi2) const;
2685   inline isl::multi_union_pw_aff sub(const isl::multi_union_pw_aff &multi2) const;
2686   inline isl::multi_pw_aff sub(const isl::aff &multi2) const;
2687   inline isl::multi_pw_aff sub(const isl::multi_aff &multi2) const;
2688   inline isl::multi_pw_aff sub(const isl::pw_aff &multi2) const;
2689   inline isl::multi_pw_aff sub(const isl::pw_multi_aff &multi2) const;
2690   inline isl::multi_pw_aff unbind_params_insert_domain(isl::multi_id domain) const;
2691   inline isl::multi_pw_aff union_add(isl::multi_pw_aff mpa2) const;
2692   inline isl::multi_union_pw_aff union_add(const isl::multi_union_pw_aff &mupa2) const;
2693   inline isl::multi_pw_aff union_add(const isl::aff &mpa2) const;
2694   inline isl::multi_pw_aff union_add(const isl::multi_aff &mpa2) const;
2695   inline isl::multi_pw_aff union_add(const isl::pw_aff &mpa2) const;
2696   inline isl::multi_pw_aff union_add(const isl::pw_multi_aff &mpa2) const;
2697   static inline isl::multi_pw_aff zero(isl::space space);
2698 };
2699 
2700 // declarations for isl::multi_union_pw_aff
2701 inline multi_union_pw_aff manage(__isl_take isl_multi_union_pw_aff *ptr);
2702 inline multi_union_pw_aff manage_copy(__isl_keep isl_multi_union_pw_aff *ptr);
2703 
2704 class multi_union_pw_aff {
2705   friend inline multi_union_pw_aff manage(__isl_take isl_multi_union_pw_aff *ptr);
2706   friend inline multi_union_pw_aff manage_copy(__isl_keep isl_multi_union_pw_aff *ptr);
2707 
2708 protected:
2709   isl_multi_union_pw_aff *ptr = nullptr;
2710 
2711   inline explicit multi_union_pw_aff(__isl_take isl_multi_union_pw_aff *ptr);
2712 
2713 public:
2714   inline /* implicit */ multi_union_pw_aff();
2715   inline /* implicit */ multi_union_pw_aff(const multi_union_pw_aff &obj);
2716   inline /* implicit */ multi_union_pw_aff(isl::multi_pw_aff mpa);
2717   inline /* implicit */ multi_union_pw_aff(isl::union_pw_aff upa);
2718   inline explicit multi_union_pw_aff(isl::space space, isl::union_pw_aff_list list);
2719   inline explicit multi_union_pw_aff(isl::union_pw_multi_aff upma);
2720   inline explicit multi_union_pw_aff(isl::ctx ctx, const std::string &str);
2721   inline multi_union_pw_aff &operator=(multi_union_pw_aff obj);
2722   inline ~multi_union_pw_aff();
2723   inline __isl_give isl_multi_union_pw_aff *copy() const &;
2724   inline __isl_give isl_multi_union_pw_aff *copy() && = delete;
2725   inline __isl_keep isl_multi_union_pw_aff *get() const;
2726   inline __isl_give isl_multi_union_pw_aff *release();
2727   inline bool is_null() const;
2728   inline isl::ctx ctx() const;
2729 
2730   inline isl::multi_union_pw_aff add(isl::multi_union_pw_aff multi2) const;
2731   inline isl::union_pw_aff at(int pos) const;
2732   inline isl::union_pw_aff get_at(int pos) const;
2733   inline isl::union_set bind(isl::multi_id tuple) const;
2734   inline isl::multi_union_pw_aff coalesce() const;
2735   inline class size dim(isl::dim type) const;
2736   inline isl::union_set domain() const;
2737   inline isl::multi_union_pw_aff flat_range_product(isl::multi_union_pw_aff multi2) const;
2738   static inline isl::multi_union_pw_aff from_union_map(isl::union_map umap);
2739   inline isl::multi_union_pw_aff gist(isl::union_set context) const;
2740   inline boolean has_range_tuple_id() const;
2741   inline isl::multi_union_pw_aff intersect_domain(isl::union_set uset) const;
2742   inline isl::multi_union_pw_aff intersect_params(isl::set params) const;
2743   inline boolean involves_nan() const;
2744   inline isl::union_pw_aff_list list() const;
2745   inline isl::union_pw_aff_list get_list() const;
2746   inline isl::multi_union_pw_aff neg() const;
2747   inline boolean plain_is_equal(const isl::multi_union_pw_aff &multi2) const;
2748   inline isl::multi_union_pw_aff pullback(isl::union_pw_multi_aff upma) const;
2749   inline isl::multi_union_pw_aff range_product(isl::multi_union_pw_aff multi2) const;
2750   inline isl::id range_tuple_id() const;
2751   inline isl::id get_range_tuple_id() const;
2752   inline isl::multi_union_pw_aff reset_range_tuple_id() const;
2753   inline isl::multi_union_pw_aff reset_tuple_id(isl::dim type) const;
2754   inline isl::multi_union_pw_aff scale(isl::multi_val mv) const;
2755   inline isl::multi_union_pw_aff scale(isl::val v) const;
2756   inline isl::multi_union_pw_aff scale(long v) const;
2757   inline isl::multi_union_pw_aff scale_down(isl::multi_val mv) const;
2758   inline isl::multi_union_pw_aff scale_down(isl::val v) const;
2759   inline isl::multi_union_pw_aff scale_down(long v) const;
2760   inline isl::multi_union_pw_aff set_at(int pos, isl::union_pw_aff el) const;
2761   inline isl::multi_union_pw_aff set_range_tuple(isl::id id) const;
2762   inline isl::multi_union_pw_aff set_range_tuple(const std::string &id) const;
2763   inline isl::multi_union_pw_aff set_union_pw_aff(int pos, isl::union_pw_aff el) const;
2764   inline class size size() const;
2765   inline isl::space space() const;
2766   inline isl::space get_space() const;
2767   inline isl::multi_union_pw_aff sub(isl::multi_union_pw_aff multi2) const;
2768   inline isl::multi_union_pw_aff union_add(isl::multi_union_pw_aff mupa2) const;
2769   static inline isl::multi_union_pw_aff zero(isl::space space);
2770 };
2771 
2772 // declarations for isl::multi_val
2773 inline multi_val manage(__isl_take isl_multi_val *ptr);
2774 inline multi_val manage_copy(__isl_keep isl_multi_val *ptr);
2775 
2776 class multi_val {
2777   friend inline multi_val manage(__isl_take isl_multi_val *ptr);
2778   friend inline multi_val manage_copy(__isl_keep isl_multi_val *ptr);
2779 
2780 protected:
2781   isl_multi_val *ptr = nullptr;
2782 
2783   inline explicit multi_val(__isl_take isl_multi_val *ptr);
2784 
2785 public:
2786   inline /* implicit */ multi_val();
2787   inline /* implicit */ multi_val(const multi_val &obj);
2788   inline explicit multi_val(isl::space space, isl::val_list list);
2789   inline explicit multi_val(isl::ctx ctx, const std::string &str);
2790   inline multi_val &operator=(multi_val obj);
2791   inline ~multi_val();
2792   inline __isl_give isl_multi_val *copy() const &;
2793   inline __isl_give isl_multi_val *copy() && = delete;
2794   inline __isl_keep isl_multi_val *get() const;
2795   inline __isl_give isl_multi_val *release();
2796   inline bool is_null() const;
2797   inline isl::ctx ctx() const;
2798 
2799   inline isl::multi_val add(isl::multi_val multi2) const;
2800   inline isl::multi_val add(isl::val v) const;
2801   inline isl::multi_val add(long v) const;
2802   inline isl::val at(int pos) const;
2803   inline isl::val get_at(int pos) const;
2804   inline class size dim(isl::dim type) const;
2805   inline isl::multi_val flat_range_product(isl::multi_val multi2) const;
2806   inline boolean has_range_tuple_id() const;
2807   inline boolean involves_nan() const;
2808   inline isl::val_list list() const;
2809   inline isl::val_list get_list() const;
2810   inline isl::multi_val max(isl::multi_val multi2) const;
2811   inline isl::multi_val min(isl::multi_val multi2) const;
2812   inline isl::multi_val neg() const;
2813   inline boolean plain_is_equal(const isl::multi_val &multi2) const;
2814   inline isl::multi_val product(isl::multi_val multi2) const;
2815   inline isl::multi_val range_product(isl::multi_val multi2) const;
2816   inline isl::id range_tuple_id() const;
2817   inline isl::id get_range_tuple_id() const;
2818   inline isl::multi_val reset_range_tuple_id() const;
2819   inline isl::multi_val reset_tuple_id(isl::dim type) const;
2820   inline isl::multi_val scale(isl::multi_val mv) const;
2821   inline isl::multi_val scale(isl::val v) const;
2822   inline isl::multi_val scale(long v) const;
2823   inline isl::multi_val scale_down(isl::multi_val mv) const;
2824   inline isl::multi_val scale_down(isl::val v) const;
2825   inline isl::multi_val scale_down(long v) const;
2826   inline isl::multi_val set_at(int pos, isl::val el) const;
2827   inline isl::multi_val set_at(int pos, long el) const;
2828   inline isl::multi_val set_range_tuple(isl::id id) const;
2829   inline isl::multi_val set_range_tuple(const std::string &id) const;
2830   inline isl::multi_val set_val(int pos, isl::val el) const;
2831   inline isl::multi_val set_val(int pos, long el) const;
2832   inline class size size() const;
2833   inline isl::space space() const;
2834   inline isl::space get_space() const;
2835   inline isl::multi_val sub(isl::multi_val multi2) const;
2836   static inline isl::multi_val zero(isl::space space);
2837 };
2838 
2839 // declarations for isl::point
2840 inline point manage(__isl_take isl_point *ptr);
2841 inline point manage_copy(__isl_keep isl_point *ptr);
2842 
2843 class point {
2844   friend inline point manage(__isl_take isl_point *ptr);
2845   friend inline point manage_copy(__isl_keep isl_point *ptr);
2846 
2847 protected:
2848   isl_point *ptr = nullptr;
2849 
2850   inline explicit point(__isl_take isl_point *ptr);
2851 
2852 public:
2853   inline /* implicit */ point();
2854   inline /* implicit */ point(const point &obj);
2855   inline explicit point(isl::space space);
2856   inline point &operator=(point obj);
2857   inline ~point();
2858   inline __isl_give isl_point *copy() const &;
2859   inline __isl_give isl_point *copy() && = delete;
2860   inline __isl_keep isl_point *get() const;
2861   inline __isl_give isl_point *release();
2862   inline bool is_null() const;
2863   inline isl::ctx ctx() const;
2864 
2865   inline isl::set add_constraint(const isl::constraint &constraint) const;
2866   inline isl::set add_dims(isl::dim type, unsigned int n) const;
2867   inline isl::basic_set affine_hull() const;
2868   inline isl::set align_params(const isl::space &model) const;
2869   inline isl::basic_set apply(const isl::basic_map &bmap) const;
2870   inline isl::set apply(const isl::map &map) const;
2871   inline isl::union_set apply(const isl::union_map &umap) const;
2872   inline isl::pw_multi_aff as_pw_multi_aff() const;
2873   inline isl::set as_set() const;
2874   inline isl::basic_set_list basic_set_list() const;
2875   inline isl::set bind(const isl::multi_id &tuple) const;
2876   inline isl::set coalesce() const;
2877   inline isl::set complement() const;
2878   inline isl::union_set compute_divs() const;
2879   inline boolean contains(const isl::space &space) const;
2880   inline isl::basic_set convex_hull() const;
2881   inline isl::val coordinate_val(isl::dim type, int pos) const;
2882   inline isl::val get_coordinate_val(isl::dim type, int pos) const;
2883   inline isl::basic_set detect_equalities() const;
2884   inline class size dim(isl::dim type) const;
2885   inline boolean dim_has_any_lower_bound(isl::dim type, unsigned int pos) const;
2886   inline isl::id dim_id(isl::dim type, unsigned int pos) const;
2887   inline isl::pw_aff dim_max(int pos) const;
2888   inline isl::val dim_max_val(int pos) const;
2889   inline isl::pw_aff dim_min(int pos) const;
2890   inline isl::val dim_min_val(int pos) const;
2891   inline std::string dim_name(isl::dim type, unsigned int pos) const;
2892   inline isl::aff div(int pos) const;
2893   inline isl::set drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const;
2894   inline isl::set eliminate(isl::dim type, unsigned int first, unsigned int n) const;
2895   inline boolean every_set(const std::function<boolean(isl::set)> &test) const;
2896   inline isl::set extract_set(const isl::space &space) const;
2897   inline int find_dim_by_id(isl::dim type, const isl::id &id) const;
2898   inline int find_dim_by_id(isl::dim type, const std::string &id) const;
2899   inline isl::basic_set fix_si(isl::dim type, unsigned int pos, int value) const;
2900   inline isl::basic_set fix_val(isl::dim type, unsigned int pos, const isl::val &v) const;
2901   inline isl::basic_set fix_val(isl::dim type, unsigned int pos, long v) const;
2902   inline isl::basic_set flatten() const;
2903   inline stat foreach_basic_set(const std::function<stat(isl::basic_set)> &fn) const;
2904   inline stat foreach_point(const std::function<stat(isl::point)> &fn) const;
2905   inline stat foreach_set(const std::function<stat(isl::set)> &fn) const;
2906   inline isl::basic_set gist(const isl::basic_set &context) const;
2907   inline isl::set gist(const isl::set &context) const;
2908   inline isl::union_set gist(const isl::union_set &context) const;
2909   inline isl::set gist_params(const isl::set &context) const;
2910   inline boolean has_equal_space(const isl::set &set2) const;
2911   inline isl::map identity() const;
2912   inline isl::union_pw_multi_aff identity_union_pw_multi_aff() const;
2913   inline isl::pw_aff indicator_function() const;
2914   inline isl::set insert_dims(isl::dim type, unsigned int pos, unsigned int n) const;
2915   inline isl::map insert_domain(const isl::space &domain) const;
2916   inline isl::basic_set intersect(const isl::basic_set &bset2) const;
2917   inline isl::set intersect(const isl::set &set2) const;
2918   inline isl::union_set intersect(const isl::union_set &uset2) const;
2919   inline isl::basic_set intersect_params(const isl::basic_set &bset2) const;
2920   inline isl::set intersect_params(const isl::set &params) const;
2921   inline boolean involves_dims(isl::dim type, unsigned int first, unsigned int n) const;
2922   inline boolean involves_locals() const;
2923   inline boolean is_bounded() const;
2924   inline boolean is_disjoint(const isl::set &set2) const;
2925   inline boolean is_disjoint(const isl::union_set &uset2) const;
2926   inline boolean is_empty() const;
2927   inline boolean is_equal(const isl::basic_set &bset2) const;
2928   inline boolean is_equal(const isl::set &set2) const;
2929   inline boolean is_equal(const isl::union_set &uset2) const;
2930   inline boolean is_params() const;
2931   inline boolean is_singleton() const;
2932   inline boolean is_strict_subset(const isl::set &set2) const;
2933   inline boolean is_strict_subset(const isl::union_set &uset2) const;
2934   inline boolean is_subset(const isl::basic_set &bset2) const;
2935   inline boolean is_subset(const isl::set &set2) const;
2936   inline boolean is_subset(const isl::union_set &uset2) const;
2937   inline boolean is_wrapping() const;
2938   inline boolean isa_set() const;
2939   inline isl::set lexmax() const;
2940   inline isl::pw_multi_aff lexmax_pw_multi_aff() const;
2941   inline isl::set lexmin() const;
2942   inline isl::pw_multi_aff lexmin_pw_multi_aff() const;
2943   inline isl::set lower_bound(const isl::multi_pw_aff &lower) const;
2944   inline isl::set lower_bound(const isl::multi_val &lower) const;
2945   inline isl::set lower_bound_si(isl::dim type, unsigned int pos, int value) const;
2946   inline isl::set lower_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const;
2947   inline isl::set lower_bound_val(isl::dim type, unsigned int pos, long value) const;
2948   inline isl::multi_pw_aff max_multi_pw_aff() const;
2949   inline isl::val max_val(const isl::aff &obj) const;
2950   inline isl::multi_pw_aff min_multi_pw_aff() const;
2951   inline isl::val min_val(const isl::aff &obj) const;
2952   inline isl::multi_val multi_val() const;
2953   inline isl::multi_val get_multi_val() const;
2954   inline class size n_basic_set() const;
2955   inline isl::basic_set params() const;
2956   inline isl::val plain_get_val_if_fixed(isl::dim type, unsigned int pos) const;
2957   inline isl::multi_val plain_multi_val_if_fixed() const;
2958   inline isl::basic_set polyhedral_hull() const;
2959   inline isl::set preimage(const isl::multi_aff &ma) const;
2960   inline isl::set preimage(const isl::multi_pw_aff &mpa) const;
2961   inline isl::set preimage(const isl::pw_multi_aff &pma) const;
2962   inline isl::union_set preimage(const isl::union_pw_multi_aff &upma) const;
2963   inline isl::set product(const isl::set &set2) const;
2964   inline isl::basic_set project_out(isl::dim type, unsigned int first, unsigned int n) const;
2965   inline isl::set project_out_all_params() const;
2966   inline isl::set project_out_param(const isl::id &id) const;
2967   inline isl::set project_out_param(const std::string &id) const;
2968   inline isl::set project_out_param(const isl::id_list &list) const;
2969   inline isl::pw_multi_aff pw_multi_aff_on_domain(const isl::multi_val &mv) const;
2970   inline isl::set remove_dims(isl::dim type, unsigned int first, unsigned int n) const;
2971   inline isl::set remove_divs() const;
2972   inline isl::set remove_redundancies() const;
2973   inline isl::set reset_tuple_id() const;
2974   inline isl::basic_set sample() const;
2975   inline isl::point sample_point() const;
2976   inline isl::set set_dim_id(isl::dim type, unsigned int pos, const isl::id &id) const;
2977   inline isl::set set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const;
2978   inline isl::set_list set_list() const;
2979   inline isl::set set_tuple_id(const isl::id &id) const;
2980   inline isl::set set_tuple_id(const std::string &id) const;
2981   inline isl::fixed_box simple_fixed_box_hull() const;
2982   inline isl::basic_set simple_hull() const;
2983   inline isl::space space() const;
2984   inline isl::val stride(int pos) const;
2985   inline isl::set subtract(const isl::set &set2) const;
2986   inline isl::union_set subtract(const isl::union_set &uset2) const;
2987   inline isl::basic_set_list to_list() const;
2988   inline isl::set to_set() const;
2989   inline isl::union_set to_union_set() const;
2990   inline isl::map translation() const;
2991   inline class size tuple_dim() const;
2992   inline isl::id tuple_id() const;
2993   inline std::string tuple_name() const;
2994   inline isl::set unbind_params(const isl::multi_id &tuple) const;
2995   inline isl::map unbind_params_insert_domain(const isl::multi_id &domain) const;
2996   inline isl::set unite(const isl::basic_set &bset2) const;
2997   inline isl::set unite(const isl::set &set2) const;
2998   inline isl::union_set unite(const isl::union_set &uset2) const;
2999   inline isl::basic_set unshifted_simple_hull() const;
3000   inline isl::map unwrap() const;
3001   inline isl::set upper_bound(const isl::multi_pw_aff &upper) const;
3002   inline isl::set upper_bound(const isl::multi_val &upper) const;
3003   inline isl::set upper_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const;
3004   inline isl::set upper_bound_val(isl::dim type, unsigned int pos, long value) const;
3005 };
3006 
3007 // declarations for isl::pw_aff
3008 inline pw_aff manage(__isl_take isl_pw_aff *ptr);
3009 inline pw_aff manage_copy(__isl_keep isl_pw_aff *ptr);
3010 
3011 class pw_aff {
3012   friend inline pw_aff manage(__isl_take isl_pw_aff *ptr);
3013   friend inline pw_aff manage_copy(__isl_keep isl_pw_aff *ptr);
3014 
3015 protected:
3016   isl_pw_aff *ptr = nullptr;
3017 
3018   inline explicit pw_aff(__isl_take isl_pw_aff *ptr);
3019 
3020 public:
3021   inline /* implicit */ pw_aff();
3022   inline /* implicit */ pw_aff(const pw_aff &obj);
3023   inline /* implicit */ pw_aff(isl::aff aff);
3024   inline explicit pw_aff(isl::ctx ctx, const std::string &str);
3025   inline explicit pw_aff(isl::set domain, isl::val v);
3026   inline explicit pw_aff(isl::local_space ls);
3027   inline pw_aff &operator=(pw_aff obj);
3028   inline ~pw_aff();
3029   inline __isl_give isl_pw_aff *copy() const &;
3030   inline __isl_give isl_pw_aff *copy() && = delete;
3031   inline __isl_keep isl_pw_aff *get() const;
3032   inline __isl_give isl_pw_aff *release();
3033   inline bool is_null() const;
3034   inline isl::ctx ctx() const;
3035 
3036   inline isl::multi_pw_aff add(const isl::multi_pw_aff &multi2) const;
3037   inline isl::multi_union_pw_aff add(const isl::multi_union_pw_aff &multi2) const;
3038   inline isl::pw_aff add(isl::pw_aff pwaff2) const;
3039   inline isl::pw_multi_aff add(const isl::pw_multi_aff &pma2) const;
3040   inline isl::union_pw_aff add(const isl::union_pw_aff &upa2) const;
3041   inline isl::union_pw_multi_aff add(const isl::union_pw_multi_aff &upma2) const;
3042   inline isl::pw_aff add(const isl::aff &pwaff2) const;
3043   inline isl::pw_aff add_constant(isl::val v) const;
3044   inline isl::pw_aff add_constant(long v) const;
3045   inline isl::pw_multi_aff add_constant(const isl::multi_val &mv) const;
3046   inline isl::pw_aff add_dims(isl::dim type, unsigned int n) const;
3047   inline isl::union_pw_multi_aff add_pw_multi_aff(const isl::pw_multi_aff &pma) const;
3048   inline isl::union_pw_multi_aff apply(const isl::union_pw_multi_aff &upma2) const;
3049   inline isl::aff as_aff() const;
3050   inline isl::map as_map() const;
3051   inline isl::multi_aff as_multi_aff() const;
3052   inline isl::multi_union_pw_aff as_multi_union_pw_aff() const;
3053   inline isl::pw_multi_aff as_pw_multi_aff() const;
3054   inline isl::set as_set() const;
3055   inline isl::union_map as_union_map() const;
3056   inline isl::pw_aff at(int pos) const;
3057   inline isl::set bind(const isl::multi_id &tuple) const;
3058   inline isl::set bind(isl::id id) const;
3059   inline isl::set bind(const std::string &id) const;
3060   inline isl::pw_aff bind_domain(isl::multi_id tuple) const;
3061   inline isl::pw_aff bind_domain_wrapped_domain(isl::multi_id tuple) const;
3062   inline isl::pw_aff ceil() const;
3063   inline isl::pw_aff coalesce() const;
3064   inline isl::pw_aff cond(isl::pw_aff pwaff_true, isl::pw_aff pwaff_false) const;
3065   inline class size dim(isl::dim type) const;
3066   inline isl::id dim_id(isl::dim type, unsigned int pos) const;
3067   inline isl::id get_dim_id(isl::dim type, unsigned int pos) const;
3068   inline isl::pw_aff div(isl::pw_aff pa2) const;
3069   inline isl::set domain() const;
3070   inline isl::space domain_space() const;
3071   inline isl::space get_domain_space() const;
3072   inline isl::pw_multi_aff drop_dims(isl::dim type, unsigned int first, unsigned int n) const;
3073   inline isl::set eq_set(isl::pw_aff pwaff2) const;
3074   inline isl::val eval(isl::point pnt) const;
3075   inline isl::pw_multi_aff extract_pw_multi_aff(const isl::space &space) const;
3076   inline isl::multi_pw_aff flat_range_product(const isl::multi_pw_aff &multi2) const;
3077   inline isl::multi_union_pw_aff flat_range_product(const isl::multi_union_pw_aff &multi2) const;
3078   inline isl::pw_multi_aff flat_range_product(const isl::pw_multi_aff &pma2) const;
3079   inline isl::union_pw_multi_aff flat_range_product(const isl::union_pw_multi_aff &upma2) const;
3080   inline isl::pw_aff floor() const;
3081   inline stat foreach_piece(const std::function<stat(isl::set, isl::aff)> &fn) const;
3082   inline stat foreach_piece(const std::function<stat(isl::set, isl::multi_aff)> &fn) const;
3083   inline stat foreach_pw_aff(const std::function<stat(isl::pw_aff)> &fn) const;
3084   inline isl::set ge_set(isl::pw_aff pwaff2) const;
3085   inline isl::pw_aff gist(isl::set context) const;
3086   inline isl::union_pw_aff gist(const isl::union_set &context) const;
3087   inline isl::pw_aff gist(const isl::basic_set &context) const;
3088   inline isl::pw_aff gist(const isl::point &context) const;
3089   inline isl::set gt_set(isl::pw_aff pwaff2) const;
3090   inline boolean has_range_tuple_id() const;
3091   inline isl::multi_pw_aff identity() const;
3092   inline isl::pw_aff insert_domain(isl::space domain) const;
3093   inline isl::pw_aff intersect_domain(isl::set set) const;
3094   inline isl::union_pw_aff intersect_domain(const isl::space &space) const;
3095   inline isl::union_pw_aff intersect_domain(const isl::union_set &uset) const;
3096   inline isl::pw_aff intersect_domain(const isl::basic_set &set) const;
3097   inline isl::pw_aff intersect_domain(const isl::point &set) const;
3098   inline isl::union_pw_aff intersect_domain_wrapped_domain(const isl::union_set &uset) const;
3099   inline isl::union_pw_aff intersect_domain_wrapped_range(const isl::union_set &uset) const;
3100   inline isl::pw_aff intersect_params(isl::set set) const;
3101   inline boolean involves_locals() const;
3102   inline boolean involves_nan() const;
3103   inline boolean involves_param(const isl::id &id) const;
3104   inline boolean involves_param(const std::string &id) const;
3105   inline boolean involves_param(const isl::id_list &list) const;
3106   inline boolean is_cst() const;
3107   inline boolean is_equal(const isl::pw_aff &pa2) const;
3108   inline boolean isa_aff() const;
3109   inline boolean isa_multi_aff() const;
3110   inline boolean isa_pw_multi_aff() const;
3111   inline isl::set le_set(isl::pw_aff pwaff2) const;
3112   inline isl::pw_aff_list list() const;
3113   inline isl::set lt_set(isl::pw_aff pwaff2) const;
3114   inline isl::multi_pw_aff max(const isl::multi_pw_aff &multi2) const;
3115   inline isl::pw_aff max(isl::pw_aff pwaff2) const;
3116   inline isl::pw_aff max(const isl::aff &pwaff2) const;
3117   inline isl::multi_val max_multi_val() const;
3118   inline isl::multi_pw_aff min(const isl::multi_pw_aff &multi2) const;
3119   inline isl::pw_aff min(isl::pw_aff pwaff2) const;
3120   inline isl::pw_aff min(const isl::aff &pwaff2) const;
3121   inline isl::multi_val min_multi_val() const;
3122   inline isl::pw_aff mod(isl::val mod) const;
3123   inline isl::pw_aff mod(long mod) const;
3124   inline isl::pw_aff mul(isl::pw_aff pwaff2) const;
3125   inline class size n_piece() const;
3126   inline isl::set ne_set(isl::pw_aff pwaff2) const;
3127   inline isl::pw_aff neg() const;
3128   static inline isl::pw_aff param_on_domain(isl::set domain, isl::id id);
3129   inline boolean plain_is_empty() const;
3130   inline boolean plain_is_equal(const isl::multi_pw_aff &multi2) const;
3131   inline boolean plain_is_equal(const isl::multi_union_pw_aff &multi2) const;
3132   inline isl::pw_multi_aff preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const;
3133   inline isl::union_pw_multi_aff preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const;
3134   inline isl::multi_pw_aff product(const isl::multi_pw_aff &multi2) const;
3135   inline isl::pw_multi_aff product(const isl::pw_multi_aff &pma2) const;
3136   inline isl::pw_aff pullback(isl::multi_aff ma) const;
3137   inline isl::pw_aff pullback(isl::multi_pw_aff mpa) const;
3138   inline isl::pw_aff pullback(isl::pw_multi_aff pma) const;
3139   inline isl::union_pw_aff pullback(const isl::union_pw_multi_aff &upma) const;
3140   inline isl::pw_multi_aff_list pw_multi_aff_list() const;
3141   inline isl::pw_multi_aff range_factor_domain() const;
3142   inline isl::pw_multi_aff range_factor_range() const;
3143   inline isl::multi_pw_aff range_product(const isl::multi_pw_aff &multi2) const;
3144   inline isl::multi_union_pw_aff range_product(const isl::multi_union_pw_aff &multi2) const;
3145   inline isl::pw_multi_aff range_product(const isl::pw_multi_aff &pma2) const;
3146   inline isl::union_pw_multi_aff range_product(const isl::union_pw_multi_aff &upma2) const;
3147   inline isl::id range_tuple_id() const;
3148   inline isl::multi_pw_aff reset_range_tuple_id() const;
3149   inline isl::multi_pw_aff reset_tuple_id(isl::dim type) const;
3150   inline isl::multi_pw_aff scale(const isl::multi_val &mv) const;
3151   inline isl::pw_aff scale(isl::val v) const;
3152   inline isl::pw_aff scale(long v) const;
3153   inline isl::multi_pw_aff scale_down(const isl::multi_val &mv) const;
3154   inline isl::pw_aff scale_down(isl::val f) const;
3155   inline isl::pw_aff scale_down(long f) const;
3156   inline isl::multi_pw_aff set_at(int pos, const isl::pw_aff &el) const;
3157   inline isl::multi_union_pw_aff set_at(int pos, const isl::union_pw_aff &el) const;
3158   inline isl::multi_pw_aff set_pw_aff(int pos, const isl::pw_aff &el) const;
3159   inline isl::pw_multi_aff set_pw_aff(unsigned int pos, const isl::pw_aff &pa) const;
3160   inline isl::pw_multi_aff set_range_tuple(const isl::id &id) const;
3161   inline isl::pw_multi_aff set_range_tuple(const std::string &id) const;
3162   inline isl::pw_aff set_tuple_id(isl::dim type, isl::id id) const;
3163   inline isl::pw_aff set_tuple_id(isl::dim type, const std::string &id) const;
3164   inline isl::multi_union_pw_aff set_union_pw_aff(int pos, const isl::union_pw_aff &el) const;
3165   inline class size size() const;
3166   inline isl::space space() const;
3167   inline isl::space get_space() const;
3168   inline isl::multi_pw_aff sub(const isl::multi_pw_aff &multi2) const;
3169   inline isl::multi_union_pw_aff sub(const isl::multi_union_pw_aff &multi2) const;
3170   inline isl::pw_aff sub(isl::pw_aff pwaff2) const;
3171   inline isl::pw_multi_aff sub(const isl::pw_multi_aff &pma2) const;
3172   inline isl::union_pw_aff sub(const isl::union_pw_aff &upa2) const;
3173   inline isl::union_pw_multi_aff sub(const isl::union_pw_multi_aff &upma2) const;
3174   inline isl::pw_aff sub(const isl::aff &pwaff2) const;
3175   inline isl::pw_aff subtract_domain(isl::set set) const;
3176   inline isl::union_pw_aff subtract_domain(const isl::space &space) const;
3177   inline isl::union_pw_aff subtract_domain(const isl::union_set &uset) const;
3178   inline isl::pw_aff subtract_domain(const isl::basic_set &set) const;
3179   inline isl::pw_aff subtract_domain(const isl::point &set) const;
3180   inline isl::pw_aff tdiv_q(isl::pw_aff pa2) const;
3181   inline isl::pw_aff tdiv_r(isl::pw_aff pa2) const;
3182   inline isl::pw_aff_list to_list() const;
3183   inline isl::multi_pw_aff to_multi_pw_aff() const;
3184   inline isl::union_pw_aff to_union_pw_aff() const;
3185   inline isl::union_pw_multi_aff to_union_pw_multi_aff() const;
3186   inline isl::id tuple_id(isl::dim type) const;
3187   inline isl::id get_tuple_id(isl::dim type) const;
3188   inline isl::multi_pw_aff unbind_params_insert_domain(const isl::multi_id &domain) const;
3189   inline isl::multi_pw_aff union_add(const isl::multi_pw_aff &mpa2) const;
3190   inline isl::multi_union_pw_aff union_add(const isl::multi_union_pw_aff &mupa2) const;
3191   inline isl::pw_aff union_add(isl::pw_aff pwaff2) const;
3192   inline isl::pw_multi_aff union_add(const isl::pw_multi_aff &pma2) const;
3193   inline isl::union_pw_aff union_add(const isl::union_pw_aff &upa2) const;
3194   inline isl::union_pw_multi_aff union_add(const isl::union_pw_multi_aff &upma2) const;
3195   inline isl::pw_aff union_add(const isl::aff &pwaff2) const;
3196   static inline isl::pw_aff var_on_domain(isl::local_space ls, isl::dim type, unsigned int pos);
3197 };
3198 
3199 // declarations for isl::pw_aff_list
3200 inline pw_aff_list manage(__isl_take isl_pw_aff_list *ptr);
3201 inline pw_aff_list manage_copy(__isl_keep isl_pw_aff_list *ptr);
3202 
3203 class pw_aff_list {
3204   friend inline pw_aff_list manage(__isl_take isl_pw_aff_list *ptr);
3205   friend inline pw_aff_list manage_copy(__isl_keep isl_pw_aff_list *ptr);
3206 
3207 protected:
3208   isl_pw_aff_list *ptr = nullptr;
3209 
3210   inline explicit pw_aff_list(__isl_take isl_pw_aff_list *ptr);
3211 
3212 public:
3213   inline /* implicit */ pw_aff_list();
3214   inline /* implicit */ pw_aff_list(const pw_aff_list &obj);
3215   inline explicit pw_aff_list(isl::ctx ctx, int n);
3216   inline explicit pw_aff_list(isl::pw_aff el);
3217   inline explicit pw_aff_list(isl::ctx ctx, const std::string &str);
3218   inline pw_aff_list &operator=(pw_aff_list obj);
3219   inline ~pw_aff_list();
3220   inline __isl_give isl_pw_aff_list *copy() const &;
3221   inline __isl_give isl_pw_aff_list *copy() && = delete;
3222   inline __isl_keep isl_pw_aff_list *get() const;
3223   inline __isl_give isl_pw_aff_list *release();
3224   inline bool is_null() const;
3225   inline isl::ctx ctx() const;
3226 
3227   inline isl::pw_aff_list add(isl::pw_aff el) const;
3228   inline isl::pw_aff at(int index) const;
3229   inline isl::pw_aff get_at(int index) const;
3230   inline isl::pw_aff_list clear() const;
3231   inline isl::pw_aff_list concat(isl::pw_aff_list list2) const;
3232   inline isl::pw_aff_list drop(unsigned int first, unsigned int n) const;
3233   inline stat foreach(const std::function<stat(isl::pw_aff)> &fn) const;
3234   inline isl::pw_aff_list insert(unsigned int pos, isl::pw_aff el) const;
3235   inline class size size() const;
3236 };
3237 
3238 // declarations for isl::pw_multi_aff
3239 inline pw_multi_aff manage(__isl_take isl_pw_multi_aff *ptr);
3240 inline pw_multi_aff manage_copy(__isl_keep isl_pw_multi_aff *ptr);
3241 
3242 class pw_multi_aff {
3243   friend inline pw_multi_aff manage(__isl_take isl_pw_multi_aff *ptr);
3244   friend inline pw_multi_aff manage_copy(__isl_keep isl_pw_multi_aff *ptr);
3245 
3246 protected:
3247   isl_pw_multi_aff *ptr = nullptr;
3248 
3249   inline explicit pw_multi_aff(__isl_take isl_pw_multi_aff *ptr);
3250 
3251 public:
3252   inline /* implicit */ pw_multi_aff();
3253   inline /* implicit */ pw_multi_aff(const pw_multi_aff &obj);
3254   inline /* implicit */ pw_multi_aff(isl::multi_aff ma);
3255   inline /* implicit */ pw_multi_aff(isl::pw_aff pa);
3256   inline explicit pw_multi_aff(isl::ctx ctx, const std::string &str);
3257   inline pw_multi_aff &operator=(pw_multi_aff obj);
3258   inline ~pw_multi_aff();
3259   inline __isl_give isl_pw_multi_aff *copy() const &;
3260   inline __isl_give isl_pw_multi_aff *copy() && = delete;
3261   inline __isl_keep isl_pw_multi_aff *get() const;
3262   inline __isl_give isl_pw_multi_aff *release();
3263   inline bool is_null() const;
3264   inline isl::ctx ctx() const;
3265 
3266   inline isl::multi_pw_aff add(const isl::multi_pw_aff &multi2) const;
3267   inline isl::multi_union_pw_aff add(const isl::multi_union_pw_aff &multi2) const;
3268   inline isl::pw_multi_aff add(isl::pw_multi_aff pma2) const;
3269   inline isl::union_pw_multi_aff add(const isl::union_pw_multi_aff &upma2) const;
3270   inline isl::pw_multi_aff add(const isl::multi_aff &pma2) const;
3271   inline isl::pw_multi_aff add(const isl::pw_aff &pma2) const;
3272   inline isl::pw_multi_aff add_constant(isl::multi_val mv) const;
3273   inline isl::pw_multi_aff add_constant(isl::val v) const;
3274   inline isl::pw_multi_aff add_constant(long v) const;
3275   inline isl::union_pw_multi_aff add_pw_multi_aff(const isl::pw_multi_aff &pma) const;
3276   inline isl::union_pw_multi_aff apply(const isl::union_pw_multi_aff &upma2) const;
3277   inline isl::map as_map() const;
3278   inline isl::multi_aff as_multi_aff() const;
3279   inline isl::multi_union_pw_aff as_multi_union_pw_aff() const;
3280   inline isl::pw_multi_aff as_pw_multi_aff() const;
3281   inline isl::set as_set() const;
3282   inline isl::union_map as_union_map() const;
3283   inline isl::pw_aff at(int pos) const;
3284   inline isl::pw_aff get_at(int pos) const;
3285   inline isl::set bind(const isl::multi_id &tuple) const;
3286   inline isl::pw_multi_aff bind_domain(isl::multi_id tuple) const;
3287   inline isl::pw_multi_aff bind_domain_wrapped_domain(isl::multi_id tuple) const;
3288   inline isl::pw_multi_aff coalesce() const;
3289   inline class size dim(isl::dim type) const;
3290   inline isl::set domain() const;
3291   static inline isl::pw_multi_aff domain_map(isl::space space);
3292   inline isl::pw_multi_aff drop_dims(isl::dim type, unsigned int first, unsigned int n) const;
3293   inline isl::pw_multi_aff extract_pw_multi_aff(const isl::space &space) const;
3294   inline isl::multi_pw_aff flat_range_product(const isl::multi_pw_aff &multi2) const;
3295   inline isl::multi_union_pw_aff flat_range_product(const isl::multi_union_pw_aff &multi2) const;
3296   inline isl::pw_multi_aff flat_range_product(isl::pw_multi_aff pma2) const;
3297   inline isl::union_pw_multi_aff flat_range_product(const isl::union_pw_multi_aff &upma2) const;
3298   inline isl::pw_multi_aff flat_range_product(const isl::multi_aff &pma2) const;
3299   inline isl::pw_multi_aff flat_range_product(const isl::pw_aff &pma2) const;
3300   inline stat foreach_piece(const std::function<stat(isl::set, isl::multi_aff)> &fn) const;
3301   static inline isl::pw_multi_aff from_map(isl::map map);
3302   inline isl::pw_multi_aff gist(isl::set set) const;
3303   inline isl::union_pw_multi_aff gist(const isl::union_set &context) const;
3304   inline isl::pw_multi_aff gist(const isl::basic_set &set) const;
3305   inline isl::pw_multi_aff gist(const isl::point &set) const;
3306   inline boolean has_range_tuple_id() const;
3307   inline isl::multi_pw_aff identity() const;
3308   static inline isl::pw_multi_aff identity_on_domain(isl::space space);
3309   inline isl::pw_multi_aff insert_domain(isl::space domain) const;
3310   inline isl::pw_multi_aff intersect_domain(isl::set set) const;
3311   inline isl::union_pw_multi_aff intersect_domain(const isl::space &space) const;
3312   inline isl::union_pw_multi_aff intersect_domain(const isl::union_set &uset) const;
3313   inline isl::pw_multi_aff intersect_domain(const isl::basic_set &set) const;
3314   inline isl::pw_multi_aff intersect_domain(const isl::point &set) const;
3315   inline isl::union_pw_multi_aff intersect_domain_wrapped_domain(const isl::union_set &uset) const;
3316   inline isl::union_pw_multi_aff intersect_domain_wrapped_range(const isl::union_set &uset) const;
3317   inline isl::pw_multi_aff intersect_params(isl::set set) const;
3318   inline boolean involves_locals() const;
3319   inline boolean involves_nan() const;
3320   inline boolean involves_param(const isl::id &id) const;
3321   inline boolean involves_param(const std::string &id) const;
3322   inline boolean involves_param(const isl::id_list &list) const;
3323   inline boolean isa_multi_aff() const;
3324   inline boolean isa_pw_multi_aff() const;
3325   inline isl::pw_aff_list list() const;
3326   inline isl::multi_pw_aff max(const isl::multi_pw_aff &multi2) const;
3327   inline isl::multi_val max_multi_val() const;
3328   inline isl::multi_pw_aff min(const isl::multi_pw_aff &multi2) const;
3329   inline isl::multi_val min_multi_val() const;
3330   static inline isl::pw_multi_aff multi_val_on_domain(isl::set domain, isl::multi_val mv);
3331   inline class size n_piece() const;
3332   inline isl::multi_pw_aff neg() const;
3333   inline boolean plain_is_empty() const;
3334   inline boolean plain_is_equal(const isl::multi_pw_aff &multi2) const;
3335   inline boolean plain_is_equal(const isl::multi_union_pw_aff &multi2) const;
3336   inline isl::pw_multi_aff preimage_domain_wrapped_domain(isl::pw_multi_aff pma2) const;
3337   inline isl::union_pw_multi_aff preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const;
3338   inline isl::pw_multi_aff preimage_domain_wrapped_domain(const isl::multi_aff &pma2) const;
3339   inline isl::pw_multi_aff preimage_domain_wrapped_domain(const isl::pw_aff &pma2) const;
3340   inline isl::multi_pw_aff product(const isl::multi_pw_aff &multi2) const;
3341   inline isl::pw_multi_aff product(isl::pw_multi_aff pma2) const;
3342   inline isl::pw_multi_aff product(const isl::multi_aff &pma2) const;
3343   inline isl::pw_multi_aff product(const isl::pw_aff &pma2) const;
3344   static inline isl::pw_multi_aff project_out_map(isl::space space, isl::dim type, unsigned int first, unsigned int n);
3345   inline isl::multi_pw_aff pullback(const isl::multi_pw_aff &mpa2) const;
3346   inline isl::pw_multi_aff pullback(isl::multi_aff ma) const;
3347   inline isl::pw_multi_aff pullback(isl::pw_multi_aff pma2) const;
3348   inline isl::union_pw_multi_aff pullback(const isl::union_pw_multi_aff &upma2) const;
3349   inline isl::pw_multi_aff_list pw_multi_aff_list() const;
3350   inline isl::pw_multi_aff range_factor_domain() const;
3351   inline isl::pw_multi_aff range_factor_range() const;
3352   static inline isl::pw_multi_aff range_map(isl::space space);
3353   inline isl::multi_pw_aff range_product(const isl::multi_pw_aff &multi2) const;
3354   inline isl::multi_union_pw_aff range_product(const isl::multi_union_pw_aff &multi2) const;
3355   inline isl::pw_multi_aff range_product(isl::pw_multi_aff pma2) const;
3356   inline isl::union_pw_multi_aff range_product(const isl::union_pw_multi_aff &upma2) const;
3357   inline isl::pw_multi_aff range_product(const isl::multi_aff &pma2) const;
3358   inline isl::pw_multi_aff range_product(const isl::pw_aff &pma2) const;
3359   inline isl::id range_tuple_id() const;
3360   inline isl::id get_range_tuple_id() const;
3361   inline isl::multi_pw_aff reset_range_tuple_id() const;
3362   inline isl::multi_pw_aff reset_tuple_id(isl::dim type) const;
3363   inline isl::multi_pw_aff scale(const isl::multi_val &mv) const;
3364   inline isl::pw_multi_aff scale(isl::val v) const;
3365   inline isl::pw_multi_aff scale(long v) const;
3366   inline isl::multi_pw_aff scale_down(const isl::multi_val &mv) const;
3367   inline isl::pw_multi_aff scale_down(isl::val v) const;
3368   inline isl::pw_multi_aff scale_down(long v) const;
3369   inline isl::multi_pw_aff set_at(int pos, const isl::pw_aff &el) const;
3370   inline isl::multi_union_pw_aff set_at(int pos, const isl::union_pw_aff &el) const;
3371   inline isl::multi_pw_aff set_pw_aff(int pos, const isl::pw_aff &el) const;
3372   inline isl::pw_multi_aff set_pw_aff(unsigned int pos, isl::pw_aff pa) const;
3373   inline isl::pw_multi_aff set_range_tuple(isl::id id) const;
3374   inline isl::pw_multi_aff set_range_tuple(const std::string &id) const;
3375   inline isl::multi_union_pw_aff set_union_pw_aff(int pos, const isl::union_pw_aff &el) const;
3376   inline class size size() const;
3377   inline isl::space space() const;
3378   inline isl::space get_space() const;
3379   inline isl::multi_pw_aff sub(const isl::multi_pw_aff &multi2) const;
3380   inline isl::multi_union_pw_aff sub(const isl::multi_union_pw_aff &multi2) const;
3381   inline isl::pw_multi_aff sub(isl::pw_multi_aff pma2) const;
3382   inline isl::union_pw_multi_aff sub(const isl::union_pw_multi_aff &upma2) const;
3383   inline isl::pw_multi_aff sub(const isl::multi_aff &pma2) const;
3384   inline isl::pw_multi_aff sub(const isl::pw_aff &pma2) const;
3385   inline isl::pw_multi_aff subtract_domain(isl::set set) const;
3386   inline isl::union_pw_multi_aff subtract_domain(const isl::space &space) const;
3387   inline isl::union_pw_multi_aff subtract_domain(const isl::union_set &uset) const;
3388   inline isl::pw_multi_aff subtract_domain(const isl::basic_set &set) const;
3389   inline isl::pw_multi_aff subtract_domain(const isl::point &set) const;
3390   inline isl::pw_multi_aff_list to_list() const;
3391   inline isl::multi_pw_aff to_multi_pw_aff() const;
3392   inline isl::union_pw_multi_aff to_union_pw_multi_aff() const;
3393   inline isl::id tuple_id(isl::dim type) const;
3394   inline isl::id get_tuple_id(isl::dim type) const;
3395   inline isl::multi_pw_aff unbind_params_insert_domain(const isl::multi_id &domain) const;
3396   inline isl::multi_pw_aff union_add(const isl::multi_pw_aff &mpa2) const;
3397   inline isl::multi_union_pw_aff union_add(const isl::multi_union_pw_aff &mupa2) const;
3398   inline isl::pw_multi_aff union_add(isl::pw_multi_aff pma2) const;
3399   inline isl::union_pw_multi_aff union_add(const isl::union_pw_multi_aff &upma2) const;
3400   inline isl::pw_multi_aff union_add(const isl::multi_aff &pma2) const;
3401   inline isl::pw_multi_aff union_add(const isl::pw_aff &pma2) const;
3402   static inline isl::pw_multi_aff zero(isl::space space);
3403 };
3404 
3405 // declarations for isl::pw_multi_aff_list
3406 inline pw_multi_aff_list manage(__isl_take isl_pw_multi_aff_list *ptr);
3407 inline pw_multi_aff_list manage_copy(__isl_keep isl_pw_multi_aff_list *ptr);
3408 
3409 class pw_multi_aff_list {
3410   friend inline pw_multi_aff_list manage(__isl_take isl_pw_multi_aff_list *ptr);
3411   friend inline pw_multi_aff_list manage_copy(__isl_keep isl_pw_multi_aff_list *ptr);
3412 
3413 protected:
3414   isl_pw_multi_aff_list *ptr = nullptr;
3415 
3416   inline explicit pw_multi_aff_list(__isl_take isl_pw_multi_aff_list *ptr);
3417 
3418 public:
3419   inline /* implicit */ pw_multi_aff_list();
3420   inline /* implicit */ pw_multi_aff_list(const pw_multi_aff_list &obj);
3421   inline explicit pw_multi_aff_list(isl::ctx ctx, int n);
3422   inline explicit pw_multi_aff_list(isl::pw_multi_aff el);
3423   inline explicit pw_multi_aff_list(isl::ctx ctx, const std::string &str);
3424   inline pw_multi_aff_list &operator=(pw_multi_aff_list obj);
3425   inline ~pw_multi_aff_list();
3426   inline __isl_give isl_pw_multi_aff_list *copy() const &;
3427   inline __isl_give isl_pw_multi_aff_list *copy() && = delete;
3428   inline __isl_keep isl_pw_multi_aff_list *get() const;
3429   inline __isl_give isl_pw_multi_aff_list *release();
3430   inline bool is_null() const;
3431   inline isl::ctx ctx() const;
3432 
3433   inline isl::pw_multi_aff_list add(isl::pw_multi_aff el) const;
3434   inline isl::pw_multi_aff at(int index) const;
3435   inline isl::pw_multi_aff get_at(int index) const;
3436   inline isl::pw_multi_aff_list clear() const;
3437   inline isl::pw_multi_aff_list concat(isl::pw_multi_aff_list list2) const;
3438   inline isl::pw_multi_aff_list drop(unsigned int first, unsigned int n) const;
3439   inline stat foreach(const std::function<stat(isl::pw_multi_aff)> &fn) const;
3440   inline isl::pw_multi_aff_list insert(unsigned int pos, isl::pw_multi_aff el) const;
3441   inline class size size() const;
3442 };
3443 
3444 // declarations for isl::schedule
3445 inline schedule manage(__isl_take isl_schedule *ptr);
3446 inline schedule manage_copy(__isl_keep isl_schedule *ptr);
3447 
3448 class schedule {
3449   friend inline schedule manage(__isl_take isl_schedule *ptr);
3450   friend inline schedule manage_copy(__isl_keep isl_schedule *ptr);
3451 
3452 protected:
3453   isl_schedule *ptr = nullptr;
3454 
3455   inline explicit schedule(__isl_take isl_schedule *ptr);
3456 
3457 public:
3458   inline /* implicit */ schedule();
3459   inline /* implicit */ schedule(const schedule &obj);
3460   inline explicit schedule(isl::ctx ctx, const std::string &str);
3461   inline schedule &operator=(schedule obj);
3462   inline ~schedule();
3463   inline __isl_give isl_schedule *copy() const &;
3464   inline __isl_give isl_schedule *copy() && = delete;
3465   inline __isl_keep isl_schedule *get() const;
3466   inline __isl_give isl_schedule *release();
3467   inline bool is_null() const;
3468   inline isl::ctx ctx() const;
3469 
3470   inline isl::schedule align_params(isl::space space) const;
3471   inline isl::union_set domain() const;
3472   inline isl::union_set get_domain() const;
3473   static inline isl::schedule from_domain(isl::union_set domain);
3474   inline isl::schedule gist_domain_params(isl::set context) const;
3475   inline isl::schedule insert_partial_schedule(isl::multi_union_pw_aff partial) const;
3476   inline isl::schedule intersect_domain(isl::union_set domain) const;
3477   inline isl::union_map map() const;
3478   inline isl::union_map get_map() const;
3479   inline isl::schedule pullback(isl::union_pw_multi_aff upma) const;
3480   inline isl::schedule_node root() const;
3481   inline isl::schedule_node get_root() const;
3482   inline isl::schedule sequence(isl::schedule schedule2) const;
3483 };
3484 
3485 // declarations for isl::schedule_constraints
3486 inline schedule_constraints manage(__isl_take isl_schedule_constraints *ptr);
3487 inline schedule_constraints manage_copy(__isl_keep isl_schedule_constraints *ptr);
3488 
3489 class schedule_constraints {
3490   friend inline schedule_constraints manage(__isl_take isl_schedule_constraints *ptr);
3491   friend inline schedule_constraints manage_copy(__isl_keep isl_schedule_constraints *ptr);
3492 
3493 protected:
3494   isl_schedule_constraints *ptr = nullptr;
3495 
3496   inline explicit schedule_constraints(__isl_take isl_schedule_constraints *ptr);
3497 
3498 public:
3499   inline /* implicit */ schedule_constraints();
3500   inline /* implicit */ schedule_constraints(const schedule_constraints &obj);
3501   inline explicit schedule_constraints(isl::ctx ctx, const std::string &str);
3502   inline schedule_constraints &operator=(schedule_constraints obj);
3503   inline ~schedule_constraints();
3504   inline __isl_give isl_schedule_constraints *copy() const &;
3505   inline __isl_give isl_schedule_constraints *copy() && = delete;
3506   inline __isl_keep isl_schedule_constraints *get() const;
3507   inline __isl_give isl_schedule_constraints *release();
3508   inline bool is_null() const;
3509   inline isl::ctx ctx() const;
3510 
3511   inline isl::union_map coincidence() const;
3512   inline isl::union_map get_coincidence() const;
3513   inline isl::schedule compute_schedule() const;
3514   inline isl::union_map conditional_validity() const;
3515   inline isl::union_map get_conditional_validity() const;
3516   inline isl::union_map conditional_validity_condition() const;
3517   inline isl::union_map get_conditional_validity_condition() const;
3518   inline isl::set context() const;
3519   inline isl::set get_context() const;
3520   inline isl::union_set domain() const;
3521   inline isl::union_set get_domain() const;
3522   static inline isl::schedule_constraints on_domain(isl::union_set domain);
3523   inline isl::union_map proximity() const;
3524   inline isl::union_map get_proximity() const;
3525   inline isl::schedule_constraints set_coincidence(isl::union_map coincidence) const;
3526   inline isl::schedule_constraints set_conditional_validity(isl::union_map condition, isl::union_map validity) const;
3527   inline isl::schedule_constraints set_context(isl::set context) const;
3528   inline isl::schedule_constraints set_proximity(isl::union_map proximity) const;
3529   inline isl::schedule_constraints set_validity(isl::union_map validity) const;
3530   inline isl::union_map validity() const;
3531   inline isl::union_map get_validity() const;
3532 };
3533 
3534 // declarations for isl::schedule_node
3535 inline schedule_node manage(__isl_take isl_schedule_node *ptr);
3536 inline schedule_node manage_copy(__isl_keep isl_schedule_node *ptr);
3537 
3538 class schedule_node {
3539   friend inline schedule_node manage(__isl_take isl_schedule_node *ptr);
3540   friend inline schedule_node manage_copy(__isl_keep isl_schedule_node *ptr);
3541 
3542 protected:
3543   isl_schedule_node *ptr = nullptr;
3544 
3545   inline explicit schedule_node(__isl_take isl_schedule_node *ptr);
3546 
3547 public:
3548   inline /* implicit */ schedule_node();
3549   inline /* implicit */ schedule_node(const schedule_node &obj);
3550   inline schedule_node &operator=(schedule_node obj);
3551   inline ~schedule_node();
3552   inline __isl_give isl_schedule_node *copy() const &;
3553   inline __isl_give isl_schedule_node *copy() && = delete;
3554   inline __isl_keep isl_schedule_node *get() const;
3555   inline __isl_give isl_schedule_node *release();
3556   inline bool is_null() const;
3557 private:
3558   template <typename T,
3559           typename = typename std::enable_if<std::is_same<
3560                   const decltype(isl_schedule_node_get_type(nullptr)),
3561                   const T>::value>::type>
3562   inline boolean isa_type(T subtype) const;
3563 public:
3564   template <class T> inline boolean isa() const;
3565   template <class T> inline T as() const;
3566   inline isl::ctx ctx() const;
3567 
3568   inline isl::schedule_node ancestor(int generation) const;
3569   inline class size ancestor_child_position(const isl::schedule_node &ancestor) const;
3570   inline class size get_ancestor_child_position(const isl::schedule_node &ancestor) const;
3571   inline isl::schedule_node child(int pos) const;
3572   inline class size child_position() const;
3573   inline class size get_child_position() const;
3574   inline isl::union_set domain() const;
3575   inline isl::union_set get_domain() const;
3576   inline boolean every_descendant(const std::function<boolean(isl::schedule_node)> &test) const;
3577   inline isl::schedule_node first_child() const;
3578   inline stat foreach_ancestor_top_down(const std::function<stat(isl::schedule_node)> &fn) const;
3579   inline stat foreach_descendant_top_down(const std::function<boolean(isl::schedule_node)> &fn) const;
3580   static inline isl::schedule_node from_domain(isl::union_set domain);
3581   static inline isl::schedule_node from_extension(isl::union_map extension);
3582   inline isl::schedule_node graft_after(isl::schedule_node graft) const;
3583   inline isl::schedule_node graft_before(isl::schedule_node graft) const;
3584   inline boolean has_children() const;
3585   inline boolean has_next_sibling() const;
3586   inline boolean has_parent() const;
3587   inline boolean has_previous_sibling() const;
3588   inline isl::schedule_node insert_context(isl::set context) const;
3589   inline isl::schedule_node insert_filter(isl::union_set filter) const;
3590   inline isl::schedule_node insert_guard(isl::set context) const;
3591   inline isl::schedule_node insert_mark(isl::id mark) const;
3592   inline isl::schedule_node insert_mark(const std::string &mark) const;
3593   inline isl::schedule_node insert_partial_schedule(isl::multi_union_pw_aff schedule) const;
3594   inline isl::schedule_node insert_sequence(isl::union_set_list filters) const;
3595   inline isl::schedule_node insert_set(isl::union_set_list filters) const;
3596   inline boolean is_equal(const isl::schedule_node &node2) const;
3597   inline boolean is_subtree_anchored() const;
3598   inline isl::schedule_node map_descendant_bottom_up(const std::function<isl::schedule_node(isl::schedule_node)> &fn) const;
3599   inline class size n_children() const;
3600   inline isl::schedule_node next_sibling() const;
3601   inline isl::schedule_node order_after(isl::union_set filter) const;
3602   inline isl::schedule_node order_before(isl::union_set filter) const;
3603   inline isl::schedule_node parent() const;
3604   inline isl::multi_union_pw_aff prefix_schedule_multi_union_pw_aff() const;
3605   inline isl::multi_union_pw_aff get_prefix_schedule_multi_union_pw_aff() const;
3606   inline isl::union_map prefix_schedule_relation() const;
3607   inline isl::union_map get_prefix_schedule_relation() const;
3608   inline isl::union_map prefix_schedule_union_map() const;
3609   inline isl::union_map get_prefix_schedule_union_map() const;
3610   inline isl::union_pw_multi_aff prefix_schedule_union_pw_multi_aff() const;
3611   inline isl::union_pw_multi_aff get_prefix_schedule_union_pw_multi_aff() const;
3612   inline isl::schedule_node previous_sibling() const;
3613   inline isl::schedule_node root() const;
3614   inline isl::schedule schedule() const;
3615   inline isl::schedule get_schedule() const;
3616   inline class size schedule_depth() const;
3617   inline class size get_schedule_depth() const;
3618   inline isl::schedule_node shared_ancestor(const isl::schedule_node &node2) const;
3619   inline isl::schedule_node get_shared_ancestor(const isl::schedule_node &node2) const;
3620   inline class size tree_depth() const;
3621   inline class size get_tree_depth() const;
3622   inline isl::union_set universe_domain() const;
3623   inline isl::union_set get_universe_domain() const;
3624 };
3625 
3626 // declarations for isl::schedule_node_band
3627 
3628 class schedule_node_band : public schedule_node {
3629   template <class T>
3630   friend boolean schedule_node::isa() const;
3631   friend schedule_node_band schedule_node::as<schedule_node_band>() const;
3632   static const auto type = isl_schedule_node_band;
3633 
3634 protected:
3635   inline explicit schedule_node_band(__isl_take isl_schedule_node *ptr);
3636 
3637 public:
3638   inline /* implicit */ schedule_node_band();
3639   inline /* implicit */ schedule_node_band(const schedule_node_band &obj);
3640   inline schedule_node_band &operator=(schedule_node_band obj);
3641   inline isl::ctx ctx() const;
3642 
3643   inline isl::union_set ast_build_options() const;
3644   inline isl::union_set get_ast_build_options() const;
3645   inline isl::set ast_isolate_option() const;
3646   inline isl::set get_ast_isolate_option() const;
3647   inline boolean member_get_coincident(int pos) const;
3648   inline schedule_node_band member_set_coincident(int pos, int coincident) const;
3649   inline schedule_node_band mod(isl::multi_val mv) const;
3650   inline class size n_member() const;
3651   inline isl::multi_union_pw_aff partial_schedule() const;
3652   inline isl::multi_union_pw_aff get_partial_schedule() const;
3653   inline boolean permutable() const;
3654   inline boolean get_permutable() const;
3655   inline schedule_node_band scale(isl::multi_val mv) const;
3656   inline schedule_node_band scale_down(isl::multi_val mv) const;
3657   inline schedule_node_band set_ast_build_options(isl::union_set options) const;
3658   inline schedule_node_band set_permutable(int permutable) const;
3659   inline schedule_node_band shift(isl::multi_union_pw_aff shift) const;
3660   inline schedule_node_band split(int pos) const;
3661   inline schedule_node_band tile(isl::multi_val sizes) const;
3662   inline schedule_node_band member_set_ast_loop_default(int pos) const;
3663   inline schedule_node_band member_set_ast_loop_atomic(int pos) const;
3664   inline schedule_node_band member_set_ast_loop_unroll(int pos) const;
3665   inline schedule_node_band member_set_ast_loop_separate(int pos) const;
3666 };
3667 
3668 // declarations for isl::schedule_node_context
3669 
3670 class schedule_node_context : public schedule_node {
3671   template <class T>
3672   friend boolean schedule_node::isa() const;
3673   friend schedule_node_context schedule_node::as<schedule_node_context>() const;
3674   static const auto type = isl_schedule_node_context;
3675 
3676 protected:
3677   inline explicit schedule_node_context(__isl_take isl_schedule_node *ptr);
3678 
3679 public:
3680   inline /* implicit */ schedule_node_context();
3681   inline /* implicit */ schedule_node_context(const schedule_node_context &obj);
3682   inline schedule_node_context &operator=(schedule_node_context obj);
3683   inline isl::ctx ctx() const;
3684 
3685   inline isl::set context() const;
3686   inline isl::set get_context() const;
3687 };
3688 
3689 // declarations for isl::schedule_node_domain
3690 
3691 class schedule_node_domain : public schedule_node {
3692   template <class T>
3693   friend boolean schedule_node::isa() const;
3694   friend schedule_node_domain schedule_node::as<schedule_node_domain>() const;
3695   static const auto type = isl_schedule_node_domain;
3696 
3697 protected:
3698   inline explicit schedule_node_domain(__isl_take isl_schedule_node *ptr);
3699 
3700 public:
3701   inline /* implicit */ schedule_node_domain();
3702   inline /* implicit */ schedule_node_domain(const schedule_node_domain &obj);
3703   inline schedule_node_domain &operator=(schedule_node_domain obj);
3704   inline isl::ctx ctx() const;
3705 
3706   inline isl::union_set domain() const;
3707   inline isl::union_set get_domain() const;
3708 };
3709 
3710 // declarations for isl::schedule_node_expansion
3711 
3712 class schedule_node_expansion : public schedule_node {
3713   template <class T>
3714   friend boolean schedule_node::isa() const;
3715   friend schedule_node_expansion schedule_node::as<schedule_node_expansion>() const;
3716   static const auto type = isl_schedule_node_expansion;
3717 
3718 protected:
3719   inline explicit schedule_node_expansion(__isl_take isl_schedule_node *ptr);
3720 
3721 public:
3722   inline /* implicit */ schedule_node_expansion();
3723   inline /* implicit */ schedule_node_expansion(const schedule_node_expansion &obj);
3724   inline schedule_node_expansion &operator=(schedule_node_expansion obj);
3725   inline isl::ctx ctx() const;
3726 
3727   inline isl::union_pw_multi_aff contraction() const;
3728   inline isl::union_pw_multi_aff get_contraction() const;
3729   inline isl::union_map expansion() const;
3730   inline isl::union_map get_expansion() const;
3731 };
3732 
3733 // declarations for isl::schedule_node_extension
3734 
3735 class schedule_node_extension : public schedule_node {
3736   template <class T>
3737   friend boolean schedule_node::isa() const;
3738   friend schedule_node_extension schedule_node::as<schedule_node_extension>() const;
3739   static const auto type = isl_schedule_node_extension;
3740 
3741 protected:
3742   inline explicit schedule_node_extension(__isl_take isl_schedule_node *ptr);
3743 
3744 public:
3745   inline /* implicit */ schedule_node_extension();
3746   inline /* implicit */ schedule_node_extension(const schedule_node_extension &obj);
3747   inline schedule_node_extension &operator=(schedule_node_extension obj);
3748   inline isl::ctx ctx() const;
3749 
3750   inline isl::union_map extension() const;
3751   inline isl::union_map get_extension() const;
3752 };
3753 
3754 // declarations for isl::schedule_node_filter
3755 
3756 class schedule_node_filter : public schedule_node {
3757   template <class T>
3758   friend boolean schedule_node::isa() const;
3759   friend schedule_node_filter schedule_node::as<schedule_node_filter>() const;
3760   static const auto type = isl_schedule_node_filter;
3761 
3762 protected:
3763   inline explicit schedule_node_filter(__isl_take isl_schedule_node *ptr);
3764 
3765 public:
3766   inline /* implicit */ schedule_node_filter();
3767   inline /* implicit */ schedule_node_filter(const schedule_node_filter &obj);
3768   inline schedule_node_filter &operator=(schedule_node_filter obj);
3769   inline isl::ctx ctx() const;
3770 
3771   inline isl::union_set filter() const;
3772   inline isl::union_set get_filter() const;
3773 };
3774 
3775 // declarations for isl::schedule_node_guard
3776 
3777 class schedule_node_guard : public schedule_node {
3778   template <class T>
3779   friend boolean schedule_node::isa() const;
3780   friend schedule_node_guard schedule_node::as<schedule_node_guard>() const;
3781   static const auto type = isl_schedule_node_guard;
3782 
3783 protected:
3784   inline explicit schedule_node_guard(__isl_take isl_schedule_node *ptr);
3785 
3786 public:
3787   inline /* implicit */ schedule_node_guard();
3788   inline /* implicit */ schedule_node_guard(const schedule_node_guard &obj);
3789   inline schedule_node_guard &operator=(schedule_node_guard obj);
3790   inline isl::ctx ctx() const;
3791 
3792   inline isl::set guard() const;
3793   inline isl::set get_guard() const;
3794 };
3795 
3796 // declarations for isl::schedule_node_leaf
3797 
3798 class schedule_node_leaf : public schedule_node {
3799   template <class T>
3800   friend boolean schedule_node::isa() const;
3801   friend schedule_node_leaf schedule_node::as<schedule_node_leaf>() const;
3802   static const auto type = isl_schedule_node_leaf;
3803 
3804 protected:
3805   inline explicit schedule_node_leaf(__isl_take isl_schedule_node *ptr);
3806 
3807 public:
3808   inline /* implicit */ schedule_node_leaf();
3809   inline /* implicit */ schedule_node_leaf(const schedule_node_leaf &obj);
3810   inline schedule_node_leaf &operator=(schedule_node_leaf obj);
3811   inline isl::ctx ctx() const;
3812 
3813 };
3814 
3815 // declarations for isl::schedule_node_mark
3816 
3817 class schedule_node_mark : public schedule_node {
3818   template <class T>
3819   friend boolean schedule_node::isa() const;
3820   friend schedule_node_mark schedule_node::as<schedule_node_mark>() const;
3821   static const auto type = isl_schedule_node_mark;
3822 
3823 protected:
3824   inline explicit schedule_node_mark(__isl_take isl_schedule_node *ptr);
3825 
3826 public:
3827   inline /* implicit */ schedule_node_mark();
3828   inline /* implicit */ schedule_node_mark(const schedule_node_mark &obj);
3829   inline schedule_node_mark &operator=(schedule_node_mark obj);
3830   inline isl::ctx ctx() const;
3831 
3832   inline isl::id id() const;
3833   inline isl::id get_id() const;
3834 };
3835 
3836 // declarations for isl::schedule_node_sequence
3837 
3838 class schedule_node_sequence : public schedule_node {
3839   template <class T>
3840   friend boolean schedule_node::isa() const;
3841   friend schedule_node_sequence schedule_node::as<schedule_node_sequence>() const;
3842   static const auto type = isl_schedule_node_sequence;
3843 
3844 protected:
3845   inline explicit schedule_node_sequence(__isl_take isl_schedule_node *ptr);
3846 
3847 public:
3848   inline /* implicit */ schedule_node_sequence();
3849   inline /* implicit */ schedule_node_sequence(const schedule_node_sequence &obj);
3850   inline schedule_node_sequence &operator=(schedule_node_sequence obj);
3851   inline isl::ctx ctx() const;
3852 
3853 };
3854 
3855 // declarations for isl::schedule_node_set
3856 
3857 class schedule_node_set : public schedule_node {
3858   template <class T>
3859   friend boolean schedule_node::isa() const;
3860   friend schedule_node_set schedule_node::as<schedule_node_set>() const;
3861   static const auto type = isl_schedule_node_set;
3862 
3863 protected:
3864   inline explicit schedule_node_set(__isl_take isl_schedule_node *ptr);
3865 
3866 public:
3867   inline /* implicit */ schedule_node_set();
3868   inline /* implicit */ schedule_node_set(const schedule_node_set &obj);
3869   inline schedule_node_set &operator=(schedule_node_set obj);
3870   inline isl::ctx ctx() const;
3871 
3872 };
3873 
3874 // declarations for isl::set
3875 inline set manage(__isl_take isl_set *ptr);
3876 inline set manage_copy(__isl_keep isl_set *ptr);
3877 
3878 class set {
3879   friend inline set manage(__isl_take isl_set *ptr);
3880   friend inline set manage_copy(__isl_keep isl_set *ptr);
3881 
3882 protected:
3883   isl_set *ptr = nullptr;
3884 
3885   inline explicit set(__isl_take isl_set *ptr);
3886 
3887 public:
3888   inline /* implicit */ set();
3889   inline /* implicit */ set(const set &obj);
3890   inline /* implicit */ set(isl::basic_set bset);
3891   inline /* implicit */ set(isl::point pnt);
3892   inline explicit set(isl::union_set uset);
3893   inline explicit set(isl::ctx ctx, const std::string &str);
3894   inline set &operator=(set obj);
3895   inline ~set();
3896   inline __isl_give isl_set *copy() const &;
3897   inline __isl_give isl_set *copy() && = delete;
3898   inline __isl_keep isl_set *get() const;
3899   inline __isl_give isl_set *release();
3900   inline bool is_null() const;
3901   inline isl::ctx ctx() const;
3902 
3903   inline isl::set add_constraint(isl::constraint constraint) const;
3904   inline isl::set add_dims(isl::dim type, unsigned int n) const;
3905   inline isl::basic_set affine_hull() const;
3906   inline isl::set align_params(isl::space model) const;
3907   inline isl::set apply(isl::map map) const;
3908   inline isl::union_set apply(const isl::union_map &umap) const;
3909   inline isl::set apply(const isl::basic_map &map) const;
3910   inline isl::pw_multi_aff as_pw_multi_aff() const;
3911   inline isl::set as_set() const;
3912   inline isl::basic_set_list basic_set_list() const;
3913   inline isl::basic_set_list get_basic_set_list() const;
3914   inline isl::set bind(isl::multi_id tuple) const;
3915   inline isl::set coalesce() const;
3916   inline isl::set complement() const;
3917   inline isl::union_set compute_divs() const;
3918   inline boolean contains(const isl::space &space) const;
3919   inline isl::basic_set convex_hull() const;
3920   inline isl::set detect_equalities() const;
3921   inline class size dim(isl::dim type) const;
3922   inline boolean dim_has_any_lower_bound(isl::dim type, unsigned int pos) const;
3923   inline isl::id dim_id(isl::dim type, unsigned int pos) const;
3924   inline isl::id get_dim_id(isl::dim type, unsigned int pos) const;
3925   inline isl::pw_aff dim_max(int pos) const;
3926   inline isl::val dim_max_val(int pos) const;
3927   inline isl::pw_aff dim_min(int pos) const;
3928   inline isl::val dim_min_val(int pos) const;
3929   inline std::string dim_name(isl::dim type, unsigned int pos) const;
3930   inline std::string get_dim_name(isl::dim type, unsigned int pos) const;
3931   inline isl::set drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const;
3932   inline isl::set eliminate(isl::dim type, unsigned int first, unsigned int n) const;
3933   static inline isl::set empty(isl::space space);
3934   inline boolean every_set(const std::function<boolean(isl::set)> &test) const;
3935   inline isl::set extract_set(const isl::space &space) const;
3936   inline int find_dim_by_id(isl::dim type, const isl::id &id) const;
3937   inline int find_dim_by_id(isl::dim type, const std::string &id) const;
3938   inline isl::set fix_si(isl::dim type, unsigned int pos, int value) const;
3939   inline isl::set flatten() const;
3940   inline stat foreach_basic_set(const std::function<stat(isl::basic_set)> &fn) const;
3941   inline stat foreach_point(const std::function<stat(isl::point)> &fn) const;
3942   inline stat foreach_set(const std::function<stat(isl::set)> &fn) const;
3943   inline isl::set gist(isl::set context) const;
3944   inline isl::union_set gist(const isl::union_set &context) const;
3945   inline isl::set gist(const isl::basic_set &context) const;
3946   inline isl::set gist(const isl::point &context) const;
3947   inline isl::set gist_params(isl::set context) const;
3948   inline boolean has_equal_space(const isl::set &set2) const;
3949   inline isl::map identity() const;
3950   inline isl::union_pw_multi_aff identity_union_pw_multi_aff() const;
3951   inline isl::pw_aff indicator_function() const;
3952   inline isl::set insert_dims(isl::dim type, unsigned int pos, unsigned int n) const;
3953   inline isl::map insert_domain(isl::space domain) const;
3954   inline isl::set intersect(isl::set set2) const;
3955   inline isl::union_set intersect(const isl::union_set &uset2) const;
3956   inline isl::set intersect(const isl::basic_set &set2) const;
3957   inline isl::set intersect(const isl::point &set2) const;
3958   inline isl::set intersect_params(isl::set params) const;
3959   inline boolean involves_dims(isl::dim type, unsigned int first, unsigned int n) const;
3960   inline boolean involves_locals() const;
3961   inline boolean is_bounded() const;
3962   inline boolean is_disjoint(const isl::set &set2) const;
3963   inline boolean is_disjoint(const isl::union_set &uset2) const;
3964   inline boolean is_disjoint(const isl::basic_set &set2) const;
3965   inline boolean is_disjoint(const isl::point &set2) const;
3966   inline boolean is_empty() const;
3967   inline boolean is_equal(const isl::set &set2) const;
3968   inline boolean is_equal(const isl::union_set &uset2) const;
3969   inline boolean is_equal(const isl::basic_set &set2) const;
3970   inline boolean is_equal(const isl::point &set2) const;
3971   inline boolean is_params() const;
3972   inline boolean is_singleton() const;
3973   inline boolean is_strict_subset(const isl::set &set2) const;
3974   inline boolean is_strict_subset(const isl::union_set &uset2) const;
3975   inline boolean is_strict_subset(const isl::basic_set &set2) const;
3976   inline boolean is_strict_subset(const isl::point &set2) const;
3977   inline boolean is_subset(const isl::set &set2) const;
3978   inline boolean is_subset(const isl::union_set &uset2) const;
3979   inline boolean is_subset(const isl::basic_set &set2) const;
3980   inline boolean is_subset(const isl::point &set2) const;
3981   inline boolean is_wrapping() const;
3982   inline boolean isa_set() const;
3983   inline isl::set lexmax() const;
3984   inline isl::pw_multi_aff lexmax_pw_multi_aff() const;
3985   inline isl::set lexmin() const;
3986   inline isl::pw_multi_aff lexmin_pw_multi_aff() const;
3987   inline isl::set lower_bound(isl::multi_pw_aff lower) const;
3988   inline isl::set lower_bound(isl::multi_val lower) const;
3989   inline isl::set lower_bound_si(isl::dim type, unsigned int pos, int value) const;
3990   inline isl::set lower_bound_val(isl::dim type, unsigned int pos, isl::val value) const;
3991   inline isl::set lower_bound_val(isl::dim type, unsigned int pos, long value) const;
3992   inline isl::multi_pw_aff max_multi_pw_aff() const;
3993   inline isl::val max_val(const isl::aff &obj) const;
3994   inline isl::multi_pw_aff min_multi_pw_aff() const;
3995   inline isl::val min_val(const isl::aff &obj) const;
3996   inline class size n_basic_set() const;
3997   inline isl::set params() const;
3998   inline isl::val plain_get_val_if_fixed(isl::dim type, unsigned int pos) const;
3999   inline isl::multi_val plain_multi_val_if_fixed() const;
4000   inline isl::multi_val get_plain_multi_val_if_fixed() const;
4001   inline isl::basic_set polyhedral_hull() const;
4002   inline isl::set preimage(isl::multi_aff ma) const;
4003   inline isl::set preimage(isl::multi_pw_aff mpa) const;
4004   inline isl::set preimage(isl::pw_multi_aff pma) const;
4005   inline isl::union_set preimage(const isl::union_pw_multi_aff &upma) const;
4006   inline isl::set product(isl::set set2) const;
4007   inline isl::set project_out(isl::dim type, unsigned int first, unsigned int n) const;
4008   inline isl::set project_out_all_params() const;
4009   inline isl::set project_out_param(isl::id id) const;
4010   inline isl::set project_out_param(const std::string &id) const;
4011   inline isl::set project_out_param(isl::id_list list) const;
4012   inline isl::pw_multi_aff pw_multi_aff_on_domain(isl::multi_val mv) const;
4013   inline isl::set remove_dims(isl::dim type, unsigned int first, unsigned int n) const;
4014   inline isl::set remove_divs() const;
4015   inline isl::set remove_redundancies() const;
4016   inline isl::set reset_tuple_id() const;
4017   inline isl::basic_set sample() const;
4018   inline isl::point sample_point() const;
4019   inline isl::set set_dim_id(isl::dim type, unsigned int pos, isl::id id) const;
4020   inline isl::set set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const;
4021   inline isl::set_list set_list() const;
4022   inline isl::set set_tuple_id(isl::id id) const;
4023   inline isl::set set_tuple_id(const std::string &id) const;
4024   inline isl::fixed_box simple_fixed_box_hull() const;
4025   inline isl::fixed_box get_simple_fixed_box_hull() const;
4026   inline isl::basic_set simple_hull() const;
4027   inline isl::space space() const;
4028   inline isl::space get_space() const;
4029   inline isl::val stride(int pos) const;
4030   inline isl::val get_stride(int pos) const;
4031   inline isl::set subtract(isl::set set2) const;
4032   inline isl::union_set subtract(const isl::union_set &uset2) const;
4033   inline isl::set subtract(const isl::basic_set &set2) const;
4034   inline isl::set subtract(const isl::point &set2) const;
4035   inline isl::set_list to_list() const;
4036   inline isl::union_set to_union_set() const;
4037   inline isl::map translation() const;
4038   inline class size tuple_dim() const;
4039   inline isl::id tuple_id() const;
4040   inline isl::id get_tuple_id() const;
4041   inline std::string tuple_name() const;
4042   inline std::string get_tuple_name() const;
4043   inline isl::set unbind_params(isl::multi_id tuple) const;
4044   inline isl::map unbind_params_insert_domain(isl::multi_id domain) const;
4045   inline isl::set unite(isl::set set2) const;
4046   inline isl::union_set unite(const isl::union_set &uset2) const;
4047   inline isl::set unite(const isl::basic_set &set2) const;
4048   inline isl::set unite(const isl::point &set2) const;
4049   static inline isl::set universe(isl::space space);
4050   inline isl::basic_set unshifted_simple_hull() const;
4051   inline isl::map unwrap() const;
4052   inline isl::set upper_bound(isl::multi_pw_aff upper) const;
4053   inline isl::set upper_bound(isl::multi_val upper) const;
4054   inline isl::set upper_bound_val(isl::dim type, unsigned int pos, isl::val value) const;
4055   inline isl::set upper_bound_val(isl::dim type, unsigned int pos, long value) const;
4056 };
4057 
4058 // declarations for isl::set_list
4059 inline set_list manage(__isl_take isl_set_list *ptr);
4060 inline set_list manage_copy(__isl_keep isl_set_list *ptr);
4061 
4062 class set_list {
4063   friend inline set_list manage(__isl_take isl_set_list *ptr);
4064   friend inline set_list manage_copy(__isl_keep isl_set_list *ptr);
4065 
4066 protected:
4067   isl_set_list *ptr = nullptr;
4068 
4069   inline explicit set_list(__isl_take isl_set_list *ptr);
4070 
4071 public:
4072   inline /* implicit */ set_list();
4073   inline /* implicit */ set_list(const set_list &obj);
4074   inline explicit set_list(isl::ctx ctx, int n);
4075   inline explicit set_list(isl::set el);
4076   inline explicit set_list(isl::ctx ctx, const std::string &str);
4077   inline set_list &operator=(set_list obj);
4078   inline ~set_list();
4079   inline __isl_give isl_set_list *copy() const &;
4080   inline __isl_give isl_set_list *copy() && = delete;
4081   inline __isl_keep isl_set_list *get() const;
4082   inline __isl_give isl_set_list *release();
4083   inline bool is_null() const;
4084   inline isl::ctx ctx() const;
4085 
4086   inline isl::set_list add(isl::set el) const;
4087   inline isl::set at(int index) const;
4088   inline isl::set get_at(int index) const;
4089   inline isl::set_list clear() const;
4090   inline isl::set_list concat(isl::set_list list2) const;
4091   inline isl::set_list drop(unsigned int first, unsigned int n) const;
4092   inline stat foreach(const std::function<stat(isl::set)> &fn) const;
4093   inline isl::set_list insert(unsigned int pos, isl::set el) const;
4094   inline class size size() const;
4095 };
4096 
4097 // declarations for isl::space
4098 inline space manage(__isl_take isl_space *ptr);
4099 inline space manage_copy(__isl_keep isl_space *ptr);
4100 
4101 class space {
4102   friend inline space manage(__isl_take isl_space *ptr);
4103   friend inline space manage_copy(__isl_keep isl_space *ptr);
4104 
4105 protected:
4106   isl_space *ptr = nullptr;
4107 
4108   inline explicit space(__isl_take isl_space *ptr);
4109 
4110 public:
4111   inline /* implicit */ space();
4112   inline /* implicit */ space(const space &obj);
4113   inline explicit space(isl::ctx ctx, unsigned int nparam, unsigned int n_in, unsigned int n_out);
4114   inline explicit space(isl::ctx ctx, unsigned int nparam, unsigned int dim);
4115   inline space &operator=(space obj);
4116   inline ~space();
4117   inline __isl_give isl_space *copy() const &;
4118   inline __isl_give isl_space *copy() && = delete;
4119   inline __isl_keep isl_space *get() const;
4120   inline __isl_give isl_space *release();
4121   inline bool is_null() const;
4122   inline isl::ctx ctx() const;
4123 
4124   inline isl::space add_dims(isl::dim type, unsigned int n) const;
4125   inline isl::space add_named_tuple(isl::id tuple_id, unsigned int dim) const;
4126   inline isl::space add_named_tuple(const std::string &tuple_id, unsigned int dim) const;
4127   inline isl::space add_param(isl::id id) const;
4128   inline isl::space add_param(const std::string &id) const;
4129   inline isl::space add_unnamed_tuple(unsigned int dim) const;
4130   inline isl::space align_params(isl::space space2) const;
4131   inline isl::space curry() const;
4132   inline class size dim(isl::dim type) const;
4133   inline isl::id dim_id(isl::dim type, unsigned int pos) const;
4134   inline isl::id get_dim_id(isl::dim type, unsigned int pos) const;
4135   inline isl::space domain() const;
4136   inline isl::multi_aff domain_map_multi_aff() const;
4137   inline isl::pw_multi_aff domain_map_pw_multi_aff() const;
4138   inline isl::id domain_tuple_id() const;
4139   inline isl::id get_domain_tuple_id() const;
4140   inline isl::space drop_dims(isl::dim type, unsigned int first, unsigned int num) const;
4141   inline int find_dim_by_id(isl::dim type, const isl::id &id) const;
4142   inline int find_dim_by_id(isl::dim type, const std::string &id) const;
4143   inline isl::space flatten_domain() const;
4144   inline isl::space flatten_range() const;
4145   inline boolean has_domain_tuple_id() const;
4146   inline boolean has_equal_tuples(const isl::space &space2) const;
4147   inline boolean has_range_tuple_id() const;
4148   inline boolean has_tuple_id(isl::dim type) const;
4149   inline boolean has_tuple_name(isl::dim type) const;
4150   inline isl::multi_aff identity_multi_aff_on_domain() const;
4151   inline isl::multi_pw_aff identity_multi_pw_aff_on_domain() const;
4152   inline isl::pw_multi_aff identity_pw_multi_aff_on_domain() const;
4153   inline boolean is_equal(const isl::space &space2) const;
4154   inline boolean is_params() const;
4155   inline boolean is_set() const;
4156   inline boolean is_wrapping() const;
4157   inline isl::space map_from_domain_and_range(isl::space range) const;
4158   inline isl::space map_from_set() const;
4159   inline isl::multi_aff multi_aff(isl::aff_list list) const;
4160   inline isl::multi_aff multi_aff_on_domain(isl::multi_val mv) const;
4161   inline isl::multi_id multi_id(isl::id_list list) const;
4162   inline isl::multi_pw_aff multi_pw_aff(isl::pw_aff_list list) const;
4163   inline isl::multi_union_pw_aff multi_union_pw_aff(isl::union_pw_aff_list list) const;
4164   inline isl::multi_val multi_val(isl::val_list list) const;
4165   inline isl::aff param_aff_on_domain(isl::id id) const;
4166   inline isl::aff param_aff_on_domain(const std::string &id) const;
4167   inline isl::space params() const;
4168   static inline isl::space params_alloc(isl::ctx ctx, unsigned int nparam);
4169   inline isl::space product(isl::space right) const;
4170   inline isl::space range() const;
4171   inline isl::multi_aff range_map_multi_aff() const;
4172   inline isl::pw_multi_aff range_map_pw_multi_aff() const;
4173   inline isl::space range_reverse() const;
4174   inline isl::id range_tuple_id() const;
4175   inline isl::id get_range_tuple_id() const;
4176   inline isl::space reverse() const;
4177   inline isl::space set_dim_id(isl::dim type, unsigned int pos, isl::id id) const;
4178   inline isl::space set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const;
4179   inline isl::space set_domain_tuple(isl::id id) const;
4180   inline isl::space set_domain_tuple(const std::string &id) const;
4181   inline isl::space set_from_params() const;
4182   inline isl::space set_range_tuple(isl::id id) const;
4183   inline isl::space set_range_tuple(const std::string &id) const;
4184   inline isl::space set_tuple_id(isl::dim type, isl::id id) const;
4185   inline isl::space set_tuple_id(isl::dim type, const std::string &id) const;
4186   inline isl::id tuple_id(isl::dim type) const;
4187   inline isl::id get_tuple_id(isl::dim type) const;
4188   inline std::string tuple_name(isl::dim type) const;
4189   inline std::string get_tuple_name(isl::dim type) const;
4190   inline isl::space uncurry() const;
4191   static inline isl::space unit(isl::ctx ctx);
4192   inline isl::map universe_map() const;
4193   inline isl::set universe_set() const;
4194   inline isl::space unwrap() const;
4195   inline isl::space wrap() const;
4196   inline isl::aff zero_aff_on_domain() const;
4197   inline isl::multi_aff zero_multi_aff() const;
4198   inline isl::multi_pw_aff zero_multi_pw_aff() const;
4199   inline isl::multi_union_pw_aff zero_multi_union_pw_aff() const;
4200   inline isl::multi_val zero_multi_val() const;
4201 };
4202 
4203 // declarations for isl::union_access_info
4204 inline union_access_info manage(__isl_take isl_union_access_info *ptr);
4205 inline union_access_info manage_copy(__isl_keep isl_union_access_info *ptr);
4206 
4207 class union_access_info {
4208   friend inline union_access_info manage(__isl_take isl_union_access_info *ptr);
4209   friend inline union_access_info manage_copy(__isl_keep isl_union_access_info *ptr);
4210 
4211 protected:
4212   isl_union_access_info *ptr = nullptr;
4213 
4214   inline explicit union_access_info(__isl_take isl_union_access_info *ptr);
4215 
4216 public:
4217   inline /* implicit */ union_access_info();
4218   inline /* implicit */ union_access_info(const union_access_info &obj);
4219   inline explicit union_access_info(isl::union_map sink);
4220   inline union_access_info &operator=(union_access_info obj);
4221   inline ~union_access_info();
4222   inline __isl_give isl_union_access_info *copy() const &;
4223   inline __isl_give isl_union_access_info *copy() && = delete;
4224   inline __isl_keep isl_union_access_info *get() const;
4225   inline __isl_give isl_union_access_info *release();
4226   inline bool is_null() const;
4227   inline isl::ctx ctx() const;
4228 
4229   inline isl::union_flow compute_flow() const;
4230   inline isl::union_access_info set_kill(isl::union_map kill) const;
4231   inline isl::union_access_info set_may_source(isl::union_map may_source) const;
4232   inline isl::union_access_info set_must_source(isl::union_map must_source) const;
4233   inline isl::union_access_info set_schedule(isl::schedule schedule) const;
4234   inline isl::union_access_info set_schedule_map(isl::union_map schedule_map) const;
4235 };
4236 
4237 // declarations for isl::union_flow
4238 inline union_flow manage(__isl_take isl_union_flow *ptr);
4239 inline union_flow manage_copy(__isl_keep isl_union_flow *ptr);
4240 
4241 class union_flow {
4242   friend inline union_flow manage(__isl_take isl_union_flow *ptr);
4243   friend inline union_flow manage_copy(__isl_keep isl_union_flow *ptr);
4244 
4245 protected:
4246   isl_union_flow *ptr = nullptr;
4247 
4248   inline explicit union_flow(__isl_take isl_union_flow *ptr);
4249 
4250 public:
4251   inline /* implicit */ union_flow();
4252   inline /* implicit */ union_flow(const union_flow &obj);
4253   inline union_flow &operator=(union_flow obj);
4254   inline ~union_flow();
4255   inline __isl_give isl_union_flow *copy() const &;
4256   inline __isl_give isl_union_flow *copy() && = delete;
4257   inline __isl_keep isl_union_flow *get() const;
4258   inline __isl_give isl_union_flow *release();
4259   inline bool is_null() const;
4260   inline isl::ctx ctx() const;
4261 
4262   inline isl::union_map full_may_dependence() const;
4263   inline isl::union_map get_full_may_dependence() const;
4264   inline isl::union_map full_must_dependence() const;
4265   inline isl::union_map get_full_must_dependence() const;
4266   inline isl::union_map may_dependence() const;
4267   inline isl::union_map get_may_dependence() const;
4268   inline isl::union_map may_no_source() const;
4269   inline isl::union_map get_may_no_source() const;
4270   inline isl::union_map must_dependence() const;
4271   inline isl::union_map get_must_dependence() const;
4272   inline isl::union_map must_no_source() const;
4273   inline isl::union_map get_must_no_source() const;
4274 };
4275 
4276 // declarations for isl::union_map
4277 inline union_map manage(__isl_take isl_union_map *ptr);
4278 inline union_map manage_copy(__isl_keep isl_union_map *ptr);
4279 
4280 class union_map {
4281   friend inline union_map manage(__isl_take isl_union_map *ptr);
4282   friend inline union_map manage_copy(__isl_keep isl_union_map *ptr);
4283 
4284 protected:
4285   isl_union_map *ptr = nullptr;
4286 
4287   inline explicit union_map(__isl_take isl_union_map *ptr);
4288 
4289 public:
4290   inline /* implicit */ union_map();
4291   inline /* implicit */ union_map(const union_map &obj);
4292   inline /* implicit */ union_map(isl::basic_map bmap);
4293   inline /* implicit */ union_map(isl::map map);
4294   inline explicit union_map(isl::ctx ctx, const std::string &str);
4295   inline union_map &operator=(union_map obj);
4296   inline ~union_map();
4297   inline __isl_give isl_union_map *copy() const &;
4298   inline __isl_give isl_union_map *copy() && = delete;
4299   inline __isl_keep isl_union_map *get() const;
4300   inline __isl_give isl_union_map *release();
4301   inline bool is_null() const;
4302   inline isl::ctx ctx() const;
4303 
4304   inline isl::union_map affine_hull() const;
4305   inline isl::union_map apply_domain(isl::union_map umap2) const;
4306   inline isl::union_map apply_range(isl::union_map umap2) const;
4307   inline isl::map as_map() const;
4308   inline isl::multi_union_pw_aff as_multi_union_pw_aff() const;
4309   inline isl::union_pw_multi_aff as_union_pw_multi_aff() const;
4310   inline isl::union_set bind_range(isl::multi_id tuple) const;
4311   inline isl::union_map coalesce() const;
4312   inline isl::union_map compute_divs() const;
4313   inline isl::union_map curry() const;
4314   inline isl::union_set deltas() const;
4315   inline isl::union_map detect_equalities() const;
4316   inline isl::union_set domain() const;
4317   inline isl::union_map domain_factor_domain() const;
4318   inline isl::union_map domain_factor_range() const;
4319   inline isl::union_map domain_map() const;
4320   inline isl::union_pw_multi_aff domain_map_union_pw_multi_aff() const;
4321   inline isl::union_map domain_product(isl::union_map umap2) const;
4322   static inline isl::union_map empty(isl::ctx ctx);
4323   inline isl::union_map eq_at(isl::multi_union_pw_aff mupa) const;
4324   inline boolean every_map(const std::function<boolean(isl::map)> &test) const;
4325   inline isl::map extract_map(isl::space space) const;
4326   inline isl::union_map factor_domain() const;
4327   inline isl::union_map factor_range() const;
4328   inline isl::union_map fixed_power(isl::val exp) const;
4329   inline isl::union_map fixed_power(long exp) const;
4330   inline isl::union_map flat_range_product(isl::union_map umap2) const;
4331   inline stat foreach_map(const std::function<stat(isl::map)> &fn) const;
4332   static inline isl::union_map from(isl::multi_union_pw_aff mupa);
4333   static inline isl::union_map from(isl::union_pw_multi_aff upma);
4334   static inline isl::union_map from_domain(isl::union_set uset);
4335   static inline isl::union_map from_domain_and_range(isl::union_set domain, isl::union_set range);
4336   static inline isl::union_map from_range(isl::union_set uset);
4337   inline isl::union_map gist(isl::union_map context) const;
4338   inline isl::union_map gist_domain(isl::union_set uset) const;
4339   inline isl::union_map gist_params(isl::set set) const;
4340   inline isl::union_map gist_range(isl::union_set uset) const;
4341   inline isl::union_map intersect(isl::union_map umap2) const;
4342   inline isl::union_map intersect_domain(isl::space space) const;
4343   inline isl::union_map intersect_domain(isl::union_set uset) const;
4344   inline isl::union_map intersect_domain_factor_domain(isl::union_map factor) const;
4345   inline isl::union_map intersect_domain_factor_range(isl::union_map factor) const;
4346   inline isl::union_map intersect_params(isl::set set) const;
4347   inline isl::union_map intersect_range(isl::space space) const;
4348   inline isl::union_map intersect_range(isl::union_set uset) const;
4349   inline isl::union_map intersect_range_factor_domain(isl::union_map factor) const;
4350   inline isl::union_map intersect_range_factor_range(isl::union_map factor) const;
4351   inline boolean is_bijective() const;
4352   inline boolean is_disjoint(const isl::union_map &umap2) const;
4353   inline boolean is_empty() const;
4354   inline boolean is_equal(const isl::union_map &umap2) const;
4355   inline boolean is_injective() const;
4356   inline boolean is_single_valued() const;
4357   inline boolean is_strict_subset(const isl::union_map &umap2) const;
4358   inline boolean is_subset(const isl::union_map &umap2) const;
4359   inline boolean isa_map() const;
4360   inline isl::union_map lexmax() const;
4361   inline isl::union_map lexmin() const;
4362   inline isl::map_list map_list() const;
4363   inline isl::map_list get_map_list() const;
4364   inline isl::set params() const;
4365   inline isl::union_map polyhedral_hull() const;
4366   inline isl::union_map preimage_domain(isl::multi_aff ma) const;
4367   inline isl::union_map preimage_domain(isl::multi_pw_aff mpa) const;
4368   inline isl::union_map preimage_domain(isl::pw_multi_aff pma) const;
4369   inline isl::union_map preimage_domain(isl::union_pw_multi_aff upma) const;
4370   inline isl::union_map preimage_range(isl::multi_aff ma) const;
4371   inline isl::union_map preimage_range(isl::pw_multi_aff pma) const;
4372   inline isl::union_map preimage_range(isl::union_pw_multi_aff upma) const;
4373   inline isl::union_map product(isl::union_map umap2) const;
4374   inline isl::union_map project_out_all_params() const;
4375   inline isl::union_set range() const;
4376   inline isl::union_map range_factor_domain() const;
4377   inline isl::union_map range_factor_range() const;
4378   inline isl::union_map range_map() const;
4379   inline isl::union_map range_product(isl::union_map umap2) const;
4380   inline isl::union_map range_reverse() const;
4381   inline isl::union_map reverse() const;
4382   inline isl::space space() const;
4383   inline isl::space get_space() const;
4384   inline isl::union_map subtract(isl::union_map umap2) const;
4385   inline isl::union_map subtract_domain(isl::union_set dom) const;
4386   inline isl::union_map subtract_range(isl::union_set dom) const;
4387   inline isl::union_map uncurry() const;
4388   inline isl::union_map unite(isl::union_map umap2) const;
4389   inline isl::union_map universe() const;
4390   inline isl::union_set wrap() const;
4391   inline isl::union_map zip() const;
4392 };
4393 
4394 // declarations for isl::union_pw_aff
4395 inline union_pw_aff manage(__isl_take isl_union_pw_aff *ptr);
4396 inline union_pw_aff manage_copy(__isl_keep isl_union_pw_aff *ptr);
4397 
4398 class union_pw_aff {
4399   friend inline union_pw_aff manage(__isl_take isl_union_pw_aff *ptr);
4400   friend inline union_pw_aff manage_copy(__isl_keep isl_union_pw_aff *ptr);
4401 
4402 protected:
4403   isl_union_pw_aff *ptr = nullptr;
4404 
4405   inline explicit union_pw_aff(__isl_take isl_union_pw_aff *ptr);
4406 
4407 public:
4408   inline /* implicit */ union_pw_aff();
4409   inline /* implicit */ union_pw_aff(const union_pw_aff &obj);
4410   inline /* implicit */ union_pw_aff(isl::aff aff);
4411   inline /* implicit */ union_pw_aff(isl::pw_aff pa);
4412   inline explicit union_pw_aff(isl::ctx ctx, const std::string &str);
4413   inline explicit union_pw_aff(isl::union_set domain, isl::val v);
4414   inline union_pw_aff &operator=(union_pw_aff obj);
4415   inline ~union_pw_aff();
4416   inline __isl_give isl_union_pw_aff *copy() const &;
4417   inline __isl_give isl_union_pw_aff *copy() && = delete;
4418   inline __isl_keep isl_union_pw_aff *get() const;
4419   inline __isl_give isl_union_pw_aff *release();
4420   inline bool is_null() const;
4421   inline isl::ctx ctx() const;
4422 
4423   inline isl::multi_union_pw_aff add(const isl::multi_union_pw_aff &multi2) const;
4424   inline isl::union_pw_aff add(isl::union_pw_aff upa2) const;
4425   inline isl::union_pw_multi_aff add(const isl::union_pw_multi_aff &upma2) const;
4426   inline isl::union_pw_aff add(const isl::aff &upa2) const;
4427   inline isl::union_pw_aff add(const isl::pw_aff &upa2) const;
4428   inline isl::union_pw_multi_aff add_pw_multi_aff(const isl::pw_multi_aff &pma) const;
4429   inline isl::union_pw_multi_aff apply(const isl::union_pw_multi_aff &upma2) const;
4430   inline isl::multi_union_pw_aff as_multi_union_pw_aff() const;
4431   inline isl::pw_multi_aff as_pw_multi_aff() const;
4432   inline isl::union_map as_union_map() const;
4433   inline isl::union_pw_aff at(int pos) const;
4434   inline isl::union_set bind(const isl::multi_id &tuple) const;
4435   inline isl::union_set bind(isl::id id) const;
4436   inline isl::union_set bind(const std::string &id) const;
4437   inline isl::union_pw_aff coalesce() const;
4438   inline class size dim(isl::dim type) const;
4439   inline isl::union_set domain() const;
4440   static inline isl::union_pw_aff empty(isl::space space);
4441   inline isl::pw_multi_aff extract_pw_multi_aff(const isl::space &space) const;
4442   inline isl::multi_union_pw_aff flat_range_product(const isl::multi_union_pw_aff &multi2) const;
4443   inline isl::union_pw_multi_aff flat_range_product(const isl::union_pw_multi_aff &upma2) const;
4444   inline stat foreach_pw_aff(const std::function<stat(isl::pw_aff)> &fn) const;
4445   inline isl::union_pw_aff gist(isl::union_set context) const;
4446   inline boolean has_range_tuple_id() const;
4447   inline isl::union_pw_aff intersect_domain(isl::space space) const;
4448   inline isl::union_pw_aff intersect_domain(isl::union_set uset) const;
4449   inline isl::union_pw_aff intersect_domain_wrapped_domain(isl::union_set uset) const;
4450   inline isl::union_pw_aff intersect_domain_wrapped_range(isl::union_set uset) const;
4451   inline isl::union_pw_aff intersect_params(isl::set set) const;
4452   inline boolean involves_locals() const;
4453   inline boolean involves_nan() const;
4454   inline boolean isa_pw_multi_aff() const;
4455   inline isl::union_pw_aff_list list() const;
4456   inline isl::multi_union_pw_aff neg() const;
4457   inline boolean plain_is_empty() const;
4458   inline boolean plain_is_equal(const isl::multi_union_pw_aff &multi2) const;
4459   inline isl::union_pw_multi_aff preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const;
4460   inline isl::union_pw_aff pullback(isl::union_pw_multi_aff upma) const;
4461   inline isl::pw_multi_aff_list pw_multi_aff_list() const;
4462   inline isl::union_pw_multi_aff range_factor_domain() const;
4463   inline isl::union_pw_multi_aff range_factor_range() const;
4464   inline isl::multi_union_pw_aff range_product(const isl::multi_union_pw_aff &multi2) const;
4465   inline isl::union_pw_multi_aff range_product(const isl::union_pw_multi_aff &upma2) const;
4466   inline isl::id range_tuple_id() const;
4467   inline isl::multi_union_pw_aff reset_range_tuple_id() const;
4468   inline isl::multi_union_pw_aff reset_tuple_id(isl::dim type) const;
4469   inline isl::multi_union_pw_aff scale(const isl::multi_val &mv) const;
4470   inline isl::multi_union_pw_aff scale(const isl::val &v) const;
4471   inline isl::multi_union_pw_aff scale(long v) const;
4472   inline isl::multi_union_pw_aff scale_down(const isl::multi_val &mv) const;
4473   inline isl::multi_union_pw_aff scale_down(const isl::val &v) const;
4474   inline isl::multi_union_pw_aff scale_down(long v) const;
4475   inline isl::multi_union_pw_aff set_at(int pos, const isl::union_pw_aff &el) const;
4476   inline isl::multi_union_pw_aff set_range_tuple(const isl::id &id) const;
4477   inline isl::multi_union_pw_aff set_range_tuple(const std::string &id) const;
4478   inline isl::multi_union_pw_aff set_union_pw_aff(int pos, const isl::union_pw_aff &el) const;
4479   inline class size size() const;
4480   inline isl::space space() const;
4481   inline isl::space get_space() const;
4482   inline isl::multi_union_pw_aff sub(const isl::multi_union_pw_aff &multi2) const;
4483   inline isl::union_pw_aff sub(isl::union_pw_aff upa2) const;
4484   inline isl::union_pw_multi_aff sub(const isl::union_pw_multi_aff &upma2) const;
4485   inline isl::union_pw_aff sub(const isl::aff &upa2) const;
4486   inline isl::union_pw_aff sub(const isl::pw_aff &upa2) const;
4487   inline isl::union_pw_aff subtract_domain(isl::space space) const;
4488   inline isl::union_pw_aff subtract_domain(isl::union_set uset) const;
4489   inline isl::union_pw_aff_list to_list() const;
4490   inline isl::multi_union_pw_aff union_add(const isl::multi_union_pw_aff &mupa2) const;
4491   inline isl::union_pw_aff union_add(isl::union_pw_aff upa2) const;
4492   inline isl::union_pw_multi_aff union_add(const isl::union_pw_multi_aff &upma2) const;
4493   inline isl::union_pw_aff union_add(const isl::aff &upa2) const;
4494   inline isl::union_pw_aff union_add(const isl::pw_aff &upa2) const;
4495 };
4496 
4497 // declarations for isl::union_pw_aff_list
4498 inline union_pw_aff_list manage(__isl_take isl_union_pw_aff_list *ptr);
4499 inline union_pw_aff_list manage_copy(__isl_keep isl_union_pw_aff_list *ptr);
4500 
4501 class union_pw_aff_list {
4502   friend inline union_pw_aff_list manage(__isl_take isl_union_pw_aff_list *ptr);
4503   friend inline union_pw_aff_list manage_copy(__isl_keep isl_union_pw_aff_list *ptr);
4504 
4505 protected:
4506   isl_union_pw_aff_list *ptr = nullptr;
4507 
4508   inline explicit union_pw_aff_list(__isl_take isl_union_pw_aff_list *ptr);
4509 
4510 public:
4511   inline /* implicit */ union_pw_aff_list();
4512   inline /* implicit */ union_pw_aff_list(const union_pw_aff_list &obj);
4513   inline explicit union_pw_aff_list(isl::ctx ctx, int n);
4514   inline explicit union_pw_aff_list(isl::union_pw_aff el);
4515   inline explicit union_pw_aff_list(isl::ctx ctx, const std::string &str);
4516   inline union_pw_aff_list &operator=(union_pw_aff_list obj);
4517   inline ~union_pw_aff_list();
4518   inline __isl_give isl_union_pw_aff_list *copy() const &;
4519   inline __isl_give isl_union_pw_aff_list *copy() && = delete;
4520   inline __isl_keep isl_union_pw_aff_list *get() const;
4521   inline __isl_give isl_union_pw_aff_list *release();
4522   inline bool is_null() const;
4523   inline isl::ctx ctx() const;
4524 
4525   inline isl::union_pw_aff_list add(isl::union_pw_aff el) const;
4526   inline isl::union_pw_aff at(int index) const;
4527   inline isl::union_pw_aff get_at(int index) const;
4528   inline isl::union_pw_aff_list clear() const;
4529   inline isl::union_pw_aff_list concat(isl::union_pw_aff_list list2) const;
4530   inline isl::union_pw_aff_list drop(unsigned int first, unsigned int n) const;
4531   inline stat foreach(const std::function<stat(isl::union_pw_aff)> &fn) const;
4532   inline isl::union_pw_aff_list insert(unsigned int pos, isl::union_pw_aff el) const;
4533   inline class size size() const;
4534 };
4535 
4536 // declarations for isl::union_pw_multi_aff
4537 inline union_pw_multi_aff manage(__isl_take isl_union_pw_multi_aff *ptr);
4538 inline union_pw_multi_aff manage_copy(__isl_keep isl_union_pw_multi_aff *ptr);
4539 
4540 class union_pw_multi_aff {
4541   friend inline union_pw_multi_aff manage(__isl_take isl_union_pw_multi_aff *ptr);
4542   friend inline union_pw_multi_aff manage_copy(__isl_keep isl_union_pw_multi_aff *ptr);
4543 
4544 protected:
4545   isl_union_pw_multi_aff *ptr = nullptr;
4546 
4547   inline explicit union_pw_multi_aff(__isl_take isl_union_pw_multi_aff *ptr);
4548 
4549 public:
4550   inline /* implicit */ union_pw_multi_aff();
4551   inline /* implicit */ union_pw_multi_aff(const union_pw_multi_aff &obj);
4552   inline explicit union_pw_multi_aff(isl::union_set uset);
4553   inline /* implicit */ union_pw_multi_aff(isl::multi_aff ma);
4554   inline /* implicit */ union_pw_multi_aff(isl::pw_multi_aff pma);
4555   inline explicit union_pw_multi_aff(isl::union_map umap);
4556   inline /* implicit */ union_pw_multi_aff(isl::union_pw_aff upa);
4557   inline explicit union_pw_multi_aff(isl::ctx ctx, const std::string &str);
4558   inline union_pw_multi_aff &operator=(union_pw_multi_aff obj);
4559   inline ~union_pw_multi_aff();
4560   inline __isl_give isl_union_pw_multi_aff *copy() const &;
4561   inline __isl_give isl_union_pw_multi_aff *copy() && = delete;
4562   inline __isl_keep isl_union_pw_multi_aff *get() const;
4563   inline __isl_give isl_union_pw_multi_aff *release();
4564   inline bool is_null() const;
4565   inline isl::ctx ctx() const;
4566 
4567   inline isl::union_pw_multi_aff add(isl::union_pw_multi_aff upma2) const;
4568   inline isl::union_pw_multi_aff add_pw_multi_aff(isl::pw_multi_aff pma) const;
4569   inline isl::union_pw_multi_aff apply(isl::union_pw_multi_aff upma2) const;
4570   inline isl::multi_union_pw_aff as_multi_union_pw_aff() const;
4571   inline isl::pw_multi_aff as_pw_multi_aff() const;
4572   inline isl::union_map as_union_map() const;
4573   inline isl::union_pw_multi_aff coalesce() const;
4574   inline isl::union_set domain() const;
4575   static inline isl::union_pw_multi_aff empty(isl::space space);
4576   static inline isl::union_pw_multi_aff empty(isl::ctx ctx);
4577   inline isl::pw_multi_aff extract_pw_multi_aff(isl::space space) const;
4578   inline isl::union_pw_multi_aff flat_range_product(isl::union_pw_multi_aff upma2) const;
4579   inline isl::union_pw_multi_aff gist(isl::union_set context) const;
4580   inline isl::union_pw_multi_aff intersect_domain(isl::space space) const;
4581   inline isl::union_pw_multi_aff intersect_domain(isl::union_set uset) const;
4582   inline isl::union_pw_multi_aff intersect_domain_wrapped_domain(isl::union_set uset) const;
4583   inline isl::union_pw_multi_aff intersect_domain_wrapped_range(isl::union_set uset) const;
4584   inline isl::union_pw_multi_aff intersect_params(isl::set set) const;
4585   inline boolean involves_locals() const;
4586   inline boolean isa_pw_multi_aff() const;
4587   inline boolean plain_is_empty() const;
4588   inline isl::union_pw_multi_aff preimage_domain_wrapped_domain(isl::union_pw_multi_aff upma2) const;
4589   inline isl::union_pw_multi_aff pullback(isl::union_pw_multi_aff upma2) const;
4590   inline isl::pw_multi_aff_list pw_multi_aff_list() const;
4591   inline isl::pw_multi_aff_list get_pw_multi_aff_list() const;
4592   inline isl::union_pw_multi_aff range_factor_domain() const;
4593   inline isl::union_pw_multi_aff range_factor_range() const;
4594   inline isl::union_pw_multi_aff range_product(isl::union_pw_multi_aff upma2) const;
4595   inline isl::space space() const;
4596   inline isl::space get_space() const;
4597   inline isl::union_pw_multi_aff sub(isl::union_pw_multi_aff upma2) const;
4598   inline isl::union_pw_multi_aff subtract_domain(isl::space space) const;
4599   inline isl::union_pw_multi_aff subtract_domain(isl::union_set uset) const;
4600   inline isl::union_pw_multi_aff union_add(isl::union_pw_multi_aff upma2) const;
4601 };
4602 
4603 // declarations for isl::union_set
4604 inline union_set manage(__isl_take isl_union_set *ptr);
4605 inline union_set manage_copy(__isl_keep isl_union_set *ptr);
4606 
4607 class union_set {
4608   friend inline union_set manage(__isl_take isl_union_set *ptr);
4609   friend inline union_set manage_copy(__isl_keep isl_union_set *ptr);
4610 
4611 protected:
4612   isl_union_set *ptr = nullptr;
4613 
4614   inline explicit union_set(__isl_take isl_union_set *ptr);
4615 
4616 public:
4617   inline /* implicit */ union_set();
4618   inline /* implicit */ union_set(const union_set &obj);
4619   inline /* implicit */ union_set(isl::basic_set bset);
4620   inline /* implicit */ union_set(isl::point pnt);
4621   inline /* implicit */ union_set(isl::set set);
4622   inline explicit union_set(isl::ctx ctx, const std::string &str);
4623   inline union_set &operator=(union_set obj);
4624   inline ~union_set();
4625   inline __isl_give isl_union_set *copy() const &;
4626   inline __isl_give isl_union_set *copy() && = delete;
4627   inline __isl_keep isl_union_set *get() const;
4628   inline __isl_give isl_union_set *release();
4629   inline bool is_null() const;
4630   inline isl::ctx ctx() const;
4631 
4632   inline isl::union_set affine_hull() const;
4633   inline isl::union_set apply(isl::union_map umap) const;
4634   inline isl::set as_set() const;
4635   inline isl::union_set coalesce() const;
4636   inline isl::union_set compute_divs() const;
4637   inline boolean contains(const isl::space &space) const;
4638   inline isl::union_set detect_equalities() const;
4639   static inline isl::union_set empty(isl::ctx ctx);
4640   inline boolean every_set(const std::function<boolean(isl::set)> &test) const;
4641   inline isl::set extract_set(isl::space space) const;
4642   inline stat foreach_point(const std::function<stat(isl::point)> &fn) const;
4643   inline stat foreach_set(const std::function<stat(isl::set)> &fn) const;
4644   inline isl::union_set gist(isl::union_set context) const;
4645   inline isl::union_set gist_params(isl::set set) const;
4646   inline isl::union_map identity() const;
4647   inline isl::union_pw_multi_aff identity_union_pw_multi_aff() const;
4648   inline isl::union_set intersect(isl::union_set uset2) const;
4649   inline isl::union_set intersect_params(isl::set set) const;
4650   inline boolean is_disjoint(const isl::union_set &uset2) const;
4651   inline boolean is_empty() const;
4652   inline boolean is_equal(const isl::union_set &uset2) const;
4653   inline boolean is_strict_subset(const isl::union_set &uset2) const;
4654   inline boolean is_subset(const isl::union_set &uset2) const;
4655   inline boolean isa_set() const;
4656   inline isl::union_set lexmax() const;
4657   inline isl::union_set lexmin() const;
4658   inline isl::set params() const;
4659   inline isl::union_set polyhedral_hull() const;
4660   inline isl::union_set preimage(isl::multi_aff ma) const;
4661   inline isl::union_set preimage(isl::pw_multi_aff pma) const;
4662   inline isl::union_set preimage(isl::union_pw_multi_aff upma) const;
4663   inline isl::point sample_point() const;
4664   inline isl::set_list set_list() const;
4665   inline isl::set_list get_set_list() const;
4666   inline isl::space space() const;
4667   inline isl::space get_space() const;
4668   inline isl::union_set subtract(isl::union_set uset2) const;
4669   inline isl::union_set_list to_list() const;
4670   inline isl::union_set unite(isl::union_set uset2) const;
4671   inline isl::union_set universe() const;
4672   inline isl::union_map unwrap() const;
4673 };
4674 
4675 // declarations for isl::union_set_list
4676 inline union_set_list manage(__isl_take isl_union_set_list *ptr);
4677 inline union_set_list manage_copy(__isl_keep isl_union_set_list *ptr);
4678 
4679 class union_set_list {
4680   friend inline union_set_list manage(__isl_take isl_union_set_list *ptr);
4681   friend inline union_set_list manage_copy(__isl_keep isl_union_set_list *ptr);
4682 
4683 protected:
4684   isl_union_set_list *ptr = nullptr;
4685 
4686   inline explicit union_set_list(__isl_take isl_union_set_list *ptr);
4687 
4688 public:
4689   inline /* implicit */ union_set_list();
4690   inline /* implicit */ union_set_list(const union_set_list &obj);
4691   inline explicit union_set_list(isl::ctx ctx, int n);
4692   inline explicit union_set_list(isl::union_set el);
4693   inline explicit union_set_list(isl::ctx ctx, const std::string &str);
4694   inline union_set_list &operator=(union_set_list obj);
4695   inline ~union_set_list();
4696   inline __isl_give isl_union_set_list *copy() const &;
4697   inline __isl_give isl_union_set_list *copy() && = delete;
4698   inline __isl_keep isl_union_set_list *get() const;
4699   inline __isl_give isl_union_set_list *release();
4700   inline bool is_null() const;
4701   inline isl::ctx ctx() const;
4702 
4703   inline isl::union_set_list add(isl::union_set el) const;
4704   inline isl::union_set at(int index) const;
4705   inline isl::union_set get_at(int index) const;
4706   inline isl::union_set_list clear() const;
4707   inline isl::union_set_list concat(isl::union_set_list list2) const;
4708   inline isl::union_set_list drop(unsigned int first, unsigned int n) const;
4709   inline stat foreach(const std::function<stat(isl::union_set)> &fn) const;
4710   inline isl::union_set_list insert(unsigned int pos, isl::union_set el) const;
4711   inline class size size() const;
4712 };
4713 
4714 // declarations for isl::val
4715 inline val manage(__isl_take isl_val *ptr);
4716 inline val manage_copy(__isl_keep isl_val *ptr);
4717 
4718 class val {
4719   friend inline val manage(__isl_take isl_val *ptr);
4720   friend inline val manage_copy(__isl_keep isl_val *ptr);
4721 
4722 protected:
4723   isl_val *ptr = nullptr;
4724 
4725   inline explicit val(__isl_take isl_val *ptr);
4726 
4727 public:
4728   inline /* implicit */ val();
4729   inline /* implicit */ val(const val &obj);
4730   inline explicit val(isl::ctx ctx, long i);
4731   inline explicit val(isl::ctx ctx, const std::string &str);
4732   inline val &operator=(val obj);
4733   inline ~val();
4734   inline __isl_give isl_val *copy() const &;
4735   inline __isl_give isl_val *copy() && = delete;
4736   inline __isl_keep isl_val *get() const;
4737   inline __isl_give isl_val *release();
4738   inline bool is_null() const;
4739   inline isl::ctx ctx() const;
4740 
4741   inline isl::val abs() const;
4742   inline boolean abs_eq(const isl::val &v2) const;
4743   inline boolean abs_eq(long v2) const;
4744   inline isl::val add(isl::val v2) const;
4745   inline isl::val add(long v2) const;
4746   inline isl::val ceil() const;
4747   inline int cmp_si(long i) const;
4748   inline long den_si() const;
4749   inline long get_den_si() const;
4750   inline isl::val div(isl::val v2) const;
4751   inline isl::val div(long v2) const;
4752   inline boolean eq(const isl::val &v2) const;
4753   inline boolean eq(long v2) const;
4754   inline isl::val floor() const;
4755   inline isl::val gcd(isl::val v2) const;
4756   inline isl::val gcd(long v2) const;
4757   inline boolean ge(const isl::val &v2) const;
4758   inline boolean ge(long v2) const;
4759   inline boolean gt(const isl::val &v2) const;
4760   inline boolean gt(long v2) const;
4761   static inline isl::val infty(isl::ctx ctx);
4762   static inline isl::val int_from_ui(isl::ctx ctx, unsigned long u);
4763   inline isl::val inv() const;
4764   inline boolean is_divisible_by(const isl::val &v2) const;
4765   inline boolean is_divisible_by(long v2) const;
4766   inline boolean is_infty() const;
4767   inline boolean is_int() const;
4768   inline boolean is_nan() const;
4769   inline boolean is_neg() const;
4770   inline boolean is_neginfty() const;
4771   inline boolean is_negone() const;
4772   inline boolean is_nonneg() const;
4773   inline boolean is_nonpos() const;
4774   inline boolean is_one() const;
4775   inline boolean is_pos() const;
4776   inline boolean is_rat() const;
4777   inline boolean is_zero() const;
4778   inline boolean le(const isl::val &v2) const;
4779   inline boolean le(long v2) const;
4780   inline boolean lt(const isl::val &v2) const;
4781   inline boolean lt(long v2) const;
4782   inline isl::val max(isl::val v2) const;
4783   inline isl::val max(long v2) const;
4784   inline isl::val min(isl::val v2) const;
4785   inline isl::val min(long v2) const;
4786   inline isl::val mod(isl::val v2) const;
4787   inline isl::val mod(long v2) const;
4788   inline isl::val mul(isl::val v2) const;
4789   inline isl::val mul(long v2) const;
4790   static inline isl::val nan(isl::ctx ctx);
4791   inline boolean ne(const isl::val &v2) const;
4792   inline boolean ne(long v2) const;
4793   inline isl::val neg() const;
4794   static inline isl::val neginfty(isl::ctx ctx);
4795   static inline isl::val negone(isl::ctx ctx);
4796   inline long num_si() const;
4797   inline long get_num_si() const;
4798   static inline isl::val one(isl::ctx ctx);
4799   inline isl::val pow2() const;
4800   inline int sgn() const;
4801   inline isl::val sub(isl::val v2) const;
4802   inline isl::val sub(long v2) const;
4803   inline isl::val_list to_list() const;
4804   inline isl::val trunc() const;
4805   static inline isl::val zero(isl::ctx ctx);
4806 };
4807 
4808 // declarations for isl::val_list
4809 inline val_list manage(__isl_take isl_val_list *ptr);
4810 inline val_list manage_copy(__isl_keep isl_val_list *ptr);
4811 
4812 class val_list {
4813   friend inline val_list manage(__isl_take isl_val_list *ptr);
4814   friend inline val_list manage_copy(__isl_keep isl_val_list *ptr);
4815 
4816 protected:
4817   isl_val_list *ptr = nullptr;
4818 
4819   inline explicit val_list(__isl_take isl_val_list *ptr);
4820 
4821 public:
4822   inline /* implicit */ val_list();
4823   inline /* implicit */ val_list(const val_list &obj);
4824   inline explicit val_list(isl::ctx ctx, int n);
4825   inline explicit val_list(isl::val el);
4826   inline explicit val_list(isl::ctx ctx, const std::string &str);
4827   inline val_list &operator=(val_list obj);
4828   inline ~val_list();
4829   inline __isl_give isl_val_list *copy() const &;
4830   inline __isl_give isl_val_list *copy() && = delete;
4831   inline __isl_keep isl_val_list *get() const;
4832   inline __isl_give isl_val_list *release();
4833   inline bool is_null() const;
4834   inline isl::ctx ctx() const;
4835 
4836   inline isl::val_list add(isl::val el) const;
4837   inline isl::val_list add(long el) const;
4838   inline isl::val at(int index) const;
4839   inline isl::val get_at(int index) const;
4840   inline isl::val_list clear() const;
4841   inline isl::val_list concat(isl::val_list list2) const;
4842   inline isl::val_list drop(unsigned int first, unsigned int n) const;
4843   inline stat foreach(const std::function<stat(isl::val)> &fn) const;
4844   inline isl::val_list insert(unsigned int pos, isl::val el) const;
4845   inline isl::val_list insert(unsigned int pos, long el) const;
4846   inline class size size() const;
4847 };
4848 
4849 // implementations for isl::aff
manage(__isl_take isl_aff * ptr)4850 aff manage(__isl_take isl_aff *ptr) {
4851   return aff(ptr);
4852 }
manage_copy(__isl_keep isl_aff * ptr)4853 aff manage_copy(__isl_keep isl_aff *ptr) {
4854   ptr = isl_aff_copy(ptr);
4855   return aff(ptr);
4856 }
4857 
aff()4858 aff::aff()
4859     : ptr(nullptr) {}
4860 
aff(const aff & obj)4861 aff::aff(const aff &obj)
4862     : ptr(nullptr)
4863 {
4864   ptr = obj.copy();
4865 }
4866 
aff(__isl_take isl_aff * ptr)4867 aff::aff(__isl_take isl_aff *ptr)
4868     : ptr(ptr) {}
4869 
aff(isl::ctx ctx,const std::string & str)4870 aff::aff(isl::ctx ctx, const std::string &str)
4871 {
4872   auto res = isl_aff_read_from_str(ctx.release(), str.c_str());
4873   ptr = res;
4874 }
4875 
aff(isl::local_space ls,isl::val val)4876 aff::aff(isl::local_space ls, isl::val val)
4877 {
4878   auto res = isl_aff_val_on_domain(ls.release(), val.release());
4879   ptr = res;
4880 }
4881 
aff(isl::local_space ls)4882 aff::aff(isl::local_space ls)
4883 {
4884   auto res = isl_aff_zero_on_domain(ls.release());
4885   ptr = res;
4886 }
4887 
4888 aff &aff::operator=(aff obj) {
4889   std::swap(this->ptr, obj.ptr);
4890   return *this;
4891 }
4892 
~aff()4893 aff::~aff() {
4894   if (ptr)
4895     isl_aff_free(ptr);
4896 }
4897 
copy()4898 __isl_give isl_aff *aff::copy() const & {
4899   return isl_aff_copy(ptr);
4900 }
4901 
get()4902 __isl_keep isl_aff *aff::get() const {
4903   return ptr;
4904 }
4905 
release()4906 __isl_give isl_aff *aff::release() {
4907   isl_aff *tmp = ptr;
4908   ptr = nullptr;
4909   return tmp;
4910 }
4911 
is_null()4912 bool aff::is_null() const {
4913   return ptr == nullptr;
4914 }
4915 
ctx()4916 isl::ctx aff::ctx() const {
4917   return isl::ctx(isl_aff_get_ctx(ptr));
4918 }
4919 
add(isl::aff aff2)4920 isl::aff aff::add(isl::aff aff2) const
4921 {
4922   auto res = isl_aff_add(copy(), aff2.release());
4923   return manage(res);
4924 }
4925 
add(const isl::multi_aff & multi2)4926 isl::multi_aff aff::add(const isl::multi_aff &multi2) const
4927 {
4928   return isl::multi_aff(*this).add(multi2);
4929 }
4930 
add(const isl::multi_pw_aff & multi2)4931 isl::multi_pw_aff aff::add(const isl::multi_pw_aff &multi2) const
4932 {
4933   return isl::pw_aff(*this).add(multi2);
4934 }
4935 
add(const isl::multi_union_pw_aff & multi2)4936 isl::multi_union_pw_aff aff::add(const isl::multi_union_pw_aff &multi2) const
4937 {
4938   return isl::pw_aff(*this).add(multi2);
4939 }
4940 
add(const isl::pw_aff & pwaff2)4941 isl::pw_aff aff::add(const isl::pw_aff &pwaff2) const
4942 {
4943   return isl::pw_aff(*this).add(pwaff2);
4944 }
4945 
add(const isl::pw_multi_aff & pma2)4946 isl::pw_multi_aff aff::add(const isl::pw_multi_aff &pma2) const
4947 {
4948   return isl::pw_aff(*this).add(pma2);
4949 }
4950 
add(const isl::union_pw_aff & upa2)4951 isl::union_pw_aff aff::add(const isl::union_pw_aff &upa2) const
4952 {
4953   return isl::pw_aff(*this).add(upa2);
4954 }
4955 
add(const isl::union_pw_multi_aff & upma2)4956 isl::union_pw_multi_aff aff::add(const isl::union_pw_multi_aff &upma2) const
4957 {
4958   return isl::pw_aff(*this).add(upma2);
4959 }
4960 
add_constant(isl::val v)4961 isl::aff aff::add_constant(isl::val v) const
4962 {
4963   auto res = isl_aff_add_constant_val(copy(), v.release());
4964   return manage(res);
4965 }
4966 
add_constant(long v)4967 isl::aff aff::add_constant(long v) const
4968 {
4969   return this->add_constant(isl::val(ctx(), v));
4970 }
4971 
add_constant(const isl::multi_val & mv)4972 isl::multi_aff aff::add_constant(const isl::multi_val &mv) const
4973 {
4974   return isl::multi_aff(*this).add_constant(mv);
4975 }
4976 
add_constant_si(int v)4977 isl::aff aff::add_constant_si(int v) const
4978 {
4979   auto res = isl_aff_add_constant_si(copy(), v);
4980   return manage(res);
4981 }
4982 
add_dims(isl::dim type,unsigned int n)4983 isl::pw_aff aff::add_dims(isl::dim type, unsigned int n) const
4984 {
4985   return isl::pw_aff(*this).add_dims(type, n);
4986 }
4987 
add_pw_multi_aff(const isl::pw_multi_aff & pma)4988 isl::union_pw_multi_aff aff::add_pw_multi_aff(const isl::pw_multi_aff &pma) const
4989 {
4990   return isl::pw_aff(*this).add_pw_multi_aff(pma);
4991 }
4992 
apply(const isl::union_pw_multi_aff & upma2)4993 isl::union_pw_multi_aff aff::apply(const isl::union_pw_multi_aff &upma2) const
4994 {
4995   return isl::pw_aff(*this).apply(upma2);
4996 }
4997 
as_aff()4998 isl::aff aff::as_aff() const
4999 {
5000   return isl::pw_aff(*this).as_aff();
5001 }
5002 
as_map()5003 isl::map aff::as_map() const
5004 {
5005   return isl::pw_aff(*this).as_map();
5006 }
5007 
as_multi_aff()5008 isl::multi_aff aff::as_multi_aff() const
5009 {
5010   return isl::pw_aff(*this).as_multi_aff();
5011 }
5012 
as_multi_union_pw_aff()5013 isl::multi_union_pw_aff aff::as_multi_union_pw_aff() const
5014 {
5015   return isl::pw_aff(*this).as_multi_union_pw_aff();
5016 }
5017 
as_pw_multi_aff()5018 isl::pw_multi_aff aff::as_pw_multi_aff() const
5019 {
5020   return isl::pw_aff(*this).as_pw_multi_aff();
5021 }
5022 
as_set()5023 isl::set aff::as_set() const
5024 {
5025   return isl::multi_aff(*this).as_set();
5026 }
5027 
as_union_map()5028 isl::union_map aff::as_union_map() const
5029 {
5030   return isl::pw_aff(*this).as_union_map();
5031 }
5032 
at(int pos)5033 isl::aff aff::at(int pos) const
5034 {
5035   return isl::multi_aff(*this).at(pos);
5036 }
5037 
bind(isl::id id)5038 isl::basic_set aff::bind(isl::id id) const
5039 {
5040   auto res = isl_aff_bind_id(copy(), id.release());
5041   return manage(res);
5042 }
5043 
bind(const std::string & id)5044 isl::basic_set aff::bind(const std::string &id) const
5045 {
5046   return this->bind(isl::id(ctx(), id));
5047 }
5048 
bind(const isl::multi_id & tuple)5049 isl::basic_set aff::bind(const isl::multi_id &tuple) const
5050 {
5051   return isl::multi_aff(*this).bind(tuple);
5052 }
5053 
bind_domain(const isl::multi_id & tuple)5054 isl::pw_aff aff::bind_domain(const isl::multi_id &tuple) const
5055 {
5056   return isl::pw_aff(*this).bind_domain(tuple);
5057 }
5058 
bind_domain_wrapped_domain(const isl::multi_id & tuple)5059 isl::pw_aff aff::bind_domain_wrapped_domain(const isl::multi_id &tuple) const
5060 {
5061   return isl::pw_aff(*this).bind_domain_wrapped_domain(tuple);
5062 }
5063 
ceil()5064 isl::aff aff::ceil() const
5065 {
5066   auto res = isl_aff_ceil(copy());
5067   return manage(res);
5068 }
5069 
coalesce()5070 isl::pw_aff aff::coalesce() const
5071 {
5072   return isl::pw_aff(*this).coalesce();
5073 }
5074 
cond(const isl::pw_aff & pwaff_true,const isl::pw_aff & pwaff_false)5075 isl::pw_aff aff::cond(const isl::pw_aff &pwaff_true, const isl::pw_aff &pwaff_false) const
5076 {
5077   return isl::pw_aff(*this).cond(pwaff_true, pwaff_false);
5078 }
5079 
constant_multi_val()5080 isl::multi_val aff::constant_multi_val() const
5081 {
5082   return isl::multi_aff(*this).constant_multi_val();
5083 }
5084 
constant_val()5085 isl::val aff::constant_val() const
5086 {
5087   auto res = isl_aff_get_constant_val(get());
5088   return manage(res);
5089 }
5090 
get_constant_val()5091 isl::val aff::get_constant_val() const
5092 {
5093   return constant_val();
5094 }
5095 
denominator_val()5096 isl::val aff::denominator_val() const
5097 {
5098   auto res = isl_aff_get_denominator_val(get());
5099   return manage(res);
5100 }
5101 
get_denominator_val()5102 isl::val aff::get_denominator_val() const
5103 {
5104   return denominator_val();
5105 }
5106 
dim(isl::dim type)5107 class size aff::dim(isl::dim type) const
5108 {
5109   return isl::multi_aff(*this).dim(type);
5110 }
5111 
dim_id(isl::dim type,unsigned int pos)5112 isl::id aff::dim_id(isl::dim type, unsigned int pos) const
5113 {
5114   return isl::pw_aff(*this).dim_id(type, pos);
5115 }
5116 
div(isl::aff aff2)5117 isl::aff aff::div(isl::aff aff2) const
5118 {
5119   auto res = isl_aff_div(copy(), aff2.release());
5120   return manage(res);
5121 }
5122 
div(const isl::pw_aff & pa2)5123 isl::pw_aff aff::div(const isl::pw_aff &pa2) const
5124 {
5125   return isl::pw_aff(*this).div(pa2);
5126 }
5127 
domain()5128 isl::set aff::domain() const
5129 {
5130   return isl::pw_aff(*this).domain();
5131 }
5132 
domain_space()5133 isl::space aff::domain_space() const
5134 {
5135   return isl::pw_aff(*this).domain_space();
5136 }
5137 
drop_dims(isl::dim type,unsigned int first,unsigned int n)5138 isl::pw_multi_aff aff::drop_dims(isl::dim type, unsigned int first, unsigned int n) const
5139 {
5140   return isl::pw_aff(*this).drop_dims(type, first, n);
5141 }
5142 
eq_set(isl::aff aff2)5143 isl::set aff::eq_set(isl::aff aff2) const
5144 {
5145   auto res = isl_aff_eq_set(copy(), aff2.release());
5146   return manage(res);
5147 }
5148 
eq_set(const isl::pw_aff & pwaff2)5149 isl::set aff::eq_set(const isl::pw_aff &pwaff2) const
5150 {
5151   return isl::pw_aff(*this).eq_set(pwaff2);
5152 }
5153 
eval(isl::point pnt)5154 isl::val aff::eval(isl::point pnt) const
5155 {
5156   auto res = isl_aff_eval(copy(), pnt.release());
5157   return manage(res);
5158 }
5159 
extract_pw_multi_aff(const isl::space & space)5160 isl::pw_multi_aff aff::extract_pw_multi_aff(const isl::space &space) const
5161 {
5162   return isl::pw_aff(*this).extract_pw_multi_aff(space);
5163 }
5164 
flat_range_product(const isl::multi_aff & multi2)5165 isl::multi_aff aff::flat_range_product(const isl::multi_aff &multi2) const
5166 {
5167   return isl::multi_aff(*this).flat_range_product(multi2);
5168 }
5169 
flat_range_product(const isl::multi_pw_aff & multi2)5170 isl::multi_pw_aff aff::flat_range_product(const isl::multi_pw_aff &multi2) const
5171 {
5172   return isl::pw_aff(*this).flat_range_product(multi2);
5173 }
5174 
flat_range_product(const isl::multi_union_pw_aff & multi2)5175 isl::multi_union_pw_aff aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const
5176 {
5177   return isl::pw_aff(*this).flat_range_product(multi2);
5178 }
5179 
flat_range_product(const isl::pw_multi_aff & pma2)5180 isl::pw_multi_aff aff::flat_range_product(const isl::pw_multi_aff &pma2) const
5181 {
5182   return isl::pw_aff(*this).flat_range_product(pma2);
5183 }
5184 
flat_range_product(const isl::union_pw_multi_aff & upma2)5185 isl::union_pw_multi_aff aff::flat_range_product(const isl::union_pw_multi_aff &upma2) const
5186 {
5187   return isl::pw_aff(*this).flat_range_product(upma2);
5188 }
5189 
floor()5190 isl::aff aff::floor() const
5191 {
5192   auto res = isl_aff_floor(copy());
5193   return manage(res);
5194 }
5195 
foreach_piece(const std::function<stat (isl::set,isl::aff)> & fn)5196 stat aff::foreach_piece(const std::function<stat(isl::set, isl::aff)> &fn) const
5197 {
5198   return isl::pw_aff(*this).foreach_piece(fn);
5199 }
5200 
foreach_piece(const std::function<stat (isl::set,isl::multi_aff)> & fn)5201 stat aff::foreach_piece(const std::function<stat(isl::set, isl::multi_aff)> &fn) const
5202 {
5203   return isl::pw_aff(*this).foreach_piece(fn);
5204 }
5205 
foreach_pw_aff(const std::function<stat (isl::pw_aff)> & fn)5206 stat aff::foreach_pw_aff(const std::function<stat(isl::pw_aff)> &fn) const
5207 {
5208   return isl::pw_aff(*this).foreach_pw_aff(fn);
5209 }
5210 
ge_set(isl::aff aff2)5211 isl::set aff::ge_set(isl::aff aff2) const
5212 {
5213   auto res = isl_aff_ge_set(copy(), aff2.release());
5214   return manage(res);
5215 }
5216 
ge_set(const isl::pw_aff & pwaff2)5217 isl::set aff::ge_set(const isl::pw_aff &pwaff2) const
5218 {
5219   return isl::pw_aff(*this).ge_set(pwaff2);
5220 }
5221 
gist(isl::set context)5222 isl::aff aff::gist(isl::set context) const
5223 {
5224   auto res = isl_aff_gist(copy(), context.release());
5225   return manage(res);
5226 }
5227 
gist(const isl::union_set & context)5228 isl::union_pw_aff aff::gist(const isl::union_set &context) const
5229 {
5230   return isl::pw_aff(*this).gist(context);
5231 }
5232 
gist(const isl::basic_set & context)5233 isl::aff aff::gist(const isl::basic_set &context) const
5234 {
5235   return this->gist(isl::set(context));
5236 }
5237 
gist(const isl::point & context)5238 isl::aff aff::gist(const isl::point &context) const
5239 {
5240   return this->gist(isl::set(context));
5241 }
5242 
gt_set(isl::aff aff2)5243 isl::set aff::gt_set(isl::aff aff2) const
5244 {
5245   auto res = isl_aff_gt_set(copy(), aff2.release());
5246   return manage(res);
5247 }
5248 
gt_set(const isl::pw_aff & pwaff2)5249 isl::set aff::gt_set(const isl::pw_aff &pwaff2) const
5250 {
5251   return isl::pw_aff(*this).gt_set(pwaff2);
5252 }
5253 
has_range_tuple_id()5254 boolean aff::has_range_tuple_id() const
5255 {
5256   return isl::multi_aff(*this).has_range_tuple_id();
5257 }
5258 
identity()5259 isl::multi_aff aff::identity() const
5260 {
5261   return isl::multi_aff(*this).identity();
5262 }
5263 
insert_domain(const isl::space & domain)5264 isl::pw_aff aff::insert_domain(const isl::space &domain) const
5265 {
5266   return isl::pw_aff(*this).insert_domain(domain);
5267 }
5268 
intersect_domain(const isl::set & set)5269 isl::pw_aff aff::intersect_domain(const isl::set &set) const
5270 {
5271   return isl::pw_aff(*this).intersect_domain(set);
5272 }
5273 
intersect_domain(const isl::space & space)5274 isl::union_pw_aff aff::intersect_domain(const isl::space &space) const
5275 {
5276   return isl::pw_aff(*this).intersect_domain(space);
5277 }
5278 
intersect_domain(const isl::union_set & uset)5279 isl::union_pw_aff aff::intersect_domain(const isl::union_set &uset) const
5280 {
5281   return isl::pw_aff(*this).intersect_domain(uset);
5282 }
5283 
intersect_domain_wrapped_domain(const isl::union_set & uset)5284 isl::union_pw_aff aff::intersect_domain_wrapped_domain(const isl::union_set &uset) const
5285 {
5286   return isl::pw_aff(*this).intersect_domain_wrapped_domain(uset);
5287 }
5288 
intersect_domain_wrapped_range(const isl::union_set & uset)5289 isl::union_pw_aff aff::intersect_domain_wrapped_range(const isl::union_set &uset) const
5290 {
5291   return isl::pw_aff(*this).intersect_domain_wrapped_range(uset);
5292 }
5293 
intersect_params(const isl::set & set)5294 isl::pw_aff aff::intersect_params(const isl::set &set) const
5295 {
5296   return isl::pw_aff(*this).intersect_params(set);
5297 }
5298 
involves_locals()5299 boolean aff::involves_locals() const
5300 {
5301   return isl::multi_aff(*this).involves_locals();
5302 }
5303 
involves_nan()5304 boolean aff::involves_nan() const
5305 {
5306   return isl::multi_aff(*this).involves_nan();
5307 }
5308 
involves_param(const isl::id & id)5309 boolean aff::involves_param(const isl::id &id) const
5310 {
5311   return isl::pw_aff(*this).involves_param(id);
5312 }
5313 
involves_param(const std::string & id)5314 boolean aff::involves_param(const std::string &id) const
5315 {
5316   return this->involves_param(isl::id(ctx(), id));
5317 }
5318 
involves_param(const isl::id_list & list)5319 boolean aff::involves_param(const isl::id_list &list) const
5320 {
5321   return isl::pw_aff(*this).involves_param(list);
5322 }
5323 
is_cst()5324 boolean aff::is_cst() const
5325 {
5326   auto res = isl_aff_is_cst(get());
5327   return manage(res);
5328 }
5329 
is_equal(const isl::pw_aff & pa2)5330 boolean aff::is_equal(const isl::pw_aff &pa2) const
5331 {
5332   return isl::pw_aff(*this).is_equal(pa2);
5333 }
5334 
isa_aff()5335 boolean aff::isa_aff() const
5336 {
5337   return isl::pw_aff(*this).isa_aff();
5338 }
5339 
isa_multi_aff()5340 boolean aff::isa_multi_aff() const
5341 {
5342   return isl::pw_aff(*this).isa_multi_aff();
5343 }
5344 
isa_pw_multi_aff()5345 boolean aff::isa_pw_multi_aff() const
5346 {
5347   return isl::pw_aff(*this).isa_pw_multi_aff();
5348 }
5349 
le_set(isl::aff aff2)5350 isl::set aff::le_set(isl::aff aff2) const
5351 {
5352   auto res = isl_aff_le_set(copy(), aff2.release());
5353   return manage(res);
5354 }
5355 
le_set(const isl::pw_aff & pwaff2)5356 isl::set aff::le_set(const isl::pw_aff &pwaff2) const
5357 {
5358   return isl::pw_aff(*this).le_set(pwaff2);
5359 }
5360 
list()5361 isl::aff_list aff::list() const
5362 {
5363   return isl::multi_aff(*this).list();
5364 }
5365 
lt_set(isl::aff aff2)5366 isl::set aff::lt_set(isl::aff aff2) const
5367 {
5368   auto res = isl_aff_lt_set(copy(), aff2.release());
5369   return manage(res);
5370 }
5371 
lt_set(const isl::pw_aff & pwaff2)5372 isl::set aff::lt_set(const isl::pw_aff &pwaff2) const
5373 {
5374   return isl::pw_aff(*this).lt_set(pwaff2);
5375 }
5376 
max(const isl::multi_pw_aff & multi2)5377 isl::multi_pw_aff aff::max(const isl::multi_pw_aff &multi2) const
5378 {
5379   return isl::pw_aff(*this).max(multi2);
5380 }
5381 
max(const isl::pw_aff & pwaff2)5382 isl::pw_aff aff::max(const isl::pw_aff &pwaff2) const
5383 {
5384   return isl::pw_aff(*this).max(pwaff2);
5385 }
5386 
max_multi_val()5387 isl::multi_val aff::max_multi_val() const
5388 {
5389   return isl::pw_aff(*this).max_multi_val();
5390 }
5391 
min(const isl::multi_pw_aff & multi2)5392 isl::multi_pw_aff aff::min(const isl::multi_pw_aff &multi2) const
5393 {
5394   return isl::pw_aff(*this).min(multi2);
5395 }
5396 
min(const isl::pw_aff & pwaff2)5397 isl::pw_aff aff::min(const isl::pw_aff &pwaff2) const
5398 {
5399   return isl::pw_aff(*this).min(pwaff2);
5400 }
5401 
min_multi_val()5402 isl::multi_val aff::min_multi_val() const
5403 {
5404   return isl::pw_aff(*this).min_multi_val();
5405 }
5406 
mod(isl::val mod)5407 isl::aff aff::mod(isl::val mod) const
5408 {
5409   auto res = isl_aff_mod_val(copy(), mod.release());
5410   return manage(res);
5411 }
5412 
mod(long mod)5413 isl::aff aff::mod(long mod) const
5414 {
5415   return this->mod(isl::val(ctx(), mod));
5416 }
5417 
mul(isl::aff aff2)5418 isl::aff aff::mul(isl::aff aff2) const
5419 {
5420   auto res = isl_aff_mul(copy(), aff2.release());
5421   return manage(res);
5422 }
5423 
mul(const isl::pw_aff & pwaff2)5424 isl::pw_aff aff::mul(const isl::pw_aff &pwaff2) const
5425 {
5426   return isl::pw_aff(*this).mul(pwaff2);
5427 }
5428 
n_piece()5429 class size aff::n_piece() const
5430 {
5431   return isl::pw_aff(*this).n_piece();
5432 }
5433 
ne_set(isl::aff aff2)5434 isl::set aff::ne_set(isl::aff aff2) const
5435 {
5436   auto res = isl_aff_ne_set(copy(), aff2.release());
5437   return manage(res);
5438 }
5439 
ne_set(const isl::pw_aff & pwaff2)5440 isl::set aff::ne_set(const isl::pw_aff &pwaff2) const
5441 {
5442   return isl::pw_aff(*this).ne_set(pwaff2);
5443 }
5444 
neg()5445 isl::aff aff::neg() const
5446 {
5447   auto res = isl_aff_neg(copy());
5448   return manage(res);
5449 }
5450 
plain_is_empty()5451 boolean aff::plain_is_empty() const
5452 {
5453   return isl::pw_aff(*this).plain_is_empty();
5454 }
5455 
plain_is_equal(const isl::multi_aff & multi2)5456 boolean aff::plain_is_equal(const isl::multi_aff &multi2) const
5457 {
5458   return isl::multi_aff(*this).plain_is_equal(multi2);
5459 }
5460 
plain_is_equal(const isl::multi_pw_aff & multi2)5461 boolean aff::plain_is_equal(const isl::multi_pw_aff &multi2) const
5462 {
5463   return isl::pw_aff(*this).plain_is_equal(multi2);
5464 }
5465 
plain_is_equal(const isl::multi_union_pw_aff & multi2)5466 boolean aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
5467 {
5468   return isl::pw_aff(*this).plain_is_equal(multi2);
5469 }
5470 
preimage_domain_wrapped_domain(const isl::pw_multi_aff & pma2)5471 isl::pw_multi_aff aff::preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const
5472 {
5473   return isl::pw_aff(*this).preimage_domain_wrapped_domain(pma2);
5474 }
5475 
preimage_domain_wrapped_domain(const isl::union_pw_multi_aff & upma2)5476 isl::union_pw_multi_aff aff::preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const
5477 {
5478   return isl::pw_aff(*this).preimage_domain_wrapped_domain(upma2);
5479 }
5480 
product(const isl::multi_aff & multi2)5481 isl::multi_aff aff::product(const isl::multi_aff &multi2) const
5482 {
5483   return isl::multi_aff(*this).product(multi2);
5484 }
5485 
product(const isl::multi_pw_aff & multi2)5486 isl::multi_pw_aff aff::product(const isl::multi_pw_aff &multi2) const
5487 {
5488   return isl::pw_aff(*this).product(multi2);
5489 }
5490 
product(const isl::pw_multi_aff & pma2)5491 isl::pw_multi_aff aff::product(const isl::pw_multi_aff &pma2) const
5492 {
5493   return isl::pw_aff(*this).product(pma2);
5494 }
5495 
pullback(isl::multi_aff ma)5496 isl::aff aff::pullback(isl::multi_aff ma) const
5497 {
5498   auto res = isl_aff_pullback_multi_aff(copy(), ma.release());
5499   return manage(res);
5500 }
5501 
pullback(const isl::multi_pw_aff & mpa)5502 isl::pw_aff aff::pullback(const isl::multi_pw_aff &mpa) const
5503 {
5504   return isl::pw_aff(*this).pullback(mpa);
5505 }
5506 
pullback(const isl::pw_multi_aff & pma)5507 isl::pw_aff aff::pullback(const isl::pw_multi_aff &pma) const
5508 {
5509   return isl::pw_aff(*this).pullback(pma);
5510 }
5511 
pullback(const isl::union_pw_multi_aff & upma)5512 isl::union_pw_aff aff::pullback(const isl::union_pw_multi_aff &upma) const
5513 {
5514   return isl::pw_aff(*this).pullback(upma);
5515 }
5516 
pullback(const isl::aff & ma)5517 isl::aff aff::pullback(const isl::aff &ma) const
5518 {
5519   return this->pullback(isl::multi_aff(ma));
5520 }
5521 
pw_multi_aff_list()5522 isl::pw_multi_aff_list aff::pw_multi_aff_list() const
5523 {
5524   return isl::pw_aff(*this).pw_multi_aff_list();
5525 }
5526 
range_factor_domain()5527 isl::pw_multi_aff aff::range_factor_domain() const
5528 {
5529   return isl::pw_aff(*this).range_factor_domain();
5530 }
5531 
range_factor_range()5532 isl::pw_multi_aff aff::range_factor_range() const
5533 {
5534   return isl::pw_aff(*this).range_factor_range();
5535 }
5536 
range_product(const isl::multi_aff & multi2)5537 isl::multi_aff aff::range_product(const isl::multi_aff &multi2) const
5538 {
5539   return isl::multi_aff(*this).range_product(multi2);
5540 }
5541 
range_product(const isl::multi_pw_aff & multi2)5542 isl::multi_pw_aff aff::range_product(const isl::multi_pw_aff &multi2) const
5543 {
5544   return isl::pw_aff(*this).range_product(multi2);
5545 }
5546 
range_product(const isl::multi_union_pw_aff & multi2)5547 isl::multi_union_pw_aff aff::range_product(const isl::multi_union_pw_aff &multi2) const
5548 {
5549   return isl::pw_aff(*this).range_product(multi2);
5550 }
5551 
range_product(const isl::pw_multi_aff & pma2)5552 isl::pw_multi_aff aff::range_product(const isl::pw_multi_aff &pma2) const
5553 {
5554   return isl::pw_aff(*this).range_product(pma2);
5555 }
5556 
range_product(const isl::union_pw_multi_aff & upma2)5557 isl::union_pw_multi_aff aff::range_product(const isl::union_pw_multi_aff &upma2) const
5558 {
5559   return isl::pw_aff(*this).range_product(upma2);
5560 }
5561 
range_tuple_id()5562 isl::id aff::range_tuple_id() const
5563 {
5564   return isl::multi_aff(*this).range_tuple_id();
5565 }
5566 
reset_range_tuple_id()5567 isl::multi_aff aff::reset_range_tuple_id() const
5568 {
5569   return isl::multi_aff(*this).reset_range_tuple_id();
5570 }
5571 
reset_tuple_id(isl::dim type)5572 isl::multi_aff aff::reset_tuple_id(isl::dim type) const
5573 {
5574   return isl::multi_aff(*this).reset_tuple_id(type);
5575 }
5576 
scale(isl::val v)5577 isl::aff aff::scale(isl::val v) const
5578 {
5579   auto res = isl_aff_scale_val(copy(), v.release());
5580   return manage(res);
5581 }
5582 
scale(long v)5583 isl::aff aff::scale(long v) const
5584 {
5585   return this->scale(isl::val(ctx(), v));
5586 }
5587 
scale(const isl::multi_val & mv)5588 isl::multi_aff aff::scale(const isl::multi_val &mv) const
5589 {
5590   return isl::multi_aff(*this).scale(mv);
5591 }
5592 
scale_down(isl::val v)5593 isl::aff aff::scale_down(isl::val v) const
5594 {
5595   auto res = isl_aff_scale_down_val(copy(), v.release());
5596   return manage(res);
5597 }
5598 
scale_down(long v)5599 isl::aff aff::scale_down(long v) const
5600 {
5601   return this->scale_down(isl::val(ctx(), v));
5602 }
5603 
scale_down(const isl::multi_val & mv)5604 isl::multi_aff aff::scale_down(const isl::multi_val &mv) const
5605 {
5606   return isl::multi_aff(*this).scale_down(mv);
5607 }
5608 
set_aff(int pos,const isl::aff & el)5609 isl::multi_aff aff::set_aff(int pos, const isl::aff &el) const
5610 {
5611   return isl::multi_aff(*this).set_aff(pos, el);
5612 }
5613 
set_at(int pos,const isl::aff & el)5614 isl::multi_aff aff::set_at(int pos, const isl::aff &el) const
5615 {
5616   return isl::multi_aff(*this).set_at(pos, el);
5617 }
5618 
set_at(int pos,const isl::pw_aff & el)5619 isl::multi_pw_aff aff::set_at(int pos, const isl::pw_aff &el) const
5620 {
5621   return isl::pw_aff(*this).set_at(pos, el);
5622 }
5623 
set_at(int pos,const isl::union_pw_aff & el)5624 isl::multi_union_pw_aff aff::set_at(int pos, const isl::union_pw_aff &el) const
5625 {
5626   return isl::pw_aff(*this).set_at(pos, el);
5627 }
5628 
set_constant_si(int v)5629 isl::aff aff::set_constant_si(int v) const
5630 {
5631   auto res = isl_aff_set_constant_si(copy(), v);
5632   return manage(res);
5633 }
5634 
set_pw_aff(int pos,const isl::pw_aff & el)5635 isl::multi_pw_aff aff::set_pw_aff(int pos, const isl::pw_aff &el) const
5636 {
5637   return isl::pw_aff(*this).set_pw_aff(pos, el);
5638 }
5639 
set_pw_aff(unsigned int pos,const isl::pw_aff & pa)5640 isl::pw_multi_aff aff::set_pw_aff(unsigned int pos, const isl::pw_aff &pa) const
5641 {
5642   return isl::pw_aff(*this).set_pw_aff(pos, pa);
5643 }
5644 
set_range_tuple(const isl::id & id)5645 isl::multi_aff aff::set_range_tuple(const isl::id &id) const
5646 {
5647   return isl::multi_aff(*this).set_range_tuple(id);
5648 }
5649 
set_range_tuple(const std::string & id)5650 isl::multi_aff aff::set_range_tuple(const std::string &id) const
5651 {
5652   return this->set_range_tuple(isl::id(ctx(), id));
5653 }
5654 
set_tuple_id(isl::dim type,const isl::id & id)5655 isl::pw_aff aff::set_tuple_id(isl::dim type, const isl::id &id) const
5656 {
5657   return isl::pw_aff(*this).set_tuple_id(type, id);
5658 }
5659 
set_tuple_id(isl::dim type,const std::string & id)5660 isl::pw_aff aff::set_tuple_id(isl::dim type, const std::string &id) const
5661 {
5662   return this->set_tuple_id(type, isl::id(ctx(), id));
5663 }
5664 
set_union_pw_aff(int pos,const isl::union_pw_aff & el)5665 isl::multi_union_pw_aff aff::set_union_pw_aff(int pos, const isl::union_pw_aff &el) const
5666 {
5667   return isl::pw_aff(*this).set_union_pw_aff(pos, el);
5668 }
5669 
size()5670 class size aff::size() const
5671 {
5672   return isl::multi_aff(*this).size();
5673 }
5674 
space()5675 isl::space aff::space() const
5676 {
5677   return isl::pw_aff(*this).space();
5678 }
5679 
sub(isl::aff aff2)5680 isl::aff aff::sub(isl::aff aff2) const
5681 {
5682   auto res = isl_aff_sub(copy(), aff2.release());
5683   return manage(res);
5684 }
5685 
sub(const isl::multi_aff & multi2)5686 isl::multi_aff aff::sub(const isl::multi_aff &multi2) const
5687 {
5688   return isl::multi_aff(*this).sub(multi2);
5689 }
5690 
sub(const isl::multi_pw_aff & multi2)5691 isl::multi_pw_aff aff::sub(const isl::multi_pw_aff &multi2) const
5692 {
5693   return isl::pw_aff(*this).sub(multi2);
5694 }
5695 
sub(const isl::multi_union_pw_aff & multi2)5696 isl::multi_union_pw_aff aff::sub(const isl::multi_union_pw_aff &multi2) const
5697 {
5698   return isl::pw_aff(*this).sub(multi2);
5699 }
5700 
sub(const isl::pw_aff & pwaff2)5701 isl::pw_aff aff::sub(const isl::pw_aff &pwaff2) const
5702 {
5703   return isl::pw_aff(*this).sub(pwaff2);
5704 }
5705 
sub(const isl::pw_multi_aff & pma2)5706 isl::pw_multi_aff aff::sub(const isl::pw_multi_aff &pma2) const
5707 {
5708   return isl::pw_aff(*this).sub(pma2);
5709 }
5710 
sub(const isl::union_pw_aff & upa2)5711 isl::union_pw_aff aff::sub(const isl::union_pw_aff &upa2) const
5712 {
5713   return isl::pw_aff(*this).sub(upa2);
5714 }
5715 
sub(const isl::union_pw_multi_aff & upma2)5716 isl::union_pw_multi_aff aff::sub(const isl::union_pw_multi_aff &upma2) const
5717 {
5718   return isl::pw_aff(*this).sub(upma2);
5719 }
5720 
subtract_domain(const isl::set & set)5721 isl::pw_aff aff::subtract_domain(const isl::set &set) const
5722 {
5723   return isl::pw_aff(*this).subtract_domain(set);
5724 }
5725 
subtract_domain(const isl::space & space)5726 isl::union_pw_aff aff::subtract_domain(const isl::space &space) const
5727 {
5728   return isl::pw_aff(*this).subtract_domain(space);
5729 }
5730 
subtract_domain(const isl::union_set & uset)5731 isl::union_pw_aff aff::subtract_domain(const isl::union_set &uset) const
5732 {
5733   return isl::pw_aff(*this).subtract_domain(uset);
5734 }
5735 
tdiv_q(const isl::pw_aff & pa2)5736 isl::pw_aff aff::tdiv_q(const isl::pw_aff &pa2) const
5737 {
5738   return isl::pw_aff(*this).tdiv_q(pa2);
5739 }
5740 
tdiv_r(const isl::pw_aff & pa2)5741 isl::pw_aff aff::tdiv_r(const isl::pw_aff &pa2) const
5742 {
5743   return isl::pw_aff(*this).tdiv_r(pa2);
5744 }
5745 
to_list()5746 isl::aff_list aff::to_list() const
5747 {
5748   auto res = isl_aff_to_list(copy());
5749   return manage(res);
5750 }
5751 
to_multi_pw_aff()5752 isl::multi_pw_aff aff::to_multi_pw_aff() const
5753 {
5754   return isl::multi_aff(*this).to_multi_pw_aff();
5755 }
5756 
to_multi_union_pw_aff()5757 isl::multi_union_pw_aff aff::to_multi_union_pw_aff() const
5758 {
5759   return isl::multi_aff(*this).to_multi_union_pw_aff();
5760 }
5761 
to_pw_multi_aff()5762 isl::pw_multi_aff aff::to_pw_multi_aff() const
5763 {
5764   return isl::multi_aff(*this).to_pw_multi_aff();
5765 }
5766 
to_union_pw_aff()5767 isl::union_pw_aff aff::to_union_pw_aff() const
5768 {
5769   return isl::pw_aff(*this).to_union_pw_aff();
5770 }
5771 
to_union_pw_multi_aff()5772 isl::union_pw_multi_aff aff::to_union_pw_multi_aff() const
5773 {
5774   return isl::pw_aff(*this).to_union_pw_multi_aff();
5775 }
5776 
tuple_id(isl::dim type)5777 isl::id aff::tuple_id(isl::dim type) const
5778 {
5779   return isl::pw_aff(*this).tuple_id(type);
5780 }
5781 
unbind_params_insert_domain(isl::multi_id domain)5782 isl::aff aff::unbind_params_insert_domain(isl::multi_id domain) const
5783 {
5784   auto res = isl_aff_unbind_params_insert_domain(copy(), domain.release());
5785   return manage(res);
5786 }
5787 
union_add(const isl::multi_pw_aff & mpa2)5788 isl::multi_pw_aff aff::union_add(const isl::multi_pw_aff &mpa2) const
5789 {
5790   return isl::pw_aff(*this).union_add(mpa2);
5791 }
5792 
union_add(const isl::multi_union_pw_aff & mupa2)5793 isl::multi_union_pw_aff aff::union_add(const isl::multi_union_pw_aff &mupa2) const
5794 {
5795   return isl::pw_aff(*this).union_add(mupa2);
5796 }
5797 
union_add(const isl::pw_aff & pwaff2)5798 isl::pw_aff aff::union_add(const isl::pw_aff &pwaff2) const
5799 {
5800   return isl::pw_aff(*this).union_add(pwaff2);
5801 }
5802 
union_add(const isl::pw_multi_aff & pma2)5803 isl::pw_multi_aff aff::union_add(const isl::pw_multi_aff &pma2) const
5804 {
5805   return isl::pw_aff(*this).union_add(pma2);
5806 }
5807 
union_add(const isl::union_pw_aff & upa2)5808 isl::union_pw_aff aff::union_add(const isl::union_pw_aff &upa2) const
5809 {
5810   return isl::pw_aff(*this).union_add(upa2);
5811 }
5812 
union_add(const isl::union_pw_multi_aff & upma2)5813 isl::union_pw_multi_aff aff::union_add(const isl::union_pw_multi_aff &upma2) const
5814 {
5815   return isl::pw_aff(*this).union_add(upma2);
5816 }
5817 
var_on_domain(isl::local_space ls,isl::dim type,unsigned int pos)5818 isl::aff aff::var_on_domain(isl::local_space ls, isl::dim type, unsigned int pos)
5819 {
5820   auto res = isl_aff_var_on_domain(ls.release(), static_cast<enum isl_dim_type>(type), pos);
5821   return manage(res);
5822 }
5823 
zero_on_domain(isl::space space)5824 isl::aff aff::zero_on_domain(isl::space space)
5825 {
5826   auto res = isl_aff_zero_on_domain_space(space.release());
5827   return manage(res);
5828 }
5829 
5830 inline std::ostream &operator<<(std::ostream &os, const aff &obj)
5831 {
5832   char *str = isl_aff_to_str(obj.get());
5833   if (!str) {
5834     os.setstate(std::ios_base::badbit);
5835     return os;
5836   }
5837   os << str;
5838   free(str);
5839   return os;
5840 }
5841 
5842 // implementations for isl::aff_list
manage(__isl_take isl_aff_list * ptr)5843 aff_list manage(__isl_take isl_aff_list *ptr) {
5844   return aff_list(ptr);
5845 }
manage_copy(__isl_keep isl_aff_list * ptr)5846 aff_list manage_copy(__isl_keep isl_aff_list *ptr) {
5847   ptr = isl_aff_list_copy(ptr);
5848   return aff_list(ptr);
5849 }
5850 
aff_list()5851 aff_list::aff_list()
5852     : ptr(nullptr) {}
5853 
aff_list(const aff_list & obj)5854 aff_list::aff_list(const aff_list &obj)
5855     : ptr(nullptr)
5856 {
5857   ptr = obj.copy();
5858 }
5859 
aff_list(__isl_take isl_aff_list * ptr)5860 aff_list::aff_list(__isl_take isl_aff_list *ptr)
5861     : ptr(ptr) {}
5862 
aff_list(isl::ctx ctx,int n)5863 aff_list::aff_list(isl::ctx ctx, int n)
5864 {
5865   auto res = isl_aff_list_alloc(ctx.release(), n);
5866   ptr = res;
5867 }
5868 
aff_list(isl::aff el)5869 aff_list::aff_list(isl::aff el)
5870 {
5871   auto res = isl_aff_list_from_aff(el.release());
5872   ptr = res;
5873 }
5874 
aff_list(isl::ctx ctx,const std::string & str)5875 aff_list::aff_list(isl::ctx ctx, const std::string &str)
5876 {
5877   auto res = isl_aff_list_read_from_str(ctx.release(), str.c_str());
5878   ptr = res;
5879 }
5880 
5881 aff_list &aff_list::operator=(aff_list obj) {
5882   std::swap(this->ptr, obj.ptr);
5883   return *this;
5884 }
5885 
~aff_list()5886 aff_list::~aff_list() {
5887   if (ptr)
5888     isl_aff_list_free(ptr);
5889 }
5890 
copy()5891 __isl_give isl_aff_list *aff_list::copy() const & {
5892   return isl_aff_list_copy(ptr);
5893 }
5894 
get()5895 __isl_keep isl_aff_list *aff_list::get() const {
5896   return ptr;
5897 }
5898 
release()5899 __isl_give isl_aff_list *aff_list::release() {
5900   isl_aff_list *tmp = ptr;
5901   ptr = nullptr;
5902   return tmp;
5903 }
5904 
is_null()5905 bool aff_list::is_null() const {
5906   return ptr == nullptr;
5907 }
5908 
ctx()5909 isl::ctx aff_list::ctx() const {
5910   return isl::ctx(isl_aff_list_get_ctx(ptr));
5911 }
5912 
add(isl::aff el)5913 isl::aff_list aff_list::add(isl::aff el) const
5914 {
5915   auto res = isl_aff_list_add(copy(), el.release());
5916   return manage(res);
5917 }
5918 
at(int index)5919 isl::aff aff_list::at(int index) const
5920 {
5921   auto res = isl_aff_list_get_at(get(), index);
5922   return manage(res);
5923 }
5924 
get_at(int index)5925 isl::aff aff_list::get_at(int index) const
5926 {
5927   return at(index);
5928 }
5929 
clear()5930 isl::aff_list aff_list::clear() const
5931 {
5932   auto res = isl_aff_list_clear(copy());
5933   return manage(res);
5934 }
5935 
concat(isl::aff_list list2)5936 isl::aff_list aff_list::concat(isl::aff_list list2) const
5937 {
5938   auto res = isl_aff_list_concat(copy(), list2.release());
5939   return manage(res);
5940 }
5941 
drop(unsigned int first,unsigned int n)5942 isl::aff_list aff_list::drop(unsigned int first, unsigned int n) const
5943 {
5944   auto res = isl_aff_list_drop(copy(), first, n);
5945   return manage(res);
5946 }
5947 
foreach(const std::function<stat (isl::aff)> & fn)5948 stat aff_list::foreach(const std::function<stat(isl::aff)> &fn) const
5949 {
5950   struct fn_data {
5951     std::function<stat(isl::aff)> func;
5952   } fn_data = { fn };
5953   auto fn_lambda = [](isl_aff *arg_0, void *arg_1) -> isl_stat {
5954     auto *data = static_cast<struct fn_data *>(arg_1);
5955     auto ret = (data->func)(manage(arg_0));
5956     return ret.release();
5957   };
5958   auto res = isl_aff_list_foreach(get(), fn_lambda, &fn_data);
5959   return manage(res);
5960 }
5961 
insert(unsigned int pos,isl::aff el)5962 isl::aff_list aff_list::insert(unsigned int pos, isl::aff el) const
5963 {
5964   auto res = isl_aff_list_insert(copy(), pos, el.release());
5965   return manage(res);
5966 }
5967 
size()5968 class size aff_list::size() const
5969 {
5970   auto res = isl_aff_list_size(get());
5971   return manage(res);
5972 }
5973 
5974 inline std::ostream &operator<<(std::ostream &os, const aff_list &obj)
5975 {
5976   char *str = isl_aff_list_to_str(obj.get());
5977   if (!str) {
5978     os.setstate(std::ios_base::badbit);
5979     return os;
5980   }
5981   os << str;
5982   free(str);
5983   return os;
5984 }
5985 
5986 // implementations for isl::ast_build
manage(__isl_take isl_ast_build * ptr)5987 ast_build manage(__isl_take isl_ast_build *ptr) {
5988   return ast_build(ptr);
5989 }
manage_copy(__isl_keep isl_ast_build * ptr)5990 ast_build manage_copy(__isl_keep isl_ast_build *ptr) {
5991   ptr = isl_ast_build_copy(ptr);
5992   return ast_build(ptr);
5993 }
5994 
ast_build()5995 ast_build::ast_build()
5996     : ptr(nullptr) {}
5997 
ast_build(const ast_build & obj)5998 ast_build::ast_build(const ast_build &obj)
5999     : ptr(nullptr)
6000 {
6001   ptr = obj.copy();
6002   copy_callbacks(obj);
6003 }
6004 
ast_build(__isl_take isl_ast_build * ptr)6005 ast_build::ast_build(__isl_take isl_ast_build *ptr)
6006     : ptr(ptr) {}
6007 
ast_build(isl::ctx ctx)6008 ast_build::ast_build(isl::ctx ctx)
6009 {
6010   auto res = isl_ast_build_alloc(ctx.release());
6011   ptr = res;
6012 }
6013 
6014 ast_build &ast_build::operator=(ast_build obj) {
6015   std::swap(this->ptr, obj.ptr);
6016   copy_callbacks(obj);
6017   return *this;
6018 }
6019 
~ast_build()6020 ast_build::~ast_build() {
6021   if (ptr)
6022     isl_ast_build_free(ptr);
6023 }
6024 
copy()6025 __isl_give isl_ast_build *ast_build::copy() const & {
6026   return isl_ast_build_copy(ptr);
6027 }
6028 
get()6029 __isl_keep isl_ast_build *ast_build::get() const {
6030   return ptr;
6031 }
6032 
release()6033 __isl_give isl_ast_build *ast_build::release() {
6034   if (at_each_domain_data)
6035     isl_die(ctx().get(), isl_error_invalid, "cannot release object with persistent callbacks", return nullptr);
6036   isl_ast_build *tmp = ptr;
6037   ptr = nullptr;
6038   return tmp;
6039 }
6040 
is_null()6041 bool ast_build::is_null() const {
6042   return ptr == nullptr;
6043 }
6044 
ctx()6045 isl::ctx ast_build::ctx() const {
6046   return isl::ctx(isl_ast_build_get_ctx(ptr));
6047 }
6048 
copy_callbacks(const ast_build & obj)6049 ast_build &ast_build::copy_callbacks(const ast_build &obj)
6050 {
6051   at_each_domain_data = obj.at_each_domain_data;
6052   return *this;
6053 }
6054 
at_each_domain(isl_ast_node * arg_0,isl_ast_build * arg_1,void * arg_2)6055 isl_ast_node *ast_build::at_each_domain(isl_ast_node *arg_0, isl_ast_build *arg_1, void *arg_2)
6056 {
6057   auto *data = static_cast<struct at_each_domain_data *>(arg_2);
6058   auto ret = (data->func)(manage(arg_0), manage_copy(arg_1));
6059   return ret.release();
6060 }
6061 
set_at_each_domain_data(const std::function<isl::ast_node (isl::ast_node,isl::ast_build)> & fn)6062 void ast_build::set_at_each_domain_data(const std::function<isl::ast_node(isl::ast_node, isl::ast_build)> &fn)
6063 {
6064   at_each_domain_data = std::make_shared<struct at_each_domain_data>();
6065   at_each_domain_data->func = fn;
6066   ptr = isl_ast_build_set_at_each_domain(ptr, &at_each_domain, at_each_domain_data.get());
6067 }
6068 
set_at_each_domain(const std::function<isl::ast_node (isl::ast_node,isl::ast_build)> & fn)6069 isl::ast_build ast_build::set_at_each_domain(const std::function<isl::ast_node(isl::ast_node, isl::ast_build)> &fn) const
6070 {
6071   auto copy = *this;
6072   copy.set_at_each_domain_data(fn);
6073   return copy;
6074 }
6075 
access_from(isl::multi_pw_aff mpa)6076 isl::ast_expr ast_build::access_from(isl::multi_pw_aff mpa) const
6077 {
6078   auto res = isl_ast_build_access_from_multi_pw_aff(get(), mpa.release());
6079   return manage(res);
6080 }
6081 
access_from(isl::pw_multi_aff pma)6082 isl::ast_expr ast_build::access_from(isl::pw_multi_aff pma) const
6083 {
6084   auto res = isl_ast_build_access_from_pw_multi_aff(get(), pma.release());
6085   return manage(res);
6086 }
6087 
call_from(isl::multi_pw_aff mpa)6088 isl::ast_expr ast_build::call_from(isl::multi_pw_aff mpa) const
6089 {
6090   auto res = isl_ast_build_call_from_multi_pw_aff(get(), mpa.release());
6091   return manage(res);
6092 }
6093 
call_from(isl::pw_multi_aff pma)6094 isl::ast_expr ast_build::call_from(isl::pw_multi_aff pma) const
6095 {
6096   auto res = isl_ast_build_call_from_pw_multi_aff(get(), pma.release());
6097   return manage(res);
6098 }
6099 
expr_from(isl::pw_aff pa)6100 isl::ast_expr ast_build::expr_from(isl::pw_aff pa) const
6101 {
6102   auto res = isl_ast_build_expr_from_pw_aff(get(), pa.release());
6103   return manage(res);
6104 }
6105 
expr_from(isl::set set)6106 isl::ast_expr ast_build::expr_from(isl::set set) const
6107 {
6108   auto res = isl_ast_build_expr_from_set(get(), set.release());
6109   return manage(res);
6110 }
6111 
from_context(isl::set set)6112 isl::ast_build ast_build::from_context(isl::set set)
6113 {
6114   auto res = isl_ast_build_from_context(set.release());
6115   return manage(res);
6116 }
6117 
node_from(isl::schedule schedule)6118 isl::ast_node ast_build::node_from(isl::schedule schedule) const
6119 {
6120   auto res = isl_ast_build_node_from_schedule(get(), schedule.release());
6121   return manage(res);
6122 }
6123 
node_from_schedule_map(isl::union_map schedule)6124 isl::ast_node ast_build::node_from_schedule_map(isl::union_map schedule) const
6125 {
6126   auto res = isl_ast_build_node_from_schedule_map(get(), schedule.release());
6127   return manage(res);
6128 }
6129 
6130 isl::ast_build ast_build::restrict(isl::set set) const
6131 {
6132   auto res = isl_ast_build_restrict(copy(), set.release());
6133   return manage(res).copy_callbacks(*this);
6134 }
6135 
schedule()6136 isl::union_map ast_build::schedule() const
6137 {
6138   auto res = isl_ast_build_get_schedule(get());
6139   return manage(res);
6140 }
6141 
get_schedule()6142 isl::union_map ast_build::get_schedule() const
6143 {
6144   return schedule();
6145 }
6146 
6147 // implementations for isl::ast_expr
manage(__isl_take isl_ast_expr * ptr)6148 ast_expr manage(__isl_take isl_ast_expr *ptr) {
6149   return ast_expr(ptr);
6150 }
manage_copy(__isl_keep isl_ast_expr * ptr)6151 ast_expr manage_copy(__isl_keep isl_ast_expr *ptr) {
6152   ptr = isl_ast_expr_copy(ptr);
6153   return ast_expr(ptr);
6154 }
6155 
ast_expr()6156 ast_expr::ast_expr()
6157     : ptr(nullptr) {}
6158 
ast_expr(const ast_expr & obj)6159 ast_expr::ast_expr(const ast_expr &obj)
6160     : ptr(nullptr)
6161 {
6162   ptr = obj.copy();
6163 }
6164 
ast_expr(__isl_take isl_ast_expr * ptr)6165 ast_expr::ast_expr(__isl_take isl_ast_expr *ptr)
6166     : ptr(ptr) {}
6167 
6168 ast_expr &ast_expr::operator=(ast_expr obj) {
6169   std::swap(this->ptr, obj.ptr);
6170   return *this;
6171 }
6172 
~ast_expr()6173 ast_expr::~ast_expr() {
6174   if (ptr)
6175     isl_ast_expr_free(ptr);
6176 }
6177 
copy()6178 __isl_give isl_ast_expr *ast_expr::copy() const & {
6179   return isl_ast_expr_copy(ptr);
6180 }
6181 
get()6182 __isl_keep isl_ast_expr *ast_expr::get() const {
6183   return ptr;
6184 }
6185 
release()6186 __isl_give isl_ast_expr *ast_expr::release() {
6187   isl_ast_expr *tmp = ptr;
6188   ptr = nullptr;
6189   return tmp;
6190 }
6191 
is_null()6192 bool ast_expr::is_null() const {
6193   return ptr == nullptr;
6194 }
6195 
6196 template <typename T, typename>
isa_type(T subtype)6197 boolean ast_expr::isa_type(T subtype) const
6198 {
6199   if (is_null())
6200     return boolean();
6201   return isl_ast_expr_get_type(get()) == subtype;
6202 }
6203 template <class T>
isa()6204 boolean ast_expr::isa() const
6205 {
6206   return isa_type<decltype(T::type)>(T::type);
6207 }
6208 template <class T>
as()6209 T ast_expr::as() const
6210 {
6211  if (isa<T>().is_false())
6212     isl_die(ctx().get(), isl_error_invalid, "not an object of the requested subtype", return T());
6213   return T(copy());
6214 }
6215 
ctx()6216 isl::ctx ast_expr::ctx() const {
6217   return isl::ctx(isl_ast_expr_get_ctx(ptr));
6218 }
6219 
add(isl::ast_expr expr2)6220 isl::ast_expr ast_expr::add(isl::ast_expr expr2) const
6221 {
6222   auto res = isl_ast_expr_add(copy(), expr2.release());
6223   return manage(res);
6224 }
6225 
address_of()6226 isl::ast_expr ast_expr::address_of() const
6227 {
6228   auto res = isl_ast_expr_address_of(copy());
6229   return manage(res);
6230 }
6231 
eq(isl::ast_expr expr2)6232 isl::ast_expr ast_expr::eq(isl::ast_expr expr2) const
6233 {
6234   auto res = isl_ast_expr_eq(copy(), expr2.release());
6235   return manage(res);
6236 }
6237 
from_val(isl::val v)6238 isl::ast_expr ast_expr::from_val(isl::val v)
6239 {
6240   auto res = isl_ast_expr_from_val(v.release());
6241   return manage(res);
6242 }
6243 
id()6244 isl::id ast_expr::id() const
6245 {
6246   auto res = isl_ast_expr_get_id(get());
6247   return manage(res);
6248 }
6249 
get_id()6250 isl::id ast_expr::get_id() const
6251 {
6252   return id();
6253 }
6254 
le(isl::ast_expr expr2)6255 isl::ast_expr ast_expr::le(isl::ast_expr expr2) const
6256 {
6257   auto res = isl_ast_expr_le(copy(), expr2.release());
6258   return manage(res);
6259 }
6260 
mul(isl::ast_expr expr2)6261 isl::ast_expr ast_expr::mul(isl::ast_expr expr2) const
6262 {
6263   auto res = isl_ast_expr_mul(copy(), expr2.release());
6264   return manage(res);
6265 }
6266 
op_arg(int pos)6267 isl::ast_expr ast_expr::op_arg(int pos) const
6268 {
6269   auto res = isl_ast_expr_get_op_arg(get(), pos);
6270   return manage(res);
6271 }
6272 
get_op_arg(int pos)6273 isl::ast_expr ast_expr::get_op_arg(int pos) const
6274 {
6275   return op_arg(pos);
6276 }
6277 
to_C_str()6278 std::string ast_expr::to_C_str() const
6279 {
6280   auto res = isl_ast_expr_to_C_str(get());
6281   std::string tmp(res);
6282   free(res);
6283   return tmp;
6284 }
6285 
val()6286 isl::val ast_expr::val() const
6287 {
6288   auto res = isl_ast_expr_get_val(get());
6289   return manage(res);
6290 }
6291 
get_val()6292 isl::val ast_expr::get_val() const
6293 {
6294   return val();
6295 }
6296 
6297 inline std::ostream &operator<<(std::ostream &os, const ast_expr &obj)
6298 {
6299   char *str = isl_ast_expr_to_str(obj.get());
6300   if (!str) {
6301     os.setstate(std::ios_base::badbit);
6302     return os;
6303   }
6304   os << str;
6305   free(str);
6306   return os;
6307 }
6308 
6309 // implementations for isl::ast_expr_id
ast_expr_id()6310 ast_expr_id::ast_expr_id()
6311     : ast_expr() {}
6312 
ast_expr_id(const ast_expr_id & obj)6313 ast_expr_id::ast_expr_id(const ast_expr_id &obj)
6314     : ast_expr(obj)
6315 {
6316 }
6317 
ast_expr_id(__isl_take isl_ast_expr * ptr)6318 ast_expr_id::ast_expr_id(__isl_take isl_ast_expr *ptr)
6319     : ast_expr(ptr) {}
6320 
6321 ast_expr_id &ast_expr_id::operator=(ast_expr_id obj) {
6322   std::swap(this->ptr, obj.ptr);
6323   return *this;
6324 }
6325 
ctx()6326 isl::ctx ast_expr_id::ctx() const {
6327   return isl::ctx(isl_ast_expr_get_ctx(ptr));
6328 }
6329 
id()6330 isl::id ast_expr_id::id() const
6331 {
6332   auto res = isl_ast_expr_id_get_id(get());
6333   return manage(res);
6334 }
6335 
get_id()6336 isl::id ast_expr_id::get_id() const
6337 {
6338   return id();
6339 }
6340 
6341 inline std::ostream &operator<<(std::ostream &os, const ast_expr_id &obj)
6342 {
6343   char *str = isl_ast_expr_to_str(obj.get());
6344   if (!str) {
6345     os.setstate(std::ios_base::badbit);
6346     return os;
6347   }
6348   os << str;
6349   free(str);
6350   return os;
6351 }
6352 
6353 // implementations for isl::ast_expr_int
ast_expr_int()6354 ast_expr_int::ast_expr_int()
6355     : ast_expr() {}
6356 
ast_expr_int(const ast_expr_int & obj)6357 ast_expr_int::ast_expr_int(const ast_expr_int &obj)
6358     : ast_expr(obj)
6359 {
6360 }
6361 
ast_expr_int(__isl_take isl_ast_expr * ptr)6362 ast_expr_int::ast_expr_int(__isl_take isl_ast_expr *ptr)
6363     : ast_expr(ptr) {}
6364 
6365 ast_expr_int &ast_expr_int::operator=(ast_expr_int obj) {
6366   std::swap(this->ptr, obj.ptr);
6367   return *this;
6368 }
6369 
ctx()6370 isl::ctx ast_expr_int::ctx() const {
6371   return isl::ctx(isl_ast_expr_get_ctx(ptr));
6372 }
6373 
val()6374 isl::val ast_expr_int::val() const
6375 {
6376   auto res = isl_ast_expr_int_get_val(get());
6377   return manage(res);
6378 }
6379 
get_val()6380 isl::val ast_expr_int::get_val() const
6381 {
6382   return val();
6383 }
6384 
6385 inline std::ostream &operator<<(std::ostream &os, const ast_expr_int &obj)
6386 {
6387   char *str = isl_ast_expr_to_str(obj.get());
6388   if (!str) {
6389     os.setstate(std::ios_base::badbit);
6390     return os;
6391   }
6392   os << str;
6393   free(str);
6394   return os;
6395 }
6396 
6397 // implementations for isl::ast_expr_op
ast_expr_op()6398 ast_expr_op::ast_expr_op()
6399     : ast_expr() {}
6400 
ast_expr_op(const ast_expr_op & obj)6401 ast_expr_op::ast_expr_op(const ast_expr_op &obj)
6402     : ast_expr(obj)
6403 {
6404 }
6405 
ast_expr_op(__isl_take isl_ast_expr * ptr)6406 ast_expr_op::ast_expr_op(__isl_take isl_ast_expr *ptr)
6407     : ast_expr(ptr) {}
6408 
6409 ast_expr_op &ast_expr_op::operator=(ast_expr_op obj) {
6410   std::swap(this->ptr, obj.ptr);
6411   return *this;
6412 }
6413 
6414 template <typename T, typename>
isa_type(T subtype)6415 boolean ast_expr_op::isa_type(T subtype) const
6416 {
6417   if (is_null())
6418     return boolean();
6419   return isl_ast_expr_op_get_type(get()) == subtype;
6420 }
6421 template <class T>
isa()6422 boolean ast_expr_op::isa() const
6423 {
6424   return isa_type<decltype(T::type)>(T::type);
6425 }
6426 template <class T>
as()6427 T ast_expr_op::as() const
6428 {
6429  if (isa<T>().is_false())
6430     isl_die(ctx().get(), isl_error_invalid, "not an object of the requested subtype", return T());
6431   return T(copy());
6432 }
6433 
ctx()6434 isl::ctx ast_expr_op::ctx() const {
6435   return isl::ctx(isl_ast_expr_get_ctx(ptr));
6436 }
6437 
arg(int pos)6438 isl::ast_expr ast_expr_op::arg(int pos) const
6439 {
6440   auto res = isl_ast_expr_op_get_arg(get(), pos);
6441   return manage(res);
6442 }
6443 
get_arg(int pos)6444 isl::ast_expr ast_expr_op::get_arg(int pos) const
6445 {
6446   return arg(pos);
6447 }
6448 
n_arg()6449 class size ast_expr_op::n_arg() const
6450 {
6451   auto res = isl_ast_expr_op_get_n_arg(get());
6452   return manage(res);
6453 }
6454 
get_n_arg()6455 class size ast_expr_op::get_n_arg() const
6456 {
6457   return n_arg();
6458 }
6459 
6460 inline std::ostream &operator<<(std::ostream &os, const ast_expr_op &obj)
6461 {
6462   char *str = isl_ast_expr_to_str(obj.get());
6463   if (!str) {
6464     os.setstate(std::ios_base::badbit);
6465     return os;
6466   }
6467   os << str;
6468   free(str);
6469   return os;
6470 }
6471 
6472 // implementations for isl::ast_expr_op_access
ast_expr_op_access()6473 ast_expr_op_access::ast_expr_op_access()
6474     : ast_expr_op() {}
6475 
ast_expr_op_access(const ast_expr_op_access & obj)6476 ast_expr_op_access::ast_expr_op_access(const ast_expr_op_access &obj)
6477     : ast_expr_op(obj)
6478 {
6479 }
6480 
ast_expr_op_access(__isl_take isl_ast_expr * ptr)6481 ast_expr_op_access::ast_expr_op_access(__isl_take isl_ast_expr *ptr)
6482     : ast_expr_op(ptr) {}
6483 
6484 ast_expr_op_access &ast_expr_op_access::operator=(ast_expr_op_access obj) {
6485   std::swap(this->ptr, obj.ptr);
6486   return *this;
6487 }
6488 
ctx()6489 isl::ctx ast_expr_op_access::ctx() const {
6490   return isl::ctx(isl_ast_expr_get_ctx(ptr));
6491 }
6492 
6493 inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_access &obj)
6494 {
6495   char *str = isl_ast_expr_to_str(obj.get());
6496   if (!str) {
6497     os.setstate(std::ios_base::badbit);
6498     return os;
6499   }
6500   os << str;
6501   free(str);
6502   return os;
6503 }
6504 
6505 // implementations for isl::ast_expr_op_add
ast_expr_op_add()6506 ast_expr_op_add::ast_expr_op_add()
6507     : ast_expr_op() {}
6508 
ast_expr_op_add(const ast_expr_op_add & obj)6509 ast_expr_op_add::ast_expr_op_add(const ast_expr_op_add &obj)
6510     : ast_expr_op(obj)
6511 {
6512 }
6513 
ast_expr_op_add(__isl_take isl_ast_expr * ptr)6514 ast_expr_op_add::ast_expr_op_add(__isl_take isl_ast_expr *ptr)
6515     : ast_expr_op(ptr) {}
6516 
6517 ast_expr_op_add &ast_expr_op_add::operator=(ast_expr_op_add obj) {
6518   std::swap(this->ptr, obj.ptr);
6519   return *this;
6520 }
6521 
ctx()6522 isl::ctx ast_expr_op_add::ctx() const {
6523   return isl::ctx(isl_ast_expr_get_ctx(ptr));
6524 }
6525 
6526 inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_add &obj)
6527 {
6528   char *str = isl_ast_expr_to_str(obj.get());
6529   if (!str) {
6530     os.setstate(std::ios_base::badbit);
6531     return os;
6532   }
6533   os << str;
6534   free(str);
6535   return os;
6536 }
6537 
6538 // implementations for isl::ast_expr_op_address_of
ast_expr_op_address_of()6539 ast_expr_op_address_of::ast_expr_op_address_of()
6540     : ast_expr_op() {}
6541 
ast_expr_op_address_of(const ast_expr_op_address_of & obj)6542 ast_expr_op_address_of::ast_expr_op_address_of(const ast_expr_op_address_of &obj)
6543     : ast_expr_op(obj)
6544 {
6545 }
6546 
ast_expr_op_address_of(__isl_take isl_ast_expr * ptr)6547 ast_expr_op_address_of::ast_expr_op_address_of(__isl_take isl_ast_expr *ptr)
6548     : ast_expr_op(ptr) {}
6549 
6550 ast_expr_op_address_of &ast_expr_op_address_of::operator=(ast_expr_op_address_of obj) {
6551   std::swap(this->ptr, obj.ptr);
6552   return *this;
6553 }
6554 
ctx()6555 isl::ctx ast_expr_op_address_of::ctx() const {
6556   return isl::ctx(isl_ast_expr_get_ctx(ptr));
6557 }
6558 
6559 inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_address_of &obj)
6560 {
6561   char *str = isl_ast_expr_to_str(obj.get());
6562   if (!str) {
6563     os.setstate(std::ios_base::badbit);
6564     return os;
6565   }
6566   os << str;
6567   free(str);
6568   return os;
6569 }
6570 
6571 // implementations for isl::ast_expr_op_and
ast_expr_op_and()6572 ast_expr_op_and::ast_expr_op_and()
6573     : ast_expr_op() {}
6574 
ast_expr_op_and(const ast_expr_op_and & obj)6575 ast_expr_op_and::ast_expr_op_and(const ast_expr_op_and &obj)
6576     : ast_expr_op(obj)
6577 {
6578 }
6579 
ast_expr_op_and(__isl_take isl_ast_expr * ptr)6580 ast_expr_op_and::ast_expr_op_and(__isl_take isl_ast_expr *ptr)
6581     : ast_expr_op(ptr) {}
6582 
6583 ast_expr_op_and &ast_expr_op_and::operator=(ast_expr_op_and obj) {
6584   std::swap(this->ptr, obj.ptr);
6585   return *this;
6586 }
6587 
ctx()6588 isl::ctx ast_expr_op_and::ctx() const {
6589   return isl::ctx(isl_ast_expr_get_ctx(ptr));
6590 }
6591 
6592 inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_and &obj)
6593 {
6594   char *str = isl_ast_expr_to_str(obj.get());
6595   if (!str) {
6596     os.setstate(std::ios_base::badbit);
6597     return os;
6598   }
6599   os << str;
6600   free(str);
6601   return os;
6602 }
6603 
6604 // implementations for isl::ast_expr_op_and_then
ast_expr_op_and_then()6605 ast_expr_op_and_then::ast_expr_op_and_then()
6606     : ast_expr_op() {}
6607 
ast_expr_op_and_then(const ast_expr_op_and_then & obj)6608 ast_expr_op_and_then::ast_expr_op_and_then(const ast_expr_op_and_then &obj)
6609     : ast_expr_op(obj)
6610 {
6611 }
6612 
ast_expr_op_and_then(__isl_take isl_ast_expr * ptr)6613 ast_expr_op_and_then::ast_expr_op_and_then(__isl_take isl_ast_expr *ptr)
6614     : ast_expr_op(ptr) {}
6615 
6616 ast_expr_op_and_then &ast_expr_op_and_then::operator=(ast_expr_op_and_then obj) {
6617   std::swap(this->ptr, obj.ptr);
6618   return *this;
6619 }
6620 
ctx()6621 isl::ctx ast_expr_op_and_then::ctx() const {
6622   return isl::ctx(isl_ast_expr_get_ctx(ptr));
6623 }
6624 
6625 inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_and_then &obj)
6626 {
6627   char *str = isl_ast_expr_to_str(obj.get());
6628   if (!str) {
6629     os.setstate(std::ios_base::badbit);
6630     return os;
6631   }
6632   os << str;
6633   free(str);
6634   return os;
6635 }
6636 
6637 // implementations for isl::ast_expr_op_call
ast_expr_op_call()6638 ast_expr_op_call::ast_expr_op_call()
6639     : ast_expr_op() {}
6640 
ast_expr_op_call(const ast_expr_op_call & obj)6641 ast_expr_op_call::ast_expr_op_call(const ast_expr_op_call &obj)
6642     : ast_expr_op(obj)
6643 {
6644 }
6645 
ast_expr_op_call(__isl_take isl_ast_expr * ptr)6646 ast_expr_op_call::ast_expr_op_call(__isl_take isl_ast_expr *ptr)
6647     : ast_expr_op(ptr) {}
6648 
6649 ast_expr_op_call &ast_expr_op_call::operator=(ast_expr_op_call obj) {
6650   std::swap(this->ptr, obj.ptr);
6651   return *this;
6652 }
6653 
ctx()6654 isl::ctx ast_expr_op_call::ctx() const {
6655   return isl::ctx(isl_ast_expr_get_ctx(ptr));
6656 }
6657 
6658 inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_call &obj)
6659 {
6660   char *str = isl_ast_expr_to_str(obj.get());
6661   if (!str) {
6662     os.setstate(std::ios_base::badbit);
6663     return os;
6664   }
6665   os << str;
6666   free(str);
6667   return os;
6668 }
6669 
6670 // implementations for isl::ast_expr_op_cond
ast_expr_op_cond()6671 ast_expr_op_cond::ast_expr_op_cond()
6672     : ast_expr_op() {}
6673 
ast_expr_op_cond(const ast_expr_op_cond & obj)6674 ast_expr_op_cond::ast_expr_op_cond(const ast_expr_op_cond &obj)
6675     : ast_expr_op(obj)
6676 {
6677 }
6678 
ast_expr_op_cond(__isl_take isl_ast_expr * ptr)6679 ast_expr_op_cond::ast_expr_op_cond(__isl_take isl_ast_expr *ptr)
6680     : ast_expr_op(ptr) {}
6681 
6682 ast_expr_op_cond &ast_expr_op_cond::operator=(ast_expr_op_cond obj) {
6683   std::swap(this->ptr, obj.ptr);
6684   return *this;
6685 }
6686 
ctx()6687 isl::ctx ast_expr_op_cond::ctx() const {
6688   return isl::ctx(isl_ast_expr_get_ctx(ptr));
6689 }
6690 
6691 inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_cond &obj)
6692 {
6693   char *str = isl_ast_expr_to_str(obj.get());
6694   if (!str) {
6695     os.setstate(std::ios_base::badbit);
6696     return os;
6697   }
6698   os << str;
6699   free(str);
6700   return os;
6701 }
6702 
6703 // implementations for isl::ast_expr_op_div
ast_expr_op_div()6704 ast_expr_op_div::ast_expr_op_div()
6705     : ast_expr_op() {}
6706 
ast_expr_op_div(const ast_expr_op_div & obj)6707 ast_expr_op_div::ast_expr_op_div(const ast_expr_op_div &obj)
6708     : ast_expr_op(obj)
6709 {
6710 }
6711 
ast_expr_op_div(__isl_take isl_ast_expr * ptr)6712 ast_expr_op_div::ast_expr_op_div(__isl_take isl_ast_expr *ptr)
6713     : ast_expr_op(ptr) {}
6714 
6715 ast_expr_op_div &ast_expr_op_div::operator=(ast_expr_op_div obj) {
6716   std::swap(this->ptr, obj.ptr);
6717   return *this;
6718 }
6719 
ctx()6720 isl::ctx ast_expr_op_div::ctx() const {
6721   return isl::ctx(isl_ast_expr_get_ctx(ptr));
6722 }
6723 
6724 inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_div &obj)
6725 {
6726   char *str = isl_ast_expr_to_str(obj.get());
6727   if (!str) {
6728     os.setstate(std::ios_base::badbit);
6729     return os;
6730   }
6731   os << str;
6732   free(str);
6733   return os;
6734 }
6735 
6736 // implementations for isl::ast_expr_op_eq
ast_expr_op_eq()6737 ast_expr_op_eq::ast_expr_op_eq()
6738     : ast_expr_op() {}
6739 
ast_expr_op_eq(const ast_expr_op_eq & obj)6740 ast_expr_op_eq::ast_expr_op_eq(const ast_expr_op_eq &obj)
6741     : ast_expr_op(obj)
6742 {
6743 }
6744 
ast_expr_op_eq(__isl_take isl_ast_expr * ptr)6745 ast_expr_op_eq::ast_expr_op_eq(__isl_take isl_ast_expr *ptr)
6746     : ast_expr_op(ptr) {}
6747 
6748 ast_expr_op_eq &ast_expr_op_eq::operator=(ast_expr_op_eq obj) {
6749   std::swap(this->ptr, obj.ptr);
6750   return *this;
6751 }
6752 
ctx()6753 isl::ctx ast_expr_op_eq::ctx() const {
6754   return isl::ctx(isl_ast_expr_get_ctx(ptr));
6755 }
6756 
6757 inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_eq &obj)
6758 {
6759   char *str = isl_ast_expr_to_str(obj.get());
6760   if (!str) {
6761     os.setstate(std::ios_base::badbit);
6762     return os;
6763   }
6764   os << str;
6765   free(str);
6766   return os;
6767 }
6768 
6769 // implementations for isl::ast_expr_op_fdiv_q
ast_expr_op_fdiv_q()6770 ast_expr_op_fdiv_q::ast_expr_op_fdiv_q()
6771     : ast_expr_op() {}
6772 
ast_expr_op_fdiv_q(const ast_expr_op_fdiv_q & obj)6773 ast_expr_op_fdiv_q::ast_expr_op_fdiv_q(const ast_expr_op_fdiv_q &obj)
6774     : ast_expr_op(obj)
6775 {
6776 }
6777 
ast_expr_op_fdiv_q(__isl_take isl_ast_expr * ptr)6778 ast_expr_op_fdiv_q::ast_expr_op_fdiv_q(__isl_take isl_ast_expr *ptr)
6779     : ast_expr_op(ptr) {}
6780 
6781 ast_expr_op_fdiv_q &ast_expr_op_fdiv_q::operator=(ast_expr_op_fdiv_q obj) {
6782   std::swap(this->ptr, obj.ptr);
6783   return *this;
6784 }
6785 
ctx()6786 isl::ctx ast_expr_op_fdiv_q::ctx() const {
6787   return isl::ctx(isl_ast_expr_get_ctx(ptr));
6788 }
6789 
6790 inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_fdiv_q &obj)
6791 {
6792   char *str = isl_ast_expr_to_str(obj.get());
6793   if (!str) {
6794     os.setstate(std::ios_base::badbit);
6795     return os;
6796   }
6797   os << str;
6798   free(str);
6799   return os;
6800 }
6801 
6802 // implementations for isl::ast_expr_op_ge
ast_expr_op_ge()6803 ast_expr_op_ge::ast_expr_op_ge()
6804     : ast_expr_op() {}
6805 
ast_expr_op_ge(const ast_expr_op_ge & obj)6806 ast_expr_op_ge::ast_expr_op_ge(const ast_expr_op_ge &obj)
6807     : ast_expr_op(obj)
6808 {
6809 }
6810 
ast_expr_op_ge(__isl_take isl_ast_expr * ptr)6811 ast_expr_op_ge::ast_expr_op_ge(__isl_take isl_ast_expr *ptr)
6812     : ast_expr_op(ptr) {}
6813 
6814 ast_expr_op_ge &ast_expr_op_ge::operator=(ast_expr_op_ge obj) {
6815   std::swap(this->ptr, obj.ptr);
6816   return *this;
6817 }
6818 
ctx()6819 isl::ctx ast_expr_op_ge::ctx() const {
6820   return isl::ctx(isl_ast_expr_get_ctx(ptr));
6821 }
6822 
6823 inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_ge &obj)
6824 {
6825   char *str = isl_ast_expr_to_str(obj.get());
6826   if (!str) {
6827     os.setstate(std::ios_base::badbit);
6828     return os;
6829   }
6830   os << str;
6831   free(str);
6832   return os;
6833 }
6834 
6835 // implementations for isl::ast_expr_op_gt
ast_expr_op_gt()6836 ast_expr_op_gt::ast_expr_op_gt()
6837     : ast_expr_op() {}
6838 
ast_expr_op_gt(const ast_expr_op_gt & obj)6839 ast_expr_op_gt::ast_expr_op_gt(const ast_expr_op_gt &obj)
6840     : ast_expr_op(obj)
6841 {
6842 }
6843 
ast_expr_op_gt(__isl_take isl_ast_expr * ptr)6844 ast_expr_op_gt::ast_expr_op_gt(__isl_take isl_ast_expr *ptr)
6845     : ast_expr_op(ptr) {}
6846 
6847 ast_expr_op_gt &ast_expr_op_gt::operator=(ast_expr_op_gt obj) {
6848   std::swap(this->ptr, obj.ptr);
6849   return *this;
6850 }
6851 
ctx()6852 isl::ctx ast_expr_op_gt::ctx() const {
6853   return isl::ctx(isl_ast_expr_get_ctx(ptr));
6854 }
6855 
6856 inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_gt &obj)
6857 {
6858   char *str = isl_ast_expr_to_str(obj.get());
6859   if (!str) {
6860     os.setstate(std::ios_base::badbit);
6861     return os;
6862   }
6863   os << str;
6864   free(str);
6865   return os;
6866 }
6867 
6868 // implementations for isl::ast_expr_op_le
ast_expr_op_le()6869 ast_expr_op_le::ast_expr_op_le()
6870     : ast_expr_op() {}
6871 
ast_expr_op_le(const ast_expr_op_le & obj)6872 ast_expr_op_le::ast_expr_op_le(const ast_expr_op_le &obj)
6873     : ast_expr_op(obj)
6874 {
6875 }
6876 
ast_expr_op_le(__isl_take isl_ast_expr * ptr)6877 ast_expr_op_le::ast_expr_op_le(__isl_take isl_ast_expr *ptr)
6878     : ast_expr_op(ptr) {}
6879 
6880 ast_expr_op_le &ast_expr_op_le::operator=(ast_expr_op_le obj) {
6881   std::swap(this->ptr, obj.ptr);
6882   return *this;
6883 }
6884 
ctx()6885 isl::ctx ast_expr_op_le::ctx() const {
6886   return isl::ctx(isl_ast_expr_get_ctx(ptr));
6887 }
6888 
6889 inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_le &obj)
6890 {
6891   char *str = isl_ast_expr_to_str(obj.get());
6892   if (!str) {
6893     os.setstate(std::ios_base::badbit);
6894     return os;
6895   }
6896   os << str;
6897   free(str);
6898   return os;
6899 }
6900 
6901 // implementations for isl::ast_expr_op_lt
ast_expr_op_lt()6902 ast_expr_op_lt::ast_expr_op_lt()
6903     : ast_expr_op() {}
6904 
ast_expr_op_lt(const ast_expr_op_lt & obj)6905 ast_expr_op_lt::ast_expr_op_lt(const ast_expr_op_lt &obj)
6906     : ast_expr_op(obj)
6907 {
6908 }
6909 
ast_expr_op_lt(__isl_take isl_ast_expr * ptr)6910 ast_expr_op_lt::ast_expr_op_lt(__isl_take isl_ast_expr *ptr)
6911     : ast_expr_op(ptr) {}
6912 
6913 ast_expr_op_lt &ast_expr_op_lt::operator=(ast_expr_op_lt obj) {
6914   std::swap(this->ptr, obj.ptr);
6915   return *this;
6916 }
6917 
ctx()6918 isl::ctx ast_expr_op_lt::ctx() const {
6919   return isl::ctx(isl_ast_expr_get_ctx(ptr));
6920 }
6921 
6922 inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_lt &obj)
6923 {
6924   char *str = isl_ast_expr_to_str(obj.get());
6925   if (!str) {
6926     os.setstate(std::ios_base::badbit);
6927     return os;
6928   }
6929   os << str;
6930   free(str);
6931   return os;
6932 }
6933 
6934 // implementations for isl::ast_expr_op_max
ast_expr_op_max()6935 ast_expr_op_max::ast_expr_op_max()
6936     : ast_expr_op() {}
6937 
ast_expr_op_max(const ast_expr_op_max & obj)6938 ast_expr_op_max::ast_expr_op_max(const ast_expr_op_max &obj)
6939     : ast_expr_op(obj)
6940 {
6941 }
6942 
ast_expr_op_max(__isl_take isl_ast_expr * ptr)6943 ast_expr_op_max::ast_expr_op_max(__isl_take isl_ast_expr *ptr)
6944     : ast_expr_op(ptr) {}
6945 
6946 ast_expr_op_max &ast_expr_op_max::operator=(ast_expr_op_max obj) {
6947   std::swap(this->ptr, obj.ptr);
6948   return *this;
6949 }
6950 
ctx()6951 isl::ctx ast_expr_op_max::ctx() const {
6952   return isl::ctx(isl_ast_expr_get_ctx(ptr));
6953 }
6954 
6955 inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_max &obj)
6956 {
6957   char *str = isl_ast_expr_to_str(obj.get());
6958   if (!str) {
6959     os.setstate(std::ios_base::badbit);
6960     return os;
6961   }
6962   os << str;
6963   free(str);
6964   return os;
6965 }
6966 
6967 // implementations for isl::ast_expr_op_member
ast_expr_op_member()6968 ast_expr_op_member::ast_expr_op_member()
6969     : ast_expr_op() {}
6970 
ast_expr_op_member(const ast_expr_op_member & obj)6971 ast_expr_op_member::ast_expr_op_member(const ast_expr_op_member &obj)
6972     : ast_expr_op(obj)
6973 {
6974 }
6975 
ast_expr_op_member(__isl_take isl_ast_expr * ptr)6976 ast_expr_op_member::ast_expr_op_member(__isl_take isl_ast_expr *ptr)
6977     : ast_expr_op(ptr) {}
6978 
6979 ast_expr_op_member &ast_expr_op_member::operator=(ast_expr_op_member obj) {
6980   std::swap(this->ptr, obj.ptr);
6981   return *this;
6982 }
6983 
ctx()6984 isl::ctx ast_expr_op_member::ctx() const {
6985   return isl::ctx(isl_ast_expr_get_ctx(ptr));
6986 }
6987 
6988 inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_member &obj)
6989 {
6990   char *str = isl_ast_expr_to_str(obj.get());
6991   if (!str) {
6992     os.setstate(std::ios_base::badbit);
6993     return os;
6994   }
6995   os << str;
6996   free(str);
6997   return os;
6998 }
6999 
7000 // implementations for isl::ast_expr_op_min
ast_expr_op_min()7001 ast_expr_op_min::ast_expr_op_min()
7002     : ast_expr_op() {}
7003 
ast_expr_op_min(const ast_expr_op_min & obj)7004 ast_expr_op_min::ast_expr_op_min(const ast_expr_op_min &obj)
7005     : ast_expr_op(obj)
7006 {
7007 }
7008 
ast_expr_op_min(__isl_take isl_ast_expr * ptr)7009 ast_expr_op_min::ast_expr_op_min(__isl_take isl_ast_expr *ptr)
7010     : ast_expr_op(ptr) {}
7011 
7012 ast_expr_op_min &ast_expr_op_min::operator=(ast_expr_op_min obj) {
7013   std::swap(this->ptr, obj.ptr);
7014   return *this;
7015 }
7016 
ctx()7017 isl::ctx ast_expr_op_min::ctx() const {
7018   return isl::ctx(isl_ast_expr_get_ctx(ptr));
7019 }
7020 
7021 inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_min &obj)
7022 {
7023   char *str = isl_ast_expr_to_str(obj.get());
7024   if (!str) {
7025     os.setstate(std::ios_base::badbit);
7026     return os;
7027   }
7028   os << str;
7029   free(str);
7030   return os;
7031 }
7032 
7033 // implementations for isl::ast_expr_op_minus
ast_expr_op_minus()7034 ast_expr_op_minus::ast_expr_op_minus()
7035     : ast_expr_op() {}
7036 
ast_expr_op_minus(const ast_expr_op_minus & obj)7037 ast_expr_op_minus::ast_expr_op_minus(const ast_expr_op_minus &obj)
7038     : ast_expr_op(obj)
7039 {
7040 }
7041 
ast_expr_op_minus(__isl_take isl_ast_expr * ptr)7042 ast_expr_op_minus::ast_expr_op_minus(__isl_take isl_ast_expr *ptr)
7043     : ast_expr_op(ptr) {}
7044 
7045 ast_expr_op_minus &ast_expr_op_minus::operator=(ast_expr_op_minus obj) {
7046   std::swap(this->ptr, obj.ptr);
7047   return *this;
7048 }
7049 
ctx()7050 isl::ctx ast_expr_op_minus::ctx() const {
7051   return isl::ctx(isl_ast_expr_get_ctx(ptr));
7052 }
7053 
7054 inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_minus &obj)
7055 {
7056   char *str = isl_ast_expr_to_str(obj.get());
7057   if (!str) {
7058     os.setstate(std::ios_base::badbit);
7059     return os;
7060   }
7061   os << str;
7062   free(str);
7063   return os;
7064 }
7065 
7066 // implementations for isl::ast_expr_op_mul
ast_expr_op_mul()7067 ast_expr_op_mul::ast_expr_op_mul()
7068     : ast_expr_op() {}
7069 
ast_expr_op_mul(const ast_expr_op_mul & obj)7070 ast_expr_op_mul::ast_expr_op_mul(const ast_expr_op_mul &obj)
7071     : ast_expr_op(obj)
7072 {
7073 }
7074 
ast_expr_op_mul(__isl_take isl_ast_expr * ptr)7075 ast_expr_op_mul::ast_expr_op_mul(__isl_take isl_ast_expr *ptr)
7076     : ast_expr_op(ptr) {}
7077 
7078 ast_expr_op_mul &ast_expr_op_mul::operator=(ast_expr_op_mul obj) {
7079   std::swap(this->ptr, obj.ptr);
7080   return *this;
7081 }
7082 
ctx()7083 isl::ctx ast_expr_op_mul::ctx() const {
7084   return isl::ctx(isl_ast_expr_get_ctx(ptr));
7085 }
7086 
7087 inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_mul &obj)
7088 {
7089   char *str = isl_ast_expr_to_str(obj.get());
7090   if (!str) {
7091     os.setstate(std::ios_base::badbit);
7092     return os;
7093   }
7094   os << str;
7095   free(str);
7096   return os;
7097 }
7098 
7099 // implementations for isl::ast_expr_op_or
ast_expr_op_or()7100 ast_expr_op_or::ast_expr_op_or()
7101     : ast_expr_op() {}
7102 
ast_expr_op_or(const ast_expr_op_or & obj)7103 ast_expr_op_or::ast_expr_op_or(const ast_expr_op_or &obj)
7104     : ast_expr_op(obj)
7105 {
7106 }
7107 
ast_expr_op_or(__isl_take isl_ast_expr * ptr)7108 ast_expr_op_or::ast_expr_op_or(__isl_take isl_ast_expr *ptr)
7109     : ast_expr_op(ptr) {}
7110 
7111 ast_expr_op_or &ast_expr_op_or::operator=(ast_expr_op_or obj) {
7112   std::swap(this->ptr, obj.ptr);
7113   return *this;
7114 }
7115 
ctx()7116 isl::ctx ast_expr_op_or::ctx() const {
7117   return isl::ctx(isl_ast_expr_get_ctx(ptr));
7118 }
7119 
7120 inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_or &obj)
7121 {
7122   char *str = isl_ast_expr_to_str(obj.get());
7123   if (!str) {
7124     os.setstate(std::ios_base::badbit);
7125     return os;
7126   }
7127   os << str;
7128   free(str);
7129   return os;
7130 }
7131 
7132 // implementations for isl::ast_expr_op_or_else
ast_expr_op_or_else()7133 ast_expr_op_or_else::ast_expr_op_or_else()
7134     : ast_expr_op() {}
7135 
ast_expr_op_or_else(const ast_expr_op_or_else & obj)7136 ast_expr_op_or_else::ast_expr_op_or_else(const ast_expr_op_or_else &obj)
7137     : ast_expr_op(obj)
7138 {
7139 }
7140 
ast_expr_op_or_else(__isl_take isl_ast_expr * ptr)7141 ast_expr_op_or_else::ast_expr_op_or_else(__isl_take isl_ast_expr *ptr)
7142     : ast_expr_op(ptr) {}
7143 
7144 ast_expr_op_or_else &ast_expr_op_or_else::operator=(ast_expr_op_or_else obj) {
7145   std::swap(this->ptr, obj.ptr);
7146   return *this;
7147 }
7148 
ctx()7149 isl::ctx ast_expr_op_or_else::ctx() const {
7150   return isl::ctx(isl_ast_expr_get_ctx(ptr));
7151 }
7152 
7153 inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_or_else &obj)
7154 {
7155   char *str = isl_ast_expr_to_str(obj.get());
7156   if (!str) {
7157     os.setstate(std::ios_base::badbit);
7158     return os;
7159   }
7160   os << str;
7161   free(str);
7162   return os;
7163 }
7164 
7165 // implementations for isl::ast_expr_op_pdiv_q
ast_expr_op_pdiv_q()7166 ast_expr_op_pdiv_q::ast_expr_op_pdiv_q()
7167     : ast_expr_op() {}
7168 
ast_expr_op_pdiv_q(const ast_expr_op_pdiv_q & obj)7169 ast_expr_op_pdiv_q::ast_expr_op_pdiv_q(const ast_expr_op_pdiv_q &obj)
7170     : ast_expr_op(obj)
7171 {
7172 }
7173 
ast_expr_op_pdiv_q(__isl_take isl_ast_expr * ptr)7174 ast_expr_op_pdiv_q::ast_expr_op_pdiv_q(__isl_take isl_ast_expr *ptr)
7175     : ast_expr_op(ptr) {}
7176 
7177 ast_expr_op_pdiv_q &ast_expr_op_pdiv_q::operator=(ast_expr_op_pdiv_q obj) {
7178   std::swap(this->ptr, obj.ptr);
7179   return *this;
7180 }
7181 
ctx()7182 isl::ctx ast_expr_op_pdiv_q::ctx() const {
7183   return isl::ctx(isl_ast_expr_get_ctx(ptr));
7184 }
7185 
7186 inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_pdiv_q &obj)
7187 {
7188   char *str = isl_ast_expr_to_str(obj.get());
7189   if (!str) {
7190     os.setstate(std::ios_base::badbit);
7191     return os;
7192   }
7193   os << str;
7194   free(str);
7195   return os;
7196 }
7197 
7198 // implementations for isl::ast_expr_op_pdiv_r
ast_expr_op_pdiv_r()7199 ast_expr_op_pdiv_r::ast_expr_op_pdiv_r()
7200     : ast_expr_op() {}
7201 
ast_expr_op_pdiv_r(const ast_expr_op_pdiv_r & obj)7202 ast_expr_op_pdiv_r::ast_expr_op_pdiv_r(const ast_expr_op_pdiv_r &obj)
7203     : ast_expr_op(obj)
7204 {
7205 }
7206 
ast_expr_op_pdiv_r(__isl_take isl_ast_expr * ptr)7207 ast_expr_op_pdiv_r::ast_expr_op_pdiv_r(__isl_take isl_ast_expr *ptr)
7208     : ast_expr_op(ptr) {}
7209 
7210 ast_expr_op_pdiv_r &ast_expr_op_pdiv_r::operator=(ast_expr_op_pdiv_r obj) {
7211   std::swap(this->ptr, obj.ptr);
7212   return *this;
7213 }
7214 
ctx()7215 isl::ctx ast_expr_op_pdiv_r::ctx() const {
7216   return isl::ctx(isl_ast_expr_get_ctx(ptr));
7217 }
7218 
7219 inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_pdiv_r &obj)
7220 {
7221   char *str = isl_ast_expr_to_str(obj.get());
7222   if (!str) {
7223     os.setstate(std::ios_base::badbit);
7224     return os;
7225   }
7226   os << str;
7227   free(str);
7228   return os;
7229 }
7230 
7231 // implementations for isl::ast_expr_op_select
ast_expr_op_select()7232 ast_expr_op_select::ast_expr_op_select()
7233     : ast_expr_op() {}
7234 
ast_expr_op_select(const ast_expr_op_select & obj)7235 ast_expr_op_select::ast_expr_op_select(const ast_expr_op_select &obj)
7236     : ast_expr_op(obj)
7237 {
7238 }
7239 
ast_expr_op_select(__isl_take isl_ast_expr * ptr)7240 ast_expr_op_select::ast_expr_op_select(__isl_take isl_ast_expr *ptr)
7241     : ast_expr_op(ptr) {}
7242 
7243 ast_expr_op_select &ast_expr_op_select::operator=(ast_expr_op_select obj) {
7244   std::swap(this->ptr, obj.ptr);
7245   return *this;
7246 }
7247 
ctx()7248 isl::ctx ast_expr_op_select::ctx() const {
7249   return isl::ctx(isl_ast_expr_get_ctx(ptr));
7250 }
7251 
7252 inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_select &obj)
7253 {
7254   char *str = isl_ast_expr_to_str(obj.get());
7255   if (!str) {
7256     os.setstate(std::ios_base::badbit);
7257     return os;
7258   }
7259   os << str;
7260   free(str);
7261   return os;
7262 }
7263 
7264 // implementations for isl::ast_expr_op_sub
ast_expr_op_sub()7265 ast_expr_op_sub::ast_expr_op_sub()
7266     : ast_expr_op() {}
7267 
ast_expr_op_sub(const ast_expr_op_sub & obj)7268 ast_expr_op_sub::ast_expr_op_sub(const ast_expr_op_sub &obj)
7269     : ast_expr_op(obj)
7270 {
7271 }
7272 
ast_expr_op_sub(__isl_take isl_ast_expr * ptr)7273 ast_expr_op_sub::ast_expr_op_sub(__isl_take isl_ast_expr *ptr)
7274     : ast_expr_op(ptr) {}
7275 
7276 ast_expr_op_sub &ast_expr_op_sub::operator=(ast_expr_op_sub obj) {
7277   std::swap(this->ptr, obj.ptr);
7278   return *this;
7279 }
7280 
ctx()7281 isl::ctx ast_expr_op_sub::ctx() const {
7282   return isl::ctx(isl_ast_expr_get_ctx(ptr));
7283 }
7284 
7285 inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_sub &obj)
7286 {
7287   char *str = isl_ast_expr_to_str(obj.get());
7288   if (!str) {
7289     os.setstate(std::ios_base::badbit);
7290     return os;
7291   }
7292   os << str;
7293   free(str);
7294   return os;
7295 }
7296 
7297 // implementations for isl::ast_expr_op_zdiv_r
ast_expr_op_zdiv_r()7298 ast_expr_op_zdiv_r::ast_expr_op_zdiv_r()
7299     : ast_expr_op() {}
7300 
ast_expr_op_zdiv_r(const ast_expr_op_zdiv_r & obj)7301 ast_expr_op_zdiv_r::ast_expr_op_zdiv_r(const ast_expr_op_zdiv_r &obj)
7302     : ast_expr_op(obj)
7303 {
7304 }
7305 
ast_expr_op_zdiv_r(__isl_take isl_ast_expr * ptr)7306 ast_expr_op_zdiv_r::ast_expr_op_zdiv_r(__isl_take isl_ast_expr *ptr)
7307     : ast_expr_op(ptr) {}
7308 
7309 ast_expr_op_zdiv_r &ast_expr_op_zdiv_r::operator=(ast_expr_op_zdiv_r obj) {
7310   std::swap(this->ptr, obj.ptr);
7311   return *this;
7312 }
7313 
ctx()7314 isl::ctx ast_expr_op_zdiv_r::ctx() const {
7315   return isl::ctx(isl_ast_expr_get_ctx(ptr));
7316 }
7317 
7318 inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_zdiv_r &obj)
7319 {
7320   char *str = isl_ast_expr_to_str(obj.get());
7321   if (!str) {
7322     os.setstate(std::ios_base::badbit);
7323     return os;
7324   }
7325   os << str;
7326   free(str);
7327   return os;
7328 }
7329 
7330 // implementations for isl::ast_node
manage(__isl_take isl_ast_node * ptr)7331 ast_node manage(__isl_take isl_ast_node *ptr) {
7332   return ast_node(ptr);
7333 }
manage_copy(__isl_keep isl_ast_node * ptr)7334 ast_node manage_copy(__isl_keep isl_ast_node *ptr) {
7335   ptr = isl_ast_node_copy(ptr);
7336   return ast_node(ptr);
7337 }
7338 
ast_node()7339 ast_node::ast_node()
7340     : ptr(nullptr) {}
7341 
ast_node(const ast_node & obj)7342 ast_node::ast_node(const ast_node &obj)
7343     : ptr(nullptr)
7344 {
7345   ptr = obj.copy();
7346 }
7347 
ast_node(__isl_take isl_ast_node * ptr)7348 ast_node::ast_node(__isl_take isl_ast_node *ptr)
7349     : ptr(ptr) {}
7350 
7351 ast_node &ast_node::operator=(ast_node obj) {
7352   std::swap(this->ptr, obj.ptr);
7353   return *this;
7354 }
7355 
~ast_node()7356 ast_node::~ast_node() {
7357   if (ptr)
7358     isl_ast_node_free(ptr);
7359 }
7360 
copy()7361 __isl_give isl_ast_node *ast_node::copy() const & {
7362   return isl_ast_node_copy(ptr);
7363 }
7364 
get()7365 __isl_keep isl_ast_node *ast_node::get() const {
7366   return ptr;
7367 }
7368 
release()7369 __isl_give isl_ast_node *ast_node::release() {
7370   isl_ast_node *tmp = ptr;
7371   ptr = nullptr;
7372   return tmp;
7373 }
7374 
is_null()7375 bool ast_node::is_null() const {
7376   return ptr == nullptr;
7377 }
7378 
7379 template <typename T, typename>
isa_type(T subtype)7380 boolean ast_node::isa_type(T subtype) const
7381 {
7382   if (is_null())
7383     return boolean();
7384   return isl_ast_node_get_type(get()) == subtype;
7385 }
7386 template <class T>
isa()7387 boolean ast_node::isa() const
7388 {
7389   return isa_type<decltype(T::type)>(T::type);
7390 }
7391 template <class T>
as()7392 T ast_node::as() const
7393 {
7394  if (isa<T>().is_false())
7395     isl_die(ctx().get(), isl_error_invalid, "not an object of the requested subtype", return T());
7396   return T(copy());
7397 }
7398 
ctx()7399 isl::ctx ast_node::ctx() const {
7400   return isl::ctx(isl_ast_node_get_ctx(ptr));
7401 }
7402 
annotation()7403 isl::id ast_node::annotation() const
7404 {
7405   auto res = isl_ast_node_get_annotation(get());
7406   return manage(res);
7407 }
7408 
get_annotation()7409 isl::id ast_node::get_annotation() const
7410 {
7411   return annotation();
7412 }
7413 
to_C_str()7414 std::string ast_node::to_C_str() const
7415 {
7416   auto res = isl_ast_node_to_C_str(get());
7417   std::string tmp(res);
7418   free(res);
7419   return tmp;
7420 }
7421 
to_list()7422 isl::ast_node_list ast_node::to_list() const
7423 {
7424   auto res = isl_ast_node_to_list(copy());
7425   return manage(res);
7426 }
7427 
7428 inline std::ostream &operator<<(std::ostream &os, const ast_node &obj)
7429 {
7430   char *str = isl_ast_node_to_str(obj.get());
7431   if (!str) {
7432     os.setstate(std::ios_base::badbit);
7433     return os;
7434   }
7435   os << str;
7436   free(str);
7437   return os;
7438 }
7439 
7440 // implementations for isl::ast_node_block
ast_node_block()7441 ast_node_block::ast_node_block()
7442     : ast_node() {}
7443 
ast_node_block(const ast_node_block & obj)7444 ast_node_block::ast_node_block(const ast_node_block &obj)
7445     : ast_node(obj)
7446 {
7447 }
7448 
ast_node_block(__isl_take isl_ast_node * ptr)7449 ast_node_block::ast_node_block(__isl_take isl_ast_node *ptr)
7450     : ast_node(ptr) {}
7451 
7452 ast_node_block &ast_node_block::operator=(ast_node_block obj) {
7453   std::swap(this->ptr, obj.ptr);
7454   return *this;
7455 }
7456 
ctx()7457 isl::ctx ast_node_block::ctx() const {
7458   return isl::ctx(isl_ast_node_get_ctx(ptr));
7459 }
7460 
children()7461 isl::ast_node_list ast_node_block::children() const
7462 {
7463   auto res = isl_ast_node_block_get_children(get());
7464   return manage(res);
7465 }
7466 
get_children()7467 isl::ast_node_list ast_node_block::get_children() const
7468 {
7469   return children();
7470 }
7471 
7472 inline std::ostream &operator<<(std::ostream &os, const ast_node_block &obj)
7473 {
7474   char *str = isl_ast_node_to_str(obj.get());
7475   if (!str) {
7476     os.setstate(std::ios_base::badbit);
7477     return os;
7478   }
7479   os << str;
7480   free(str);
7481   return os;
7482 }
7483 
7484 // implementations for isl::ast_node_for
ast_node_for()7485 ast_node_for::ast_node_for()
7486     : ast_node() {}
7487 
ast_node_for(const ast_node_for & obj)7488 ast_node_for::ast_node_for(const ast_node_for &obj)
7489     : ast_node(obj)
7490 {
7491 }
7492 
ast_node_for(__isl_take isl_ast_node * ptr)7493 ast_node_for::ast_node_for(__isl_take isl_ast_node *ptr)
7494     : ast_node(ptr) {}
7495 
7496 ast_node_for &ast_node_for::operator=(ast_node_for obj) {
7497   std::swap(this->ptr, obj.ptr);
7498   return *this;
7499 }
7500 
ctx()7501 isl::ctx ast_node_for::ctx() const {
7502   return isl::ctx(isl_ast_node_get_ctx(ptr));
7503 }
7504 
body()7505 isl::ast_node ast_node_for::body() const
7506 {
7507   auto res = isl_ast_node_for_get_body(get());
7508   return manage(res);
7509 }
7510 
get_body()7511 isl::ast_node ast_node_for::get_body() const
7512 {
7513   return body();
7514 }
7515 
cond()7516 isl::ast_expr ast_node_for::cond() const
7517 {
7518   auto res = isl_ast_node_for_get_cond(get());
7519   return manage(res);
7520 }
7521 
get_cond()7522 isl::ast_expr ast_node_for::get_cond() const
7523 {
7524   return cond();
7525 }
7526 
inc()7527 isl::ast_expr ast_node_for::inc() const
7528 {
7529   auto res = isl_ast_node_for_get_inc(get());
7530   return manage(res);
7531 }
7532 
get_inc()7533 isl::ast_expr ast_node_for::get_inc() const
7534 {
7535   return inc();
7536 }
7537 
init()7538 isl::ast_expr ast_node_for::init() const
7539 {
7540   auto res = isl_ast_node_for_get_init(get());
7541   return manage(res);
7542 }
7543 
get_init()7544 isl::ast_expr ast_node_for::get_init() const
7545 {
7546   return init();
7547 }
7548 
is_degenerate()7549 boolean ast_node_for::is_degenerate() const
7550 {
7551   auto res = isl_ast_node_for_is_degenerate(get());
7552   return manage(res);
7553 }
7554 
iterator()7555 isl::ast_expr ast_node_for::iterator() const
7556 {
7557   auto res = isl_ast_node_for_get_iterator(get());
7558   return manage(res);
7559 }
7560 
get_iterator()7561 isl::ast_expr ast_node_for::get_iterator() const
7562 {
7563   return iterator();
7564 }
7565 
7566 inline std::ostream &operator<<(std::ostream &os, const ast_node_for &obj)
7567 {
7568   char *str = isl_ast_node_to_str(obj.get());
7569   if (!str) {
7570     os.setstate(std::ios_base::badbit);
7571     return os;
7572   }
7573   os << str;
7574   free(str);
7575   return os;
7576 }
7577 
7578 // implementations for isl::ast_node_if
ast_node_if()7579 ast_node_if::ast_node_if()
7580     : ast_node() {}
7581 
ast_node_if(const ast_node_if & obj)7582 ast_node_if::ast_node_if(const ast_node_if &obj)
7583     : ast_node(obj)
7584 {
7585 }
7586 
ast_node_if(__isl_take isl_ast_node * ptr)7587 ast_node_if::ast_node_if(__isl_take isl_ast_node *ptr)
7588     : ast_node(ptr) {}
7589 
7590 ast_node_if &ast_node_if::operator=(ast_node_if obj) {
7591   std::swap(this->ptr, obj.ptr);
7592   return *this;
7593 }
7594 
ctx()7595 isl::ctx ast_node_if::ctx() const {
7596   return isl::ctx(isl_ast_node_get_ctx(ptr));
7597 }
7598 
cond()7599 isl::ast_expr ast_node_if::cond() const
7600 {
7601   auto res = isl_ast_node_if_get_cond(get());
7602   return manage(res);
7603 }
7604 
get_cond()7605 isl::ast_expr ast_node_if::get_cond() const
7606 {
7607   return cond();
7608 }
7609 
else_node()7610 isl::ast_node ast_node_if::else_node() const
7611 {
7612   auto res = isl_ast_node_if_get_else_node(get());
7613   return manage(res);
7614 }
7615 
get_else_node()7616 isl::ast_node ast_node_if::get_else_node() const
7617 {
7618   return else_node();
7619 }
7620 
has_else_node()7621 boolean ast_node_if::has_else_node() const
7622 {
7623   auto res = isl_ast_node_if_has_else_node(get());
7624   return manage(res);
7625 }
7626 
then_node()7627 isl::ast_node ast_node_if::then_node() const
7628 {
7629   auto res = isl_ast_node_if_get_then_node(get());
7630   return manage(res);
7631 }
7632 
get_then_node()7633 isl::ast_node ast_node_if::get_then_node() const
7634 {
7635   return then_node();
7636 }
7637 
7638 inline std::ostream &operator<<(std::ostream &os, const ast_node_if &obj)
7639 {
7640   char *str = isl_ast_node_to_str(obj.get());
7641   if (!str) {
7642     os.setstate(std::ios_base::badbit);
7643     return os;
7644   }
7645   os << str;
7646   free(str);
7647   return os;
7648 }
7649 
7650 // implementations for isl::ast_node_list
manage(__isl_take isl_ast_node_list * ptr)7651 ast_node_list manage(__isl_take isl_ast_node_list *ptr) {
7652   return ast_node_list(ptr);
7653 }
manage_copy(__isl_keep isl_ast_node_list * ptr)7654 ast_node_list manage_copy(__isl_keep isl_ast_node_list *ptr) {
7655   ptr = isl_ast_node_list_copy(ptr);
7656   return ast_node_list(ptr);
7657 }
7658 
ast_node_list()7659 ast_node_list::ast_node_list()
7660     : ptr(nullptr) {}
7661 
ast_node_list(const ast_node_list & obj)7662 ast_node_list::ast_node_list(const ast_node_list &obj)
7663     : ptr(nullptr)
7664 {
7665   ptr = obj.copy();
7666 }
7667 
ast_node_list(__isl_take isl_ast_node_list * ptr)7668 ast_node_list::ast_node_list(__isl_take isl_ast_node_list *ptr)
7669     : ptr(ptr) {}
7670 
ast_node_list(isl::ctx ctx,int n)7671 ast_node_list::ast_node_list(isl::ctx ctx, int n)
7672 {
7673   auto res = isl_ast_node_list_alloc(ctx.release(), n);
7674   ptr = res;
7675 }
7676 
ast_node_list(isl::ast_node el)7677 ast_node_list::ast_node_list(isl::ast_node el)
7678 {
7679   auto res = isl_ast_node_list_from_ast_node(el.release());
7680   ptr = res;
7681 }
7682 
7683 ast_node_list &ast_node_list::operator=(ast_node_list obj) {
7684   std::swap(this->ptr, obj.ptr);
7685   return *this;
7686 }
7687 
~ast_node_list()7688 ast_node_list::~ast_node_list() {
7689   if (ptr)
7690     isl_ast_node_list_free(ptr);
7691 }
7692 
copy()7693 __isl_give isl_ast_node_list *ast_node_list::copy() const & {
7694   return isl_ast_node_list_copy(ptr);
7695 }
7696 
get()7697 __isl_keep isl_ast_node_list *ast_node_list::get() const {
7698   return ptr;
7699 }
7700 
release()7701 __isl_give isl_ast_node_list *ast_node_list::release() {
7702   isl_ast_node_list *tmp = ptr;
7703   ptr = nullptr;
7704   return tmp;
7705 }
7706 
is_null()7707 bool ast_node_list::is_null() const {
7708   return ptr == nullptr;
7709 }
7710 
ctx()7711 isl::ctx ast_node_list::ctx() const {
7712   return isl::ctx(isl_ast_node_list_get_ctx(ptr));
7713 }
7714 
add(isl::ast_node el)7715 isl::ast_node_list ast_node_list::add(isl::ast_node el) const
7716 {
7717   auto res = isl_ast_node_list_add(copy(), el.release());
7718   return manage(res);
7719 }
7720 
at(int index)7721 isl::ast_node ast_node_list::at(int index) const
7722 {
7723   auto res = isl_ast_node_list_get_at(get(), index);
7724   return manage(res);
7725 }
7726 
get_at(int index)7727 isl::ast_node ast_node_list::get_at(int index) const
7728 {
7729   return at(index);
7730 }
7731 
clear()7732 isl::ast_node_list ast_node_list::clear() const
7733 {
7734   auto res = isl_ast_node_list_clear(copy());
7735   return manage(res);
7736 }
7737 
concat(isl::ast_node_list list2)7738 isl::ast_node_list ast_node_list::concat(isl::ast_node_list list2) const
7739 {
7740   auto res = isl_ast_node_list_concat(copy(), list2.release());
7741   return manage(res);
7742 }
7743 
drop(unsigned int first,unsigned int n)7744 isl::ast_node_list ast_node_list::drop(unsigned int first, unsigned int n) const
7745 {
7746   auto res = isl_ast_node_list_drop(copy(), first, n);
7747   return manage(res);
7748 }
7749 
foreach(const std::function<stat (isl::ast_node)> & fn)7750 stat ast_node_list::foreach(const std::function<stat(isl::ast_node)> &fn) const
7751 {
7752   struct fn_data {
7753     std::function<stat(isl::ast_node)> func;
7754   } fn_data = { fn };
7755   auto fn_lambda = [](isl_ast_node *arg_0, void *arg_1) -> isl_stat {
7756     auto *data = static_cast<struct fn_data *>(arg_1);
7757     auto ret = (data->func)(manage(arg_0));
7758     return ret.release();
7759   };
7760   auto res = isl_ast_node_list_foreach(get(), fn_lambda, &fn_data);
7761   return manage(res);
7762 }
7763 
insert(unsigned int pos,isl::ast_node el)7764 isl::ast_node_list ast_node_list::insert(unsigned int pos, isl::ast_node el) const
7765 {
7766   auto res = isl_ast_node_list_insert(copy(), pos, el.release());
7767   return manage(res);
7768 }
7769 
size()7770 class size ast_node_list::size() const
7771 {
7772   auto res = isl_ast_node_list_size(get());
7773   return manage(res);
7774 }
7775 
7776 inline std::ostream &operator<<(std::ostream &os, const ast_node_list &obj)
7777 {
7778   char *str = isl_ast_node_list_to_str(obj.get());
7779   if (!str) {
7780     os.setstate(std::ios_base::badbit);
7781     return os;
7782   }
7783   os << str;
7784   free(str);
7785   return os;
7786 }
7787 
7788 // implementations for isl::ast_node_mark
ast_node_mark()7789 ast_node_mark::ast_node_mark()
7790     : ast_node() {}
7791 
ast_node_mark(const ast_node_mark & obj)7792 ast_node_mark::ast_node_mark(const ast_node_mark &obj)
7793     : ast_node(obj)
7794 {
7795 }
7796 
ast_node_mark(__isl_take isl_ast_node * ptr)7797 ast_node_mark::ast_node_mark(__isl_take isl_ast_node *ptr)
7798     : ast_node(ptr) {}
7799 
7800 ast_node_mark &ast_node_mark::operator=(ast_node_mark obj) {
7801   std::swap(this->ptr, obj.ptr);
7802   return *this;
7803 }
7804 
ctx()7805 isl::ctx ast_node_mark::ctx() const {
7806   return isl::ctx(isl_ast_node_get_ctx(ptr));
7807 }
7808 
id()7809 isl::id ast_node_mark::id() const
7810 {
7811   auto res = isl_ast_node_mark_get_id(get());
7812   return manage(res);
7813 }
7814 
get_id()7815 isl::id ast_node_mark::get_id() const
7816 {
7817   return id();
7818 }
7819 
node()7820 isl::ast_node ast_node_mark::node() const
7821 {
7822   auto res = isl_ast_node_mark_get_node(get());
7823   return manage(res);
7824 }
7825 
get_node()7826 isl::ast_node ast_node_mark::get_node() const
7827 {
7828   return node();
7829 }
7830 
7831 inline std::ostream &operator<<(std::ostream &os, const ast_node_mark &obj)
7832 {
7833   char *str = isl_ast_node_to_str(obj.get());
7834   if (!str) {
7835     os.setstate(std::ios_base::badbit);
7836     return os;
7837   }
7838   os << str;
7839   free(str);
7840   return os;
7841 }
7842 
7843 // implementations for isl::ast_node_user
ast_node_user()7844 ast_node_user::ast_node_user()
7845     : ast_node() {}
7846 
ast_node_user(const ast_node_user & obj)7847 ast_node_user::ast_node_user(const ast_node_user &obj)
7848     : ast_node(obj)
7849 {
7850 }
7851 
ast_node_user(__isl_take isl_ast_node * ptr)7852 ast_node_user::ast_node_user(__isl_take isl_ast_node *ptr)
7853     : ast_node(ptr) {}
7854 
7855 ast_node_user &ast_node_user::operator=(ast_node_user obj) {
7856   std::swap(this->ptr, obj.ptr);
7857   return *this;
7858 }
7859 
ctx()7860 isl::ctx ast_node_user::ctx() const {
7861   return isl::ctx(isl_ast_node_get_ctx(ptr));
7862 }
7863 
expr()7864 isl::ast_expr ast_node_user::expr() const
7865 {
7866   auto res = isl_ast_node_user_get_expr(get());
7867   return manage(res);
7868 }
7869 
get_expr()7870 isl::ast_expr ast_node_user::get_expr() const
7871 {
7872   return expr();
7873 }
7874 
7875 inline std::ostream &operator<<(std::ostream &os, const ast_node_user &obj)
7876 {
7877   char *str = isl_ast_node_to_str(obj.get());
7878   if (!str) {
7879     os.setstate(std::ios_base::badbit);
7880     return os;
7881   }
7882   os << str;
7883   free(str);
7884   return os;
7885 }
7886 
7887 // implementations for isl::basic_map
manage(__isl_take isl_basic_map * ptr)7888 basic_map manage(__isl_take isl_basic_map *ptr) {
7889   return basic_map(ptr);
7890 }
manage_copy(__isl_keep isl_basic_map * ptr)7891 basic_map manage_copy(__isl_keep isl_basic_map *ptr) {
7892   ptr = isl_basic_map_copy(ptr);
7893   return basic_map(ptr);
7894 }
7895 
basic_map()7896 basic_map::basic_map()
7897     : ptr(nullptr) {}
7898 
basic_map(const basic_map & obj)7899 basic_map::basic_map(const basic_map &obj)
7900     : ptr(nullptr)
7901 {
7902   ptr = obj.copy();
7903 }
7904 
basic_map(__isl_take isl_basic_map * ptr)7905 basic_map::basic_map(__isl_take isl_basic_map *ptr)
7906     : ptr(ptr) {}
7907 
basic_map(isl::ctx ctx,const std::string & str)7908 basic_map::basic_map(isl::ctx ctx, const std::string &str)
7909 {
7910   auto res = isl_basic_map_read_from_str(ctx.release(), str.c_str());
7911   ptr = res;
7912 }
7913 
7914 basic_map &basic_map::operator=(basic_map obj) {
7915   std::swap(this->ptr, obj.ptr);
7916   return *this;
7917 }
7918 
~basic_map()7919 basic_map::~basic_map() {
7920   if (ptr)
7921     isl_basic_map_free(ptr);
7922 }
7923 
copy()7924 __isl_give isl_basic_map *basic_map::copy() const & {
7925   return isl_basic_map_copy(ptr);
7926 }
7927 
get()7928 __isl_keep isl_basic_map *basic_map::get() const {
7929   return ptr;
7930 }
7931 
release()7932 __isl_give isl_basic_map *basic_map::release() {
7933   isl_basic_map *tmp = ptr;
7934   ptr = nullptr;
7935   return tmp;
7936 }
7937 
is_null()7938 bool basic_map::is_null() const {
7939   return ptr == nullptr;
7940 }
7941 
ctx()7942 isl::ctx basic_map::ctx() const {
7943   return isl::ctx(isl_basic_map_get_ctx(ptr));
7944 }
7945 
add_constraint(const isl::constraint & constraint)7946 isl::map basic_map::add_constraint(const isl::constraint &constraint) const
7947 {
7948   return isl::map(*this).add_constraint(constraint);
7949 }
7950 
add_dims(isl::dim type,unsigned int n)7951 isl::map basic_map::add_dims(isl::dim type, unsigned int n) const
7952 {
7953   return isl::map(*this).add_dims(type, n);
7954 }
7955 
affine_hull()7956 isl::basic_map basic_map::affine_hull() const
7957 {
7958   auto res = isl_basic_map_affine_hull(copy());
7959   return manage(res);
7960 }
7961 
align_params(const isl::space & model)7962 isl::map basic_map::align_params(const isl::space &model) const
7963 {
7964   return isl::map(*this).align_params(model);
7965 }
7966 
apply_domain(isl::basic_map bmap2)7967 isl::basic_map basic_map::apply_domain(isl::basic_map bmap2) const
7968 {
7969   auto res = isl_basic_map_apply_domain(copy(), bmap2.release());
7970   return manage(res);
7971 }
7972 
apply_domain(const isl::map & map2)7973 isl::map basic_map::apply_domain(const isl::map &map2) const
7974 {
7975   return isl::map(*this).apply_domain(map2);
7976 }
7977 
apply_domain(const isl::union_map & umap2)7978 isl::union_map basic_map::apply_domain(const isl::union_map &umap2) const
7979 {
7980   return isl::map(*this).apply_domain(umap2);
7981 }
7982 
apply_range(isl::basic_map bmap2)7983 isl::basic_map basic_map::apply_range(isl::basic_map bmap2) const
7984 {
7985   auto res = isl_basic_map_apply_range(copy(), bmap2.release());
7986   return manage(res);
7987 }
7988 
apply_range(const isl::map & map2)7989 isl::map basic_map::apply_range(const isl::map &map2) const
7990 {
7991   return isl::map(*this).apply_range(map2);
7992 }
7993 
apply_range(const isl::union_map & umap2)7994 isl::union_map basic_map::apply_range(const isl::union_map &umap2) const
7995 {
7996   return isl::map(*this).apply_range(umap2);
7997 }
7998 
as_map()7999 isl::map basic_map::as_map() const
8000 {
8001   return isl::map(*this).as_map();
8002 }
8003 
as_multi_union_pw_aff()8004 isl::multi_union_pw_aff basic_map::as_multi_union_pw_aff() const
8005 {
8006   return isl::map(*this).as_multi_union_pw_aff();
8007 }
8008 
as_pw_multi_aff()8009 isl::pw_multi_aff basic_map::as_pw_multi_aff() const
8010 {
8011   return isl::map(*this).as_pw_multi_aff();
8012 }
8013 
as_union_pw_multi_aff()8014 isl::union_pw_multi_aff basic_map::as_union_pw_multi_aff() const
8015 {
8016   return isl::map(*this).as_union_pw_multi_aff();
8017 }
8018 
basic_map_list()8019 isl::basic_map_list basic_map::basic_map_list() const
8020 {
8021   return isl::map(*this).basic_map_list();
8022 }
8023 
bind_domain(const isl::multi_id & tuple)8024 isl::set basic_map::bind_domain(const isl::multi_id &tuple) const
8025 {
8026   return isl::map(*this).bind_domain(tuple);
8027 }
8028 
bind_range(const isl::multi_id & tuple)8029 isl::set basic_map::bind_range(const isl::multi_id &tuple) const
8030 {
8031   return isl::map(*this).bind_range(tuple);
8032 }
8033 
can_curry()8034 boolean basic_map::can_curry() const
8035 {
8036   return isl::map(*this).can_curry();
8037 }
8038 
coalesce()8039 isl::map basic_map::coalesce() const
8040 {
8041   return isl::map(*this).coalesce();
8042 }
8043 
complement()8044 isl::map basic_map::complement() const
8045 {
8046   return isl::map(*this).complement();
8047 }
8048 
compute_divs()8049 isl::union_map basic_map::compute_divs() const
8050 {
8051   return isl::map(*this).compute_divs();
8052 }
8053 
curry()8054 isl::map basic_map::curry() const
8055 {
8056   return isl::map(*this).curry();
8057 }
8058 
deltas()8059 isl::basic_set basic_map::deltas() const
8060 {
8061   auto res = isl_basic_map_deltas(copy());
8062   return manage(res);
8063 }
8064 
detect_equalities()8065 isl::basic_map basic_map::detect_equalities() const
8066 {
8067   auto res = isl_basic_map_detect_equalities(copy());
8068   return manage(res);
8069 }
8070 
dim(isl::dim type)8071 class size basic_map::dim(isl::dim type) const
8072 {
8073   return isl::map(*this).dim(type);
8074 }
8075 
dim_max(int pos)8076 isl::pw_aff basic_map::dim_max(int pos) const
8077 {
8078   return isl::map(*this).dim_max(pos);
8079 }
8080 
dim_min(int pos)8081 isl::pw_aff basic_map::dim_min(int pos) const
8082 {
8083   return isl::map(*this).dim_min(pos);
8084 }
8085 
domain()8086 isl::basic_set basic_map::domain() const
8087 {
8088   auto res = isl_basic_map_domain(copy());
8089   return manage(res);
8090 }
8091 
domain_factor_domain()8092 isl::map basic_map::domain_factor_domain() const
8093 {
8094   return isl::map(*this).domain_factor_domain();
8095 }
8096 
domain_factor_range()8097 isl::map basic_map::domain_factor_range() const
8098 {
8099   return isl::map(*this).domain_factor_range();
8100 }
8101 
domain_map()8102 isl::map basic_map::domain_map() const
8103 {
8104   return isl::map(*this).domain_map();
8105 }
8106 
domain_map_union_pw_multi_aff()8107 isl::union_pw_multi_aff basic_map::domain_map_union_pw_multi_aff() const
8108 {
8109   return isl::map(*this).domain_map_union_pw_multi_aff();
8110 }
8111 
domain_product(const isl::map & map2)8112 isl::map basic_map::domain_product(const isl::map &map2) const
8113 {
8114   return isl::map(*this).domain_product(map2);
8115 }
8116 
domain_product(const isl::union_map & umap2)8117 isl::union_map basic_map::domain_product(const isl::union_map &umap2) const
8118 {
8119   return isl::map(*this).domain_product(umap2);
8120 }
8121 
domain_tuple_dim()8122 class size basic_map::domain_tuple_dim() const
8123 {
8124   return isl::map(*this).domain_tuple_dim();
8125 }
8126 
domain_tuple_id()8127 isl::id basic_map::domain_tuple_id() const
8128 {
8129   return isl::map(*this).domain_tuple_id();
8130 }
8131 
eq_at(const isl::multi_pw_aff & mpa)8132 isl::map basic_map::eq_at(const isl::multi_pw_aff &mpa) const
8133 {
8134   return isl::map(*this).eq_at(mpa);
8135 }
8136 
eq_at(const isl::multi_union_pw_aff & mupa)8137 isl::union_map basic_map::eq_at(const isl::multi_union_pw_aff &mupa) const
8138 {
8139   return isl::map(*this).eq_at(mupa);
8140 }
8141 
equal(isl::space space,unsigned int n_equal)8142 isl::basic_map basic_map::equal(isl::space space, unsigned int n_equal)
8143 {
8144   auto res = isl_basic_map_equal(space.release(), n_equal);
8145   return manage(res);
8146 }
8147 
equate(isl::dim type1,int pos1,isl::dim type2,int pos2)8148 isl::basic_map basic_map::equate(isl::dim type1, int pos1, isl::dim type2, int pos2) const
8149 {
8150   auto res = isl_basic_map_equate(copy(), static_cast<enum isl_dim_type>(type1), pos1, static_cast<enum isl_dim_type>(type2), pos2);
8151   return manage(res);
8152 }
8153 
every_map(const std::function<boolean (isl::map)> & test)8154 boolean basic_map::every_map(const std::function<boolean(isl::map)> &test) const
8155 {
8156   return isl::map(*this).every_map(test);
8157 }
8158 
extract_map(const isl::space & space)8159 isl::map basic_map::extract_map(const isl::space &space) const
8160 {
8161   return isl::map(*this).extract_map(space);
8162 }
8163 
factor_domain()8164 isl::map basic_map::factor_domain() const
8165 {
8166   return isl::map(*this).factor_domain();
8167 }
8168 
factor_range()8169 isl::map basic_map::factor_range() const
8170 {
8171   return isl::map(*this).factor_range();
8172 }
8173 
fix_si(isl::dim type,unsigned int pos,int value)8174 isl::basic_map basic_map::fix_si(isl::dim type, unsigned int pos, int value) const
8175 {
8176   auto res = isl_basic_map_fix_si(copy(), static_cast<enum isl_dim_type>(type), pos, value);
8177   return manage(res);
8178 }
8179 
fix_val(isl::dim type,unsigned int pos,isl::val v)8180 isl::basic_map basic_map::fix_val(isl::dim type, unsigned int pos, isl::val v) const
8181 {
8182   auto res = isl_basic_map_fix_val(copy(), static_cast<enum isl_dim_type>(type), pos, v.release());
8183   return manage(res);
8184 }
8185 
fix_val(isl::dim type,unsigned int pos,long v)8186 isl::basic_map basic_map::fix_val(isl::dim type, unsigned int pos, long v) const
8187 {
8188   return this->fix_val(type, pos, isl::val(ctx(), v));
8189 }
8190 
fixed_power(const isl::val & exp)8191 isl::union_map basic_map::fixed_power(const isl::val &exp) const
8192 {
8193   return isl::map(*this).fixed_power(exp);
8194 }
8195 
fixed_power(long exp)8196 isl::union_map basic_map::fixed_power(long exp) const
8197 {
8198   return this->fixed_power(isl::val(ctx(), exp));
8199 }
8200 
flat_range_product(const isl::map & map2)8201 isl::map basic_map::flat_range_product(const isl::map &map2) const
8202 {
8203   return isl::map(*this).flat_range_product(map2);
8204 }
8205 
flat_range_product(const isl::union_map & umap2)8206 isl::union_map basic_map::flat_range_product(const isl::union_map &umap2) const
8207 {
8208   return isl::map(*this).flat_range_product(umap2);
8209 }
8210 
flatten()8211 isl::basic_map basic_map::flatten() const
8212 {
8213   auto res = isl_basic_map_flatten(copy());
8214   return manage(res);
8215 }
8216 
flatten_domain()8217 isl::basic_map basic_map::flatten_domain() const
8218 {
8219   auto res = isl_basic_map_flatten_domain(copy());
8220   return manage(res);
8221 }
8222 
flatten_range()8223 isl::basic_map basic_map::flatten_range() const
8224 {
8225   auto res = isl_basic_map_flatten_range(copy());
8226   return manage(res);
8227 }
8228 
floordiv_val(const isl::val & d)8229 isl::map basic_map::floordiv_val(const isl::val &d) const
8230 {
8231   return isl::map(*this).floordiv_val(d);
8232 }
8233 
floordiv_val(long d)8234 isl::map basic_map::floordiv_val(long d) const
8235 {
8236   return this->floordiv_val(isl::val(ctx(), d));
8237 }
8238 
foreach_basic_map(const std::function<stat (isl::basic_map)> & fn)8239 stat basic_map::foreach_basic_map(const std::function<stat(isl::basic_map)> &fn) const
8240 {
8241   return isl::map(*this).foreach_basic_map(fn);
8242 }
8243 
foreach_map(const std::function<stat (isl::map)> & fn)8244 stat basic_map::foreach_map(const std::function<stat(isl::map)> &fn) const
8245 {
8246   return isl::map(*this).foreach_map(fn);
8247 }
8248 
from_aff(isl::aff aff)8249 isl::basic_map basic_map::from_aff(isl::aff aff)
8250 {
8251   auto res = isl_basic_map_from_aff(aff.release());
8252   return manage(res);
8253 }
8254 
from_domain_and_range(isl::basic_set domain,isl::basic_set range)8255 isl::basic_map basic_map::from_domain_and_range(isl::basic_set domain, isl::basic_set range)
8256 {
8257   auto res = isl_basic_map_from_domain_and_range(domain.release(), range.release());
8258   return manage(res);
8259 }
8260 
gist(isl::basic_map context)8261 isl::basic_map basic_map::gist(isl::basic_map context) const
8262 {
8263   auto res = isl_basic_map_gist(copy(), context.release());
8264   return manage(res);
8265 }
8266 
gist(const isl::map & context)8267 isl::map basic_map::gist(const isl::map &context) const
8268 {
8269   return isl::map(*this).gist(context);
8270 }
8271 
gist(const isl::union_map & context)8272 isl::union_map basic_map::gist(const isl::union_map &context) const
8273 {
8274   return isl::map(*this).gist(context);
8275 }
8276 
gist_domain(const isl::set & context)8277 isl::map basic_map::gist_domain(const isl::set &context) const
8278 {
8279   return isl::map(*this).gist_domain(context);
8280 }
8281 
gist_domain(const isl::union_set & uset)8282 isl::union_map basic_map::gist_domain(const isl::union_set &uset) const
8283 {
8284   return isl::map(*this).gist_domain(uset);
8285 }
8286 
gist_params(const isl::set & context)8287 isl::map basic_map::gist_params(const isl::set &context) const
8288 {
8289   return isl::map(*this).gist_params(context);
8290 }
8291 
gist_range(const isl::union_set & uset)8292 isl::union_map basic_map::gist_range(const isl::union_set &uset) const
8293 {
8294   return isl::map(*this).gist_range(uset);
8295 }
8296 
has_domain_tuple_id()8297 boolean basic_map::has_domain_tuple_id() const
8298 {
8299   return isl::map(*this).has_domain_tuple_id();
8300 }
8301 
has_equal_space(const isl::map & map2)8302 boolean basic_map::has_equal_space(const isl::map &map2) const
8303 {
8304   return isl::map(*this).has_equal_space(map2);
8305 }
8306 
has_range_tuple_id()8307 boolean basic_map::has_range_tuple_id() const
8308 {
8309   return isl::map(*this).has_range_tuple_id();
8310 }
8311 
has_tuple_id(isl::dim type)8312 boolean basic_map::has_tuple_id(isl::dim type) const
8313 {
8314   return isl::map(*this).has_tuple_id(type);
8315 }
8316 
has_tuple_name(isl::dim type)8317 boolean basic_map::has_tuple_name(isl::dim type) const
8318 {
8319   return isl::map(*this).has_tuple_name(type);
8320 }
8321 
intersect(isl::basic_map bmap2)8322 isl::basic_map basic_map::intersect(isl::basic_map bmap2) const
8323 {
8324   auto res = isl_basic_map_intersect(copy(), bmap2.release());
8325   return manage(res);
8326 }
8327 
intersect(const isl::map & map2)8328 isl::map basic_map::intersect(const isl::map &map2) const
8329 {
8330   return isl::map(*this).intersect(map2);
8331 }
8332 
intersect(const isl::union_map & umap2)8333 isl::union_map basic_map::intersect(const isl::union_map &umap2) const
8334 {
8335   return isl::map(*this).intersect(umap2);
8336 }
8337 
intersect_domain(isl::basic_set bset)8338 isl::basic_map basic_map::intersect_domain(isl::basic_set bset) const
8339 {
8340   auto res = isl_basic_map_intersect_domain(copy(), bset.release());
8341   return manage(res);
8342 }
8343 
intersect_domain(const isl::set & set)8344 isl::map basic_map::intersect_domain(const isl::set &set) const
8345 {
8346   return isl::map(*this).intersect_domain(set);
8347 }
8348 
intersect_domain(const isl::space & space)8349 isl::union_map basic_map::intersect_domain(const isl::space &space) const
8350 {
8351   return isl::map(*this).intersect_domain(space);
8352 }
8353 
intersect_domain(const isl::union_set & uset)8354 isl::union_map basic_map::intersect_domain(const isl::union_set &uset) const
8355 {
8356   return isl::map(*this).intersect_domain(uset);
8357 }
8358 
intersect_domain(const isl::point & bset)8359 isl::basic_map basic_map::intersect_domain(const isl::point &bset) const
8360 {
8361   return this->intersect_domain(isl::basic_set(bset));
8362 }
8363 
intersect_domain_factor_domain(const isl::map & factor)8364 isl::map basic_map::intersect_domain_factor_domain(const isl::map &factor) const
8365 {
8366   return isl::map(*this).intersect_domain_factor_domain(factor);
8367 }
8368 
intersect_domain_factor_domain(const isl::union_map & factor)8369 isl::union_map basic_map::intersect_domain_factor_domain(const isl::union_map &factor) const
8370 {
8371   return isl::map(*this).intersect_domain_factor_domain(factor);
8372 }
8373 
intersect_domain_factor_range(const isl::map & factor)8374 isl::map basic_map::intersect_domain_factor_range(const isl::map &factor) const
8375 {
8376   return isl::map(*this).intersect_domain_factor_range(factor);
8377 }
8378 
intersect_domain_factor_range(const isl::union_map & factor)8379 isl::union_map basic_map::intersect_domain_factor_range(const isl::union_map &factor) const
8380 {
8381   return isl::map(*this).intersect_domain_factor_range(factor);
8382 }
8383 
intersect_params(const isl::set & params)8384 isl::map basic_map::intersect_params(const isl::set &params) const
8385 {
8386   return isl::map(*this).intersect_params(params);
8387 }
8388 
intersect_range(isl::basic_set bset)8389 isl::basic_map basic_map::intersect_range(isl::basic_set bset) const
8390 {
8391   auto res = isl_basic_map_intersect_range(copy(), bset.release());
8392   return manage(res);
8393 }
8394 
intersect_range(const isl::set & set)8395 isl::map basic_map::intersect_range(const isl::set &set) const
8396 {
8397   return isl::map(*this).intersect_range(set);
8398 }
8399 
intersect_range(const isl::space & space)8400 isl::union_map basic_map::intersect_range(const isl::space &space) const
8401 {
8402   return isl::map(*this).intersect_range(space);
8403 }
8404 
intersect_range(const isl::union_set & uset)8405 isl::union_map basic_map::intersect_range(const isl::union_set &uset) const
8406 {
8407   return isl::map(*this).intersect_range(uset);
8408 }
8409 
intersect_range(const isl::point & bset)8410 isl::basic_map basic_map::intersect_range(const isl::point &bset) const
8411 {
8412   return this->intersect_range(isl::basic_set(bset));
8413 }
8414 
intersect_range_factor_domain(const isl::map & factor)8415 isl::map basic_map::intersect_range_factor_domain(const isl::map &factor) const
8416 {
8417   return isl::map(*this).intersect_range_factor_domain(factor);
8418 }
8419 
intersect_range_factor_domain(const isl::union_map & factor)8420 isl::union_map basic_map::intersect_range_factor_domain(const isl::union_map &factor) const
8421 {
8422   return isl::map(*this).intersect_range_factor_domain(factor);
8423 }
8424 
intersect_range_factor_range(const isl::map & factor)8425 isl::map basic_map::intersect_range_factor_range(const isl::map &factor) const
8426 {
8427   return isl::map(*this).intersect_range_factor_range(factor);
8428 }
8429 
intersect_range_factor_range(const isl::union_map & factor)8430 isl::union_map basic_map::intersect_range_factor_range(const isl::union_map &factor) const
8431 {
8432   return isl::map(*this).intersect_range_factor_range(factor);
8433 }
8434 
involves_dims(isl::dim type,unsigned int first,unsigned int n)8435 boolean basic_map::involves_dims(isl::dim type, unsigned int first, unsigned int n) const
8436 {
8437   return isl::map(*this).involves_dims(type, first, n);
8438 }
8439 
is_bijective()8440 boolean basic_map::is_bijective() const
8441 {
8442   return isl::map(*this).is_bijective();
8443 }
8444 
is_disjoint(const isl::map & map2)8445 boolean basic_map::is_disjoint(const isl::map &map2) const
8446 {
8447   return isl::map(*this).is_disjoint(map2);
8448 }
8449 
is_disjoint(const isl::union_map & umap2)8450 boolean basic_map::is_disjoint(const isl::union_map &umap2) const
8451 {
8452   return isl::map(*this).is_disjoint(umap2);
8453 }
8454 
is_empty()8455 boolean basic_map::is_empty() const
8456 {
8457   auto res = isl_basic_map_is_empty(get());
8458   return manage(res);
8459 }
8460 
is_equal(const isl::basic_map & bmap2)8461 boolean basic_map::is_equal(const isl::basic_map &bmap2) const
8462 {
8463   auto res = isl_basic_map_is_equal(get(), bmap2.get());
8464   return manage(res);
8465 }
8466 
is_equal(const isl::map & map2)8467 boolean basic_map::is_equal(const isl::map &map2) const
8468 {
8469   return isl::map(*this).is_equal(map2);
8470 }
8471 
is_equal(const isl::union_map & umap2)8472 boolean basic_map::is_equal(const isl::union_map &umap2) const
8473 {
8474   return isl::map(*this).is_equal(umap2);
8475 }
8476 
is_injective()8477 boolean basic_map::is_injective() const
8478 {
8479   return isl::map(*this).is_injective();
8480 }
8481 
is_single_valued()8482 boolean basic_map::is_single_valued() const
8483 {
8484   return isl::map(*this).is_single_valued();
8485 }
8486 
is_strict_subset(const isl::map & map2)8487 boolean basic_map::is_strict_subset(const isl::map &map2) const
8488 {
8489   return isl::map(*this).is_strict_subset(map2);
8490 }
8491 
is_strict_subset(const isl::union_map & umap2)8492 boolean basic_map::is_strict_subset(const isl::union_map &umap2) const
8493 {
8494   return isl::map(*this).is_strict_subset(umap2);
8495 }
8496 
is_subset(const isl::basic_map & bmap2)8497 boolean basic_map::is_subset(const isl::basic_map &bmap2) const
8498 {
8499   auto res = isl_basic_map_is_subset(get(), bmap2.get());
8500   return manage(res);
8501 }
8502 
is_subset(const isl::map & map2)8503 boolean basic_map::is_subset(const isl::map &map2) const
8504 {
8505   return isl::map(*this).is_subset(map2);
8506 }
8507 
is_subset(const isl::union_map & umap2)8508 boolean basic_map::is_subset(const isl::union_map &umap2) const
8509 {
8510   return isl::map(*this).is_subset(umap2);
8511 }
8512 
isa_map()8513 boolean basic_map::isa_map() const
8514 {
8515   return isl::map(*this).isa_map();
8516 }
8517 
lex_ge_at(const isl::multi_pw_aff & mpa)8518 isl::map basic_map::lex_ge_at(const isl::multi_pw_aff &mpa) const
8519 {
8520   return isl::map(*this).lex_ge_at(mpa);
8521 }
8522 
lex_gt_at(const isl::multi_pw_aff & mpa)8523 isl::map basic_map::lex_gt_at(const isl::multi_pw_aff &mpa) const
8524 {
8525   return isl::map(*this).lex_gt_at(mpa);
8526 }
8527 
lex_le_at(const isl::multi_pw_aff & mpa)8528 isl::map basic_map::lex_le_at(const isl::multi_pw_aff &mpa) const
8529 {
8530   return isl::map(*this).lex_le_at(mpa);
8531 }
8532 
lex_lt_at(const isl::multi_pw_aff & mpa)8533 isl::map basic_map::lex_lt_at(const isl::multi_pw_aff &mpa) const
8534 {
8535   return isl::map(*this).lex_lt_at(mpa);
8536 }
8537 
lexmax()8538 isl::map basic_map::lexmax() const
8539 {
8540   auto res = isl_basic_map_lexmax(copy());
8541   return manage(res);
8542 }
8543 
lexmax_pw_multi_aff()8544 isl::pw_multi_aff basic_map::lexmax_pw_multi_aff() const
8545 {
8546   return isl::map(*this).lexmax_pw_multi_aff();
8547 }
8548 
lexmin()8549 isl::map basic_map::lexmin() const
8550 {
8551   auto res = isl_basic_map_lexmin(copy());
8552   return manage(res);
8553 }
8554 
lexmin_pw_multi_aff()8555 isl::pw_multi_aff basic_map::lexmin_pw_multi_aff() const
8556 {
8557   return isl::map(*this).lexmin_pw_multi_aff();
8558 }
8559 
lower_bound(const isl::multi_pw_aff & lower)8560 isl::map basic_map::lower_bound(const isl::multi_pw_aff &lower) const
8561 {
8562   return isl::map(*this).lower_bound(lower);
8563 }
8564 
lower_bound_si(isl::dim type,unsigned int pos,int value)8565 isl::map basic_map::lower_bound_si(isl::dim type, unsigned int pos, int value) const
8566 {
8567   return isl::map(*this).lower_bound_si(type, pos, value);
8568 }
8569 
map_list()8570 isl::map_list basic_map::map_list() const
8571 {
8572   return isl::map(*this).map_list();
8573 }
8574 
max_multi_pw_aff()8575 isl::multi_pw_aff basic_map::max_multi_pw_aff() const
8576 {
8577   return isl::map(*this).max_multi_pw_aff();
8578 }
8579 
min_multi_pw_aff()8580 isl::multi_pw_aff basic_map::min_multi_pw_aff() const
8581 {
8582   return isl::map(*this).min_multi_pw_aff();
8583 }
8584 
move_dims(isl::dim dst_type,unsigned int dst_pos,isl::dim src_type,unsigned int src_pos,unsigned int n)8585 isl::map basic_map::move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const
8586 {
8587   return isl::map(*this).move_dims(dst_type, dst_pos, src_type, src_pos, n);
8588 }
8589 
n_basic_map()8590 class size basic_map::n_basic_map() const
8591 {
8592   return isl::map(*this).n_basic_map();
8593 }
8594 
order_lt(isl::dim type1,int pos1,isl::dim type2,int pos2)8595 isl::map basic_map::order_lt(isl::dim type1, int pos1, isl::dim type2, int pos2) const
8596 {
8597   return isl::map(*this).order_lt(type1, pos1, type2, pos2);
8598 }
8599 
params()8600 isl::set basic_map::params() const
8601 {
8602   return isl::map(*this).params();
8603 }
8604 
plain_get_val_if_fixed(isl::dim type,unsigned int pos)8605 isl::val basic_map::plain_get_val_if_fixed(isl::dim type, unsigned int pos) const
8606 {
8607   auto res = isl_basic_map_plain_get_val_if_fixed(get(), static_cast<enum isl_dim_type>(type), pos);
8608   return manage(res);
8609 }
8610 
polyhedral_hull()8611 isl::basic_map basic_map::polyhedral_hull() const
8612 {
8613   return isl::map(*this).polyhedral_hull();
8614 }
8615 
preimage_domain(const isl::multi_aff & ma)8616 isl::map basic_map::preimage_domain(const isl::multi_aff &ma) const
8617 {
8618   return isl::map(*this).preimage_domain(ma);
8619 }
8620 
preimage_domain(const isl::multi_pw_aff & mpa)8621 isl::map basic_map::preimage_domain(const isl::multi_pw_aff &mpa) const
8622 {
8623   return isl::map(*this).preimage_domain(mpa);
8624 }
8625 
preimage_domain(const isl::pw_multi_aff & pma)8626 isl::map basic_map::preimage_domain(const isl::pw_multi_aff &pma) const
8627 {
8628   return isl::map(*this).preimage_domain(pma);
8629 }
8630 
preimage_domain(const isl::union_pw_multi_aff & upma)8631 isl::union_map basic_map::preimage_domain(const isl::union_pw_multi_aff &upma) const
8632 {
8633   return isl::map(*this).preimage_domain(upma);
8634 }
8635 
preimage_range(const isl::multi_aff & ma)8636 isl::map basic_map::preimage_range(const isl::multi_aff &ma) const
8637 {
8638   return isl::map(*this).preimage_range(ma);
8639 }
8640 
preimage_range(const isl::pw_multi_aff & pma)8641 isl::map basic_map::preimage_range(const isl::pw_multi_aff &pma) const
8642 {
8643   return isl::map(*this).preimage_range(pma);
8644 }
8645 
preimage_range(const isl::union_pw_multi_aff & upma)8646 isl::union_map basic_map::preimage_range(const isl::union_pw_multi_aff &upma) const
8647 {
8648   return isl::map(*this).preimage_range(upma);
8649 }
8650 
product(const isl::map & map2)8651 isl::map basic_map::product(const isl::map &map2) const
8652 {
8653   return isl::map(*this).product(map2);
8654 }
8655 
product(const isl::union_map & umap2)8656 isl::union_map basic_map::product(const isl::union_map &umap2) const
8657 {
8658   return isl::map(*this).product(umap2);
8659 }
8660 
project_out(isl::dim type,unsigned int first,unsigned int n)8661 isl::map basic_map::project_out(isl::dim type, unsigned int first, unsigned int n) const
8662 {
8663   return isl::map(*this).project_out(type, first, n);
8664 }
8665 
project_out_all_params()8666 isl::map basic_map::project_out_all_params() const
8667 {
8668   return isl::map(*this).project_out_all_params();
8669 }
8670 
range()8671 isl::set basic_map::range() const
8672 {
8673   return isl::map(*this).range();
8674 }
8675 
range_factor_domain()8676 isl::map basic_map::range_factor_domain() const
8677 {
8678   return isl::map(*this).range_factor_domain();
8679 }
8680 
range_factor_range()8681 isl::map basic_map::range_factor_range() const
8682 {
8683   return isl::map(*this).range_factor_range();
8684 }
8685 
range_lattice_tile()8686 isl::fixed_box basic_map::range_lattice_tile() const
8687 {
8688   return isl::map(*this).range_lattice_tile();
8689 }
8690 
range_map()8691 isl::map basic_map::range_map() const
8692 {
8693   return isl::map(*this).range_map();
8694 }
8695 
range_product(const isl::map & map2)8696 isl::map basic_map::range_product(const isl::map &map2) const
8697 {
8698   return isl::map(*this).range_product(map2);
8699 }
8700 
range_product(const isl::union_map & umap2)8701 isl::union_map basic_map::range_product(const isl::union_map &umap2) const
8702 {
8703   return isl::map(*this).range_product(umap2);
8704 }
8705 
range_reverse()8706 isl::map basic_map::range_reverse() const
8707 {
8708   return isl::map(*this).range_reverse();
8709 }
8710 
range_simple_fixed_box_hull()8711 isl::fixed_box basic_map::range_simple_fixed_box_hull() const
8712 {
8713   return isl::map(*this).range_simple_fixed_box_hull();
8714 }
8715 
range_tuple_dim()8716 class size basic_map::range_tuple_dim() const
8717 {
8718   return isl::map(*this).range_tuple_dim();
8719 }
8720 
range_tuple_id()8721 isl::id basic_map::range_tuple_id() const
8722 {
8723   return isl::map(*this).range_tuple_id();
8724 }
8725 
reverse()8726 isl::basic_map basic_map::reverse() const
8727 {
8728   auto res = isl_basic_map_reverse(copy());
8729   return manage(res);
8730 }
8731 
sample()8732 isl::basic_map basic_map::sample() const
8733 {
8734   auto res = isl_basic_map_sample(copy());
8735   return manage(res);
8736 }
8737 
set_domain_tuple(const isl::id & id)8738 isl::map basic_map::set_domain_tuple(const isl::id &id) const
8739 {
8740   return isl::map(*this).set_domain_tuple(id);
8741 }
8742 
set_domain_tuple(const std::string & id)8743 isl::map basic_map::set_domain_tuple(const std::string &id) const
8744 {
8745   return this->set_domain_tuple(isl::id(ctx(), id));
8746 }
8747 
set_range_tuple(const isl::id & id)8748 isl::map basic_map::set_range_tuple(const isl::id &id) const
8749 {
8750   return isl::map(*this).set_range_tuple(id);
8751 }
8752 
set_range_tuple(const std::string & id)8753 isl::map basic_map::set_range_tuple(const std::string &id) const
8754 {
8755   return this->set_range_tuple(isl::id(ctx(), id));
8756 }
8757 
set_tuple_id(isl::dim type,const isl::id & id)8758 isl::map basic_map::set_tuple_id(isl::dim type, const isl::id &id) const
8759 {
8760   return isl::map(*this).set_tuple_id(type, id);
8761 }
8762 
set_tuple_id(isl::dim type,const std::string & id)8763 isl::map basic_map::set_tuple_id(isl::dim type, const std::string &id) const
8764 {
8765   return this->set_tuple_id(type, isl::id(ctx(), id));
8766 }
8767 
space()8768 isl::space basic_map::space() const
8769 {
8770   return isl::map(*this).space();
8771 }
8772 
subtract(const isl::map & map2)8773 isl::map basic_map::subtract(const isl::map &map2) const
8774 {
8775   return isl::map(*this).subtract(map2);
8776 }
8777 
subtract(const isl::union_map & umap2)8778 isl::union_map basic_map::subtract(const isl::union_map &umap2) const
8779 {
8780   return isl::map(*this).subtract(umap2);
8781 }
8782 
subtract_domain(const isl::union_set & dom)8783 isl::union_map basic_map::subtract_domain(const isl::union_set &dom) const
8784 {
8785   return isl::map(*this).subtract_domain(dom);
8786 }
8787 
subtract_range(const isl::union_set & dom)8788 isl::union_map basic_map::subtract_range(const isl::union_set &dom) const
8789 {
8790   return isl::map(*this).subtract_range(dom);
8791 }
8792 
sum(const isl::map & map2)8793 isl::map basic_map::sum(const isl::map &map2) const
8794 {
8795   return isl::map(*this).sum(map2);
8796 }
8797 
to_list()8798 isl::basic_map_list basic_map::to_list() const
8799 {
8800   auto res = isl_basic_map_to_list(copy());
8801   return manage(res);
8802 }
8803 
to_union_map()8804 isl::union_map basic_map::to_union_map() const
8805 {
8806   return isl::map(*this).to_union_map();
8807 }
8808 
tuple_id(isl::dim type)8809 isl::id basic_map::tuple_id(isl::dim type) const
8810 {
8811   return isl::map(*this).tuple_id(type);
8812 }
8813 
uncurry()8814 isl::map basic_map::uncurry() const
8815 {
8816   return isl::map(*this).uncurry();
8817 }
8818 
unite(isl::basic_map bmap2)8819 isl::map basic_map::unite(isl::basic_map bmap2) const
8820 {
8821   auto res = isl_basic_map_union(copy(), bmap2.release());
8822   return manage(res);
8823 }
8824 
unite(const isl::map & map2)8825 isl::map basic_map::unite(const isl::map &map2) const
8826 {
8827   return isl::map(*this).unite(map2);
8828 }
8829 
unite(const isl::union_map & umap2)8830 isl::union_map basic_map::unite(const isl::union_map &umap2) const
8831 {
8832   return isl::map(*this).unite(umap2);
8833 }
8834 
universe(isl::space space)8835 isl::basic_map basic_map::universe(isl::space space)
8836 {
8837   auto res = isl_basic_map_universe(space.release());
8838   return manage(res);
8839 }
8840 
unshifted_simple_hull()8841 isl::basic_map basic_map::unshifted_simple_hull() const
8842 {
8843   return isl::map(*this).unshifted_simple_hull();
8844 }
8845 
upper_bound(const isl::multi_pw_aff & upper)8846 isl::map basic_map::upper_bound(const isl::multi_pw_aff &upper) const
8847 {
8848   return isl::map(*this).upper_bound(upper);
8849 }
8850 
upper_bound_si(isl::dim type,unsigned int pos,int value)8851 isl::map basic_map::upper_bound_si(isl::dim type, unsigned int pos, int value) const
8852 {
8853   return isl::map(*this).upper_bound_si(type, pos, value);
8854 }
8855 
wrap()8856 isl::set basic_map::wrap() const
8857 {
8858   return isl::map(*this).wrap();
8859 }
8860 
zip()8861 isl::map basic_map::zip() const
8862 {
8863   return isl::map(*this).zip();
8864 }
8865 
8866 inline std::ostream &operator<<(std::ostream &os, const basic_map &obj)
8867 {
8868   char *str = isl_basic_map_to_str(obj.get());
8869   if (!str) {
8870     os.setstate(std::ios_base::badbit);
8871     return os;
8872   }
8873   os << str;
8874   free(str);
8875   return os;
8876 }
8877 
8878 // implementations for isl::basic_map_list
manage(__isl_take isl_basic_map_list * ptr)8879 basic_map_list manage(__isl_take isl_basic_map_list *ptr) {
8880   return basic_map_list(ptr);
8881 }
manage_copy(__isl_keep isl_basic_map_list * ptr)8882 basic_map_list manage_copy(__isl_keep isl_basic_map_list *ptr) {
8883   ptr = isl_basic_map_list_copy(ptr);
8884   return basic_map_list(ptr);
8885 }
8886 
basic_map_list()8887 basic_map_list::basic_map_list()
8888     : ptr(nullptr) {}
8889 
basic_map_list(const basic_map_list & obj)8890 basic_map_list::basic_map_list(const basic_map_list &obj)
8891     : ptr(nullptr)
8892 {
8893   ptr = obj.copy();
8894 }
8895 
basic_map_list(__isl_take isl_basic_map_list * ptr)8896 basic_map_list::basic_map_list(__isl_take isl_basic_map_list *ptr)
8897     : ptr(ptr) {}
8898 
basic_map_list(isl::ctx ctx,int n)8899 basic_map_list::basic_map_list(isl::ctx ctx, int n)
8900 {
8901   auto res = isl_basic_map_list_alloc(ctx.release(), n);
8902   ptr = res;
8903 }
8904 
basic_map_list(isl::basic_map el)8905 basic_map_list::basic_map_list(isl::basic_map el)
8906 {
8907   auto res = isl_basic_map_list_from_basic_map(el.release());
8908   ptr = res;
8909 }
8910 
8911 basic_map_list &basic_map_list::operator=(basic_map_list obj) {
8912   std::swap(this->ptr, obj.ptr);
8913   return *this;
8914 }
8915 
~basic_map_list()8916 basic_map_list::~basic_map_list() {
8917   if (ptr)
8918     isl_basic_map_list_free(ptr);
8919 }
8920 
copy()8921 __isl_give isl_basic_map_list *basic_map_list::copy() const & {
8922   return isl_basic_map_list_copy(ptr);
8923 }
8924 
get()8925 __isl_keep isl_basic_map_list *basic_map_list::get() const {
8926   return ptr;
8927 }
8928 
release()8929 __isl_give isl_basic_map_list *basic_map_list::release() {
8930   isl_basic_map_list *tmp = ptr;
8931   ptr = nullptr;
8932   return tmp;
8933 }
8934 
is_null()8935 bool basic_map_list::is_null() const {
8936   return ptr == nullptr;
8937 }
8938 
ctx()8939 isl::ctx basic_map_list::ctx() const {
8940   return isl::ctx(isl_basic_map_list_get_ctx(ptr));
8941 }
8942 
add(isl::basic_map el)8943 isl::basic_map_list basic_map_list::add(isl::basic_map el) const
8944 {
8945   auto res = isl_basic_map_list_add(copy(), el.release());
8946   return manage(res);
8947 }
8948 
at(int index)8949 isl::basic_map basic_map_list::at(int index) const
8950 {
8951   auto res = isl_basic_map_list_get_at(get(), index);
8952   return manage(res);
8953 }
8954 
get_at(int index)8955 isl::basic_map basic_map_list::get_at(int index) const
8956 {
8957   return at(index);
8958 }
8959 
clear()8960 isl::basic_map_list basic_map_list::clear() const
8961 {
8962   auto res = isl_basic_map_list_clear(copy());
8963   return manage(res);
8964 }
8965 
concat(isl::basic_map_list list2)8966 isl::basic_map_list basic_map_list::concat(isl::basic_map_list list2) const
8967 {
8968   auto res = isl_basic_map_list_concat(copy(), list2.release());
8969   return manage(res);
8970 }
8971 
drop(unsigned int first,unsigned int n)8972 isl::basic_map_list basic_map_list::drop(unsigned int first, unsigned int n) const
8973 {
8974   auto res = isl_basic_map_list_drop(copy(), first, n);
8975   return manage(res);
8976 }
8977 
foreach(const std::function<stat (isl::basic_map)> & fn)8978 stat basic_map_list::foreach(const std::function<stat(isl::basic_map)> &fn) const
8979 {
8980   struct fn_data {
8981     std::function<stat(isl::basic_map)> func;
8982   } fn_data = { fn };
8983   auto fn_lambda = [](isl_basic_map *arg_0, void *arg_1) -> isl_stat {
8984     auto *data = static_cast<struct fn_data *>(arg_1);
8985     auto ret = (data->func)(manage(arg_0));
8986     return ret.release();
8987   };
8988   auto res = isl_basic_map_list_foreach(get(), fn_lambda, &fn_data);
8989   return manage(res);
8990 }
8991 
insert(unsigned int pos,isl::basic_map el)8992 isl::basic_map_list basic_map_list::insert(unsigned int pos, isl::basic_map el) const
8993 {
8994   auto res = isl_basic_map_list_insert(copy(), pos, el.release());
8995   return manage(res);
8996 }
8997 
size()8998 class size basic_map_list::size() const
8999 {
9000   auto res = isl_basic_map_list_size(get());
9001   return manage(res);
9002 }
9003 
9004 inline std::ostream &operator<<(std::ostream &os, const basic_map_list &obj)
9005 {
9006   char *str = isl_basic_map_list_to_str(obj.get());
9007   if (!str) {
9008     os.setstate(std::ios_base::badbit);
9009     return os;
9010   }
9011   os << str;
9012   free(str);
9013   return os;
9014 }
9015 
9016 // implementations for isl::basic_set
manage(__isl_take isl_basic_set * ptr)9017 basic_set manage(__isl_take isl_basic_set *ptr) {
9018   return basic_set(ptr);
9019 }
manage_copy(__isl_keep isl_basic_set * ptr)9020 basic_set manage_copy(__isl_keep isl_basic_set *ptr) {
9021   ptr = isl_basic_set_copy(ptr);
9022   return basic_set(ptr);
9023 }
9024 
basic_set()9025 basic_set::basic_set()
9026     : ptr(nullptr) {}
9027 
basic_set(const basic_set & obj)9028 basic_set::basic_set(const basic_set &obj)
9029     : ptr(nullptr)
9030 {
9031   ptr = obj.copy();
9032 }
9033 
basic_set(__isl_take isl_basic_set * ptr)9034 basic_set::basic_set(__isl_take isl_basic_set *ptr)
9035     : ptr(ptr) {}
9036 
basic_set(isl::point pnt)9037 basic_set::basic_set(isl::point pnt)
9038 {
9039   auto res = isl_basic_set_from_point(pnt.release());
9040   ptr = res;
9041 }
9042 
basic_set(isl::ctx ctx,const std::string & str)9043 basic_set::basic_set(isl::ctx ctx, const std::string &str)
9044 {
9045   auto res = isl_basic_set_read_from_str(ctx.release(), str.c_str());
9046   ptr = res;
9047 }
9048 
9049 basic_set &basic_set::operator=(basic_set obj) {
9050   std::swap(this->ptr, obj.ptr);
9051   return *this;
9052 }
9053 
~basic_set()9054 basic_set::~basic_set() {
9055   if (ptr)
9056     isl_basic_set_free(ptr);
9057 }
9058 
copy()9059 __isl_give isl_basic_set *basic_set::copy() const & {
9060   return isl_basic_set_copy(ptr);
9061 }
9062 
get()9063 __isl_keep isl_basic_set *basic_set::get() const {
9064   return ptr;
9065 }
9066 
release()9067 __isl_give isl_basic_set *basic_set::release() {
9068   isl_basic_set *tmp = ptr;
9069   ptr = nullptr;
9070   return tmp;
9071 }
9072 
is_null()9073 bool basic_set::is_null() const {
9074   return ptr == nullptr;
9075 }
9076 
ctx()9077 isl::ctx basic_set::ctx() const {
9078   return isl::ctx(isl_basic_set_get_ctx(ptr));
9079 }
9080 
add_constraint(const isl::constraint & constraint)9081 isl::set basic_set::add_constraint(const isl::constraint &constraint) const
9082 {
9083   return isl::set(*this).add_constraint(constraint);
9084 }
9085 
add_dims(isl::dim type,unsigned int n)9086 isl::set basic_set::add_dims(isl::dim type, unsigned int n) const
9087 {
9088   return isl::set(*this).add_dims(type, n);
9089 }
9090 
affine_hull()9091 isl::basic_set basic_set::affine_hull() const
9092 {
9093   auto res = isl_basic_set_affine_hull(copy());
9094   return manage(res);
9095 }
9096 
align_params(const isl::space & model)9097 isl::set basic_set::align_params(const isl::space &model) const
9098 {
9099   return isl::set(*this).align_params(model);
9100 }
9101 
apply(isl::basic_map bmap)9102 isl::basic_set basic_set::apply(isl::basic_map bmap) const
9103 {
9104   auto res = isl_basic_set_apply(copy(), bmap.release());
9105   return manage(res);
9106 }
9107 
apply(const isl::map & map)9108 isl::set basic_set::apply(const isl::map &map) const
9109 {
9110   return isl::set(*this).apply(map);
9111 }
9112 
apply(const isl::union_map & umap)9113 isl::union_set basic_set::apply(const isl::union_map &umap) const
9114 {
9115   return isl::set(*this).apply(umap);
9116 }
9117 
as_pw_multi_aff()9118 isl::pw_multi_aff basic_set::as_pw_multi_aff() const
9119 {
9120   return isl::set(*this).as_pw_multi_aff();
9121 }
9122 
as_set()9123 isl::set basic_set::as_set() const
9124 {
9125   return isl::set(*this).as_set();
9126 }
9127 
basic_set_list()9128 isl::basic_set_list basic_set::basic_set_list() const
9129 {
9130   return isl::set(*this).basic_set_list();
9131 }
9132 
bind(const isl::multi_id & tuple)9133 isl::set basic_set::bind(const isl::multi_id &tuple) const
9134 {
9135   return isl::set(*this).bind(tuple);
9136 }
9137 
coalesce()9138 isl::set basic_set::coalesce() const
9139 {
9140   return isl::set(*this).coalesce();
9141 }
9142 
complement()9143 isl::set basic_set::complement() const
9144 {
9145   return isl::set(*this).complement();
9146 }
9147 
compute_divs()9148 isl::union_set basic_set::compute_divs() const
9149 {
9150   return isl::set(*this).compute_divs();
9151 }
9152 
contains(const isl::space & space)9153 boolean basic_set::contains(const isl::space &space) const
9154 {
9155   return isl::set(*this).contains(space);
9156 }
9157 
convex_hull()9158 isl::basic_set basic_set::convex_hull() const
9159 {
9160   return isl::set(*this).convex_hull();
9161 }
9162 
detect_equalities()9163 isl::basic_set basic_set::detect_equalities() const
9164 {
9165   auto res = isl_basic_set_detect_equalities(copy());
9166   return manage(res);
9167 }
9168 
dim(isl::dim type)9169 class size basic_set::dim(isl::dim type) const
9170 {
9171   auto res = isl_basic_set_dim(get(), static_cast<enum isl_dim_type>(type));
9172   return manage(res);
9173 }
9174 
dim_has_any_lower_bound(isl::dim type,unsigned int pos)9175 boolean basic_set::dim_has_any_lower_bound(isl::dim type, unsigned int pos) const
9176 {
9177   return isl::set(*this).dim_has_any_lower_bound(type, pos);
9178 }
9179 
dim_id(isl::dim type,unsigned int pos)9180 isl::id basic_set::dim_id(isl::dim type, unsigned int pos) const
9181 {
9182   return isl::set(*this).dim_id(type, pos);
9183 }
9184 
dim_max(int pos)9185 isl::pw_aff basic_set::dim_max(int pos) const
9186 {
9187   return isl::set(*this).dim_max(pos);
9188 }
9189 
dim_max_val(int pos)9190 isl::val basic_set::dim_max_val(int pos) const
9191 {
9192   auto res = isl_basic_set_dim_max_val(copy(), pos);
9193   return manage(res);
9194 }
9195 
dim_min(int pos)9196 isl::pw_aff basic_set::dim_min(int pos) const
9197 {
9198   return isl::set(*this).dim_min(pos);
9199 }
9200 
dim_min_val(int pos)9201 isl::val basic_set::dim_min_val(int pos) const
9202 {
9203   return isl::set(*this).dim_min_val(pos);
9204 }
9205 
dim_name(isl::dim type,unsigned int pos)9206 std::string basic_set::dim_name(isl::dim type, unsigned int pos) const
9207 {
9208   return isl::set(*this).dim_name(type, pos);
9209 }
9210 
div(int pos)9211 isl::aff basic_set::div(int pos) const
9212 {
9213   auto res = isl_basic_set_get_div(get(), pos);
9214   return manage(res);
9215 }
9216 
get_div(int pos)9217 isl::aff basic_set::get_div(int pos) const
9218 {
9219   return div(pos);
9220 }
9221 
drop_constraints_involving_dims(isl::dim type,unsigned int first,unsigned int n)9222 isl::set basic_set::drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const
9223 {
9224   return isl::set(*this).drop_constraints_involving_dims(type, first, n);
9225 }
9226 
eliminate(isl::dim type,unsigned int first,unsigned int n)9227 isl::set basic_set::eliminate(isl::dim type, unsigned int first, unsigned int n) const
9228 {
9229   return isl::set(*this).eliminate(type, first, n);
9230 }
9231 
every_set(const std::function<boolean (isl::set)> & test)9232 boolean basic_set::every_set(const std::function<boolean(isl::set)> &test) const
9233 {
9234   return isl::set(*this).every_set(test);
9235 }
9236 
extract_set(const isl::space & space)9237 isl::set basic_set::extract_set(const isl::space &space) const
9238 {
9239   return isl::set(*this).extract_set(space);
9240 }
9241 
find_dim_by_id(isl::dim type,const isl::id & id)9242 int basic_set::find_dim_by_id(isl::dim type, const isl::id &id) const
9243 {
9244   return isl::set(*this).find_dim_by_id(type, id);
9245 }
9246 
find_dim_by_id(isl::dim type,const std::string & id)9247 int basic_set::find_dim_by_id(isl::dim type, const std::string &id) const
9248 {
9249   return this->find_dim_by_id(type, isl::id(ctx(), id));
9250 }
9251 
fix_si(isl::dim type,unsigned int pos,int value)9252 isl::basic_set basic_set::fix_si(isl::dim type, unsigned int pos, int value) const
9253 {
9254   auto res = isl_basic_set_fix_si(copy(), static_cast<enum isl_dim_type>(type), pos, value);
9255   return manage(res);
9256 }
9257 
fix_val(isl::dim type,unsigned int pos,isl::val v)9258 isl::basic_set basic_set::fix_val(isl::dim type, unsigned int pos, isl::val v) const
9259 {
9260   auto res = isl_basic_set_fix_val(copy(), static_cast<enum isl_dim_type>(type), pos, v.release());
9261   return manage(res);
9262 }
9263 
fix_val(isl::dim type,unsigned int pos,long v)9264 isl::basic_set basic_set::fix_val(isl::dim type, unsigned int pos, long v) const
9265 {
9266   return this->fix_val(type, pos, isl::val(ctx(), v));
9267 }
9268 
flatten()9269 isl::basic_set basic_set::flatten() const
9270 {
9271   auto res = isl_basic_set_flatten(copy());
9272   return manage(res);
9273 }
9274 
foreach_basic_set(const std::function<stat (isl::basic_set)> & fn)9275 stat basic_set::foreach_basic_set(const std::function<stat(isl::basic_set)> &fn) const
9276 {
9277   return isl::set(*this).foreach_basic_set(fn);
9278 }
9279 
foreach_point(const std::function<stat (isl::point)> & fn)9280 stat basic_set::foreach_point(const std::function<stat(isl::point)> &fn) const
9281 {
9282   return isl::set(*this).foreach_point(fn);
9283 }
9284 
foreach_set(const std::function<stat (isl::set)> & fn)9285 stat basic_set::foreach_set(const std::function<stat(isl::set)> &fn) const
9286 {
9287   return isl::set(*this).foreach_set(fn);
9288 }
9289 
gist(isl::basic_set context)9290 isl::basic_set basic_set::gist(isl::basic_set context) const
9291 {
9292   auto res = isl_basic_set_gist(copy(), context.release());
9293   return manage(res);
9294 }
9295 
gist(const isl::set & context)9296 isl::set basic_set::gist(const isl::set &context) const
9297 {
9298   return isl::set(*this).gist(context);
9299 }
9300 
gist(const isl::union_set & context)9301 isl::union_set basic_set::gist(const isl::union_set &context) const
9302 {
9303   return isl::set(*this).gist(context);
9304 }
9305 
gist(const isl::point & context)9306 isl::basic_set basic_set::gist(const isl::point &context) const
9307 {
9308   return this->gist(isl::basic_set(context));
9309 }
9310 
gist_params(const isl::set & context)9311 isl::set basic_set::gist_params(const isl::set &context) const
9312 {
9313   return isl::set(*this).gist_params(context);
9314 }
9315 
has_equal_space(const isl::set & set2)9316 boolean basic_set::has_equal_space(const isl::set &set2) const
9317 {
9318   return isl::set(*this).has_equal_space(set2);
9319 }
9320 
identity()9321 isl::map basic_set::identity() const
9322 {
9323   return isl::set(*this).identity();
9324 }
9325 
identity_union_pw_multi_aff()9326 isl::union_pw_multi_aff basic_set::identity_union_pw_multi_aff() const
9327 {
9328   return isl::set(*this).identity_union_pw_multi_aff();
9329 }
9330 
indicator_function()9331 isl::pw_aff basic_set::indicator_function() const
9332 {
9333   return isl::set(*this).indicator_function();
9334 }
9335 
insert_dims(isl::dim type,unsigned int pos,unsigned int n)9336 isl::set basic_set::insert_dims(isl::dim type, unsigned int pos, unsigned int n) const
9337 {
9338   return isl::set(*this).insert_dims(type, pos, n);
9339 }
9340 
insert_domain(const isl::space & domain)9341 isl::map basic_set::insert_domain(const isl::space &domain) const
9342 {
9343   return isl::set(*this).insert_domain(domain);
9344 }
9345 
intersect(isl::basic_set bset2)9346 isl::basic_set basic_set::intersect(isl::basic_set bset2) const
9347 {
9348   auto res = isl_basic_set_intersect(copy(), bset2.release());
9349   return manage(res);
9350 }
9351 
intersect(const isl::set & set2)9352 isl::set basic_set::intersect(const isl::set &set2) const
9353 {
9354   return isl::set(*this).intersect(set2);
9355 }
9356 
intersect(const isl::union_set & uset2)9357 isl::union_set basic_set::intersect(const isl::union_set &uset2) const
9358 {
9359   return isl::set(*this).intersect(uset2);
9360 }
9361 
intersect(const isl::point & bset2)9362 isl::basic_set basic_set::intersect(const isl::point &bset2) const
9363 {
9364   return this->intersect(isl::basic_set(bset2));
9365 }
9366 
intersect_params(isl::basic_set bset2)9367 isl::basic_set basic_set::intersect_params(isl::basic_set bset2) const
9368 {
9369   auto res = isl_basic_set_intersect_params(copy(), bset2.release());
9370   return manage(res);
9371 }
9372 
intersect_params(const isl::set & params)9373 isl::set basic_set::intersect_params(const isl::set &params) const
9374 {
9375   return isl::set(*this).intersect_params(params);
9376 }
9377 
intersect_params(const isl::point & bset2)9378 isl::basic_set basic_set::intersect_params(const isl::point &bset2) const
9379 {
9380   return this->intersect_params(isl::basic_set(bset2));
9381 }
9382 
involves_dims(isl::dim type,unsigned int first,unsigned int n)9383 boolean basic_set::involves_dims(isl::dim type, unsigned int first, unsigned int n) const
9384 {
9385   return isl::set(*this).involves_dims(type, first, n);
9386 }
9387 
involves_locals()9388 boolean basic_set::involves_locals() const
9389 {
9390   return isl::set(*this).involves_locals();
9391 }
9392 
is_bounded()9393 boolean basic_set::is_bounded() const
9394 {
9395   auto res = isl_basic_set_is_bounded(get());
9396   return manage(res);
9397 }
9398 
is_disjoint(const isl::set & set2)9399 boolean basic_set::is_disjoint(const isl::set &set2) const
9400 {
9401   return isl::set(*this).is_disjoint(set2);
9402 }
9403 
is_disjoint(const isl::union_set & uset2)9404 boolean basic_set::is_disjoint(const isl::union_set &uset2) const
9405 {
9406   return isl::set(*this).is_disjoint(uset2);
9407 }
9408 
is_empty()9409 boolean basic_set::is_empty() const
9410 {
9411   auto res = isl_basic_set_is_empty(get());
9412   return manage(res);
9413 }
9414 
is_equal(const isl::basic_set & bset2)9415 boolean basic_set::is_equal(const isl::basic_set &bset2) const
9416 {
9417   auto res = isl_basic_set_is_equal(get(), bset2.get());
9418   return manage(res);
9419 }
9420 
is_equal(const isl::set & set2)9421 boolean basic_set::is_equal(const isl::set &set2) const
9422 {
9423   return isl::set(*this).is_equal(set2);
9424 }
9425 
is_equal(const isl::union_set & uset2)9426 boolean basic_set::is_equal(const isl::union_set &uset2) const
9427 {
9428   return isl::set(*this).is_equal(uset2);
9429 }
9430 
is_equal(const isl::point & bset2)9431 boolean basic_set::is_equal(const isl::point &bset2) const
9432 {
9433   return this->is_equal(isl::basic_set(bset2));
9434 }
9435 
is_params()9436 boolean basic_set::is_params() const
9437 {
9438   return isl::set(*this).is_params();
9439 }
9440 
is_singleton()9441 boolean basic_set::is_singleton() const
9442 {
9443   return isl::set(*this).is_singleton();
9444 }
9445 
is_strict_subset(const isl::set & set2)9446 boolean basic_set::is_strict_subset(const isl::set &set2) const
9447 {
9448   return isl::set(*this).is_strict_subset(set2);
9449 }
9450 
is_strict_subset(const isl::union_set & uset2)9451 boolean basic_set::is_strict_subset(const isl::union_set &uset2) const
9452 {
9453   return isl::set(*this).is_strict_subset(uset2);
9454 }
9455 
is_subset(const isl::basic_set & bset2)9456 boolean basic_set::is_subset(const isl::basic_set &bset2) const
9457 {
9458   auto res = isl_basic_set_is_subset(get(), bset2.get());
9459   return manage(res);
9460 }
9461 
is_subset(const isl::set & set2)9462 boolean basic_set::is_subset(const isl::set &set2) const
9463 {
9464   return isl::set(*this).is_subset(set2);
9465 }
9466 
is_subset(const isl::union_set & uset2)9467 boolean basic_set::is_subset(const isl::union_set &uset2) const
9468 {
9469   return isl::set(*this).is_subset(uset2);
9470 }
9471 
is_subset(const isl::point & bset2)9472 boolean basic_set::is_subset(const isl::point &bset2) const
9473 {
9474   return this->is_subset(isl::basic_set(bset2));
9475 }
9476 
is_wrapping()9477 boolean basic_set::is_wrapping() const
9478 {
9479   auto res = isl_basic_set_is_wrapping(get());
9480   return manage(res);
9481 }
9482 
isa_set()9483 boolean basic_set::isa_set() const
9484 {
9485   return isl::set(*this).isa_set();
9486 }
9487 
lexmax()9488 isl::set basic_set::lexmax() const
9489 {
9490   auto res = isl_basic_set_lexmax(copy());
9491   return manage(res);
9492 }
9493 
lexmax_pw_multi_aff()9494 isl::pw_multi_aff basic_set::lexmax_pw_multi_aff() const
9495 {
9496   return isl::set(*this).lexmax_pw_multi_aff();
9497 }
9498 
lexmin()9499 isl::set basic_set::lexmin() const
9500 {
9501   auto res = isl_basic_set_lexmin(copy());
9502   return manage(res);
9503 }
9504 
lexmin_pw_multi_aff()9505 isl::pw_multi_aff basic_set::lexmin_pw_multi_aff() const
9506 {
9507   return isl::set(*this).lexmin_pw_multi_aff();
9508 }
9509 
lower_bound(const isl::multi_pw_aff & lower)9510 isl::set basic_set::lower_bound(const isl::multi_pw_aff &lower) const
9511 {
9512   return isl::set(*this).lower_bound(lower);
9513 }
9514 
lower_bound(const isl::multi_val & lower)9515 isl::set basic_set::lower_bound(const isl::multi_val &lower) const
9516 {
9517   return isl::set(*this).lower_bound(lower);
9518 }
9519 
lower_bound_si(isl::dim type,unsigned int pos,int value)9520 isl::set basic_set::lower_bound_si(isl::dim type, unsigned int pos, int value) const
9521 {
9522   return isl::set(*this).lower_bound_si(type, pos, value);
9523 }
9524 
lower_bound_val(isl::dim type,unsigned int pos,const isl::val & value)9525 isl::set basic_set::lower_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const
9526 {
9527   return isl::set(*this).lower_bound_val(type, pos, value);
9528 }
9529 
lower_bound_val(isl::dim type,unsigned int pos,long value)9530 isl::set basic_set::lower_bound_val(isl::dim type, unsigned int pos, long value) const
9531 {
9532   return this->lower_bound_val(type, pos, isl::val(ctx(), value));
9533 }
9534 
max_multi_pw_aff()9535 isl::multi_pw_aff basic_set::max_multi_pw_aff() const
9536 {
9537   return isl::set(*this).max_multi_pw_aff();
9538 }
9539 
max_val(const isl::aff & obj)9540 isl::val basic_set::max_val(const isl::aff &obj) const
9541 {
9542   return isl::set(*this).max_val(obj);
9543 }
9544 
min_multi_pw_aff()9545 isl::multi_pw_aff basic_set::min_multi_pw_aff() const
9546 {
9547   return isl::set(*this).min_multi_pw_aff();
9548 }
9549 
min_val(const isl::aff & obj)9550 isl::val basic_set::min_val(const isl::aff &obj) const
9551 {
9552   return isl::set(*this).min_val(obj);
9553 }
9554 
n_basic_set()9555 class size basic_set::n_basic_set() const
9556 {
9557   return isl::set(*this).n_basic_set();
9558 }
9559 
params()9560 isl::basic_set basic_set::params() const
9561 {
9562   auto res = isl_basic_set_params(copy());
9563   return manage(res);
9564 }
9565 
plain_get_val_if_fixed(isl::dim type,unsigned int pos)9566 isl::val basic_set::plain_get_val_if_fixed(isl::dim type, unsigned int pos) const
9567 {
9568   return isl::set(*this).plain_get_val_if_fixed(type, pos);
9569 }
9570 
plain_multi_val_if_fixed()9571 isl::multi_val basic_set::plain_multi_val_if_fixed() const
9572 {
9573   return isl::set(*this).plain_multi_val_if_fixed();
9574 }
9575 
polyhedral_hull()9576 isl::basic_set basic_set::polyhedral_hull() const
9577 {
9578   return isl::set(*this).polyhedral_hull();
9579 }
9580 
preimage(const isl::multi_aff & ma)9581 isl::set basic_set::preimage(const isl::multi_aff &ma) const
9582 {
9583   return isl::set(*this).preimage(ma);
9584 }
9585 
preimage(const isl::multi_pw_aff & mpa)9586 isl::set basic_set::preimage(const isl::multi_pw_aff &mpa) const
9587 {
9588   return isl::set(*this).preimage(mpa);
9589 }
9590 
preimage(const isl::pw_multi_aff & pma)9591 isl::set basic_set::preimage(const isl::pw_multi_aff &pma) const
9592 {
9593   return isl::set(*this).preimage(pma);
9594 }
9595 
preimage(const isl::union_pw_multi_aff & upma)9596 isl::union_set basic_set::preimage(const isl::union_pw_multi_aff &upma) const
9597 {
9598   return isl::set(*this).preimage(upma);
9599 }
9600 
product(const isl::set & set2)9601 isl::set basic_set::product(const isl::set &set2) const
9602 {
9603   return isl::set(*this).product(set2);
9604 }
9605 
project_out(isl::dim type,unsigned int first,unsigned int n)9606 isl::basic_set basic_set::project_out(isl::dim type, unsigned int first, unsigned int n) const
9607 {
9608   auto res = isl_basic_set_project_out(copy(), static_cast<enum isl_dim_type>(type), first, n);
9609   return manage(res);
9610 }
9611 
project_out_all_params()9612 isl::set basic_set::project_out_all_params() const
9613 {
9614   return isl::set(*this).project_out_all_params();
9615 }
9616 
project_out_param(const isl::id & id)9617 isl::set basic_set::project_out_param(const isl::id &id) const
9618 {
9619   return isl::set(*this).project_out_param(id);
9620 }
9621 
project_out_param(const std::string & id)9622 isl::set basic_set::project_out_param(const std::string &id) const
9623 {
9624   return this->project_out_param(isl::id(ctx(), id));
9625 }
9626 
project_out_param(const isl::id_list & list)9627 isl::set basic_set::project_out_param(const isl::id_list &list) const
9628 {
9629   return isl::set(*this).project_out_param(list);
9630 }
9631 
pw_multi_aff_on_domain(const isl::multi_val & mv)9632 isl::pw_multi_aff basic_set::pw_multi_aff_on_domain(const isl::multi_val &mv) const
9633 {
9634   return isl::set(*this).pw_multi_aff_on_domain(mv);
9635 }
9636 
remove_dims(isl::dim type,unsigned int first,unsigned int n)9637 isl::set basic_set::remove_dims(isl::dim type, unsigned int first, unsigned int n) const
9638 {
9639   return isl::set(*this).remove_dims(type, first, n);
9640 }
9641 
remove_divs()9642 isl::set basic_set::remove_divs() const
9643 {
9644   return isl::set(*this).remove_divs();
9645 }
9646 
remove_redundancies()9647 isl::set basic_set::remove_redundancies() const
9648 {
9649   return isl::set(*this).remove_redundancies();
9650 }
9651 
reset_tuple_id()9652 isl::set basic_set::reset_tuple_id() const
9653 {
9654   return isl::set(*this).reset_tuple_id();
9655 }
9656 
sample()9657 isl::basic_set basic_set::sample() const
9658 {
9659   auto res = isl_basic_set_sample(copy());
9660   return manage(res);
9661 }
9662 
sample_point()9663 isl::point basic_set::sample_point() const
9664 {
9665   auto res = isl_basic_set_sample_point(copy());
9666   return manage(res);
9667 }
9668 
set_dim_id(isl::dim type,unsigned int pos,const isl::id & id)9669 isl::set basic_set::set_dim_id(isl::dim type, unsigned int pos, const isl::id &id) const
9670 {
9671   return isl::set(*this).set_dim_id(type, pos, id);
9672 }
9673 
set_dim_id(isl::dim type,unsigned int pos,const std::string & id)9674 isl::set basic_set::set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const
9675 {
9676   return this->set_dim_id(type, pos, isl::id(ctx(), id));
9677 }
9678 
set_list()9679 isl::set_list basic_set::set_list() const
9680 {
9681   return isl::set(*this).set_list();
9682 }
9683 
set_tuple_id(const isl::id & id)9684 isl::set basic_set::set_tuple_id(const isl::id &id) const
9685 {
9686   return isl::set(*this).set_tuple_id(id);
9687 }
9688 
set_tuple_id(const std::string & id)9689 isl::set basic_set::set_tuple_id(const std::string &id) const
9690 {
9691   return this->set_tuple_id(isl::id(ctx(), id));
9692 }
9693 
simple_fixed_box_hull()9694 isl::fixed_box basic_set::simple_fixed_box_hull() const
9695 {
9696   return isl::set(*this).simple_fixed_box_hull();
9697 }
9698 
simple_hull()9699 isl::basic_set basic_set::simple_hull() const
9700 {
9701   return isl::set(*this).simple_hull();
9702 }
9703 
space()9704 isl::space basic_set::space() const
9705 {
9706   auto res = isl_basic_set_get_space(get());
9707   return manage(res);
9708 }
9709 
get_space()9710 isl::space basic_set::get_space() const
9711 {
9712   return space();
9713 }
9714 
stride(int pos)9715 isl::val basic_set::stride(int pos) const
9716 {
9717   return isl::set(*this).stride(pos);
9718 }
9719 
subtract(const isl::set & set2)9720 isl::set basic_set::subtract(const isl::set &set2) const
9721 {
9722   return isl::set(*this).subtract(set2);
9723 }
9724 
subtract(const isl::union_set & uset2)9725 isl::union_set basic_set::subtract(const isl::union_set &uset2) const
9726 {
9727   return isl::set(*this).subtract(uset2);
9728 }
9729 
to_list()9730 isl::basic_set_list basic_set::to_list() const
9731 {
9732   auto res = isl_basic_set_to_list(copy());
9733   return manage(res);
9734 }
9735 
to_set()9736 isl::set basic_set::to_set() const
9737 {
9738   auto res = isl_basic_set_to_set(copy());
9739   return manage(res);
9740 }
9741 
to_union_set()9742 isl::union_set basic_set::to_union_set() const
9743 {
9744   return isl::set(*this).to_union_set();
9745 }
9746 
translation()9747 isl::map basic_set::translation() const
9748 {
9749   return isl::set(*this).translation();
9750 }
9751 
tuple_dim()9752 class size basic_set::tuple_dim() const
9753 {
9754   return isl::set(*this).tuple_dim();
9755 }
9756 
tuple_id()9757 isl::id basic_set::tuple_id() const
9758 {
9759   return isl::set(*this).tuple_id();
9760 }
9761 
tuple_name()9762 std::string basic_set::tuple_name() const
9763 {
9764   return isl::set(*this).tuple_name();
9765 }
9766 
unbind_params(const isl::multi_id & tuple)9767 isl::set basic_set::unbind_params(const isl::multi_id &tuple) const
9768 {
9769   return isl::set(*this).unbind_params(tuple);
9770 }
9771 
unbind_params_insert_domain(const isl::multi_id & domain)9772 isl::map basic_set::unbind_params_insert_domain(const isl::multi_id &domain) const
9773 {
9774   return isl::set(*this).unbind_params_insert_domain(domain);
9775 }
9776 
unite(isl::basic_set bset2)9777 isl::set basic_set::unite(isl::basic_set bset2) const
9778 {
9779   auto res = isl_basic_set_union(copy(), bset2.release());
9780   return manage(res);
9781 }
9782 
unite(const isl::set & set2)9783 isl::set basic_set::unite(const isl::set &set2) const
9784 {
9785   return isl::set(*this).unite(set2);
9786 }
9787 
unite(const isl::union_set & uset2)9788 isl::union_set basic_set::unite(const isl::union_set &uset2) const
9789 {
9790   return isl::set(*this).unite(uset2);
9791 }
9792 
unite(const isl::point & bset2)9793 isl::set basic_set::unite(const isl::point &bset2) const
9794 {
9795   return this->unite(isl::basic_set(bset2));
9796 }
9797 
universe(isl::space space)9798 isl::basic_set basic_set::universe(isl::space space)
9799 {
9800   auto res = isl_basic_set_universe(space.release());
9801   return manage(res);
9802 }
9803 
unshifted_simple_hull()9804 isl::basic_set basic_set::unshifted_simple_hull() const
9805 {
9806   return isl::set(*this).unshifted_simple_hull();
9807 }
9808 
unwrap()9809 isl::map basic_set::unwrap() const
9810 {
9811   return isl::set(*this).unwrap();
9812 }
9813 
upper_bound(const isl::multi_pw_aff & upper)9814 isl::set basic_set::upper_bound(const isl::multi_pw_aff &upper) const
9815 {
9816   return isl::set(*this).upper_bound(upper);
9817 }
9818 
upper_bound(const isl::multi_val & upper)9819 isl::set basic_set::upper_bound(const isl::multi_val &upper) const
9820 {
9821   return isl::set(*this).upper_bound(upper);
9822 }
9823 
upper_bound_val(isl::dim type,unsigned int pos,const isl::val & value)9824 isl::set basic_set::upper_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const
9825 {
9826   return isl::set(*this).upper_bound_val(type, pos, value);
9827 }
9828 
upper_bound_val(isl::dim type,unsigned int pos,long value)9829 isl::set basic_set::upper_bound_val(isl::dim type, unsigned int pos, long value) const
9830 {
9831   return this->upper_bound_val(type, pos, isl::val(ctx(), value));
9832 }
9833 
9834 inline std::ostream &operator<<(std::ostream &os, const basic_set &obj)
9835 {
9836   char *str = isl_basic_set_to_str(obj.get());
9837   if (!str) {
9838     os.setstate(std::ios_base::badbit);
9839     return os;
9840   }
9841   os << str;
9842   free(str);
9843   return os;
9844 }
9845 
9846 // implementations for isl::basic_set_list
manage(__isl_take isl_basic_set_list * ptr)9847 basic_set_list manage(__isl_take isl_basic_set_list *ptr) {
9848   return basic_set_list(ptr);
9849 }
manage_copy(__isl_keep isl_basic_set_list * ptr)9850 basic_set_list manage_copy(__isl_keep isl_basic_set_list *ptr) {
9851   ptr = isl_basic_set_list_copy(ptr);
9852   return basic_set_list(ptr);
9853 }
9854 
basic_set_list()9855 basic_set_list::basic_set_list()
9856     : ptr(nullptr) {}
9857 
basic_set_list(const basic_set_list & obj)9858 basic_set_list::basic_set_list(const basic_set_list &obj)
9859     : ptr(nullptr)
9860 {
9861   ptr = obj.copy();
9862 }
9863 
basic_set_list(__isl_take isl_basic_set_list * ptr)9864 basic_set_list::basic_set_list(__isl_take isl_basic_set_list *ptr)
9865     : ptr(ptr) {}
9866 
basic_set_list(isl::ctx ctx,int n)9867 basic_set_list::basic_set_list(isl::ctx ctx, int n)
9868 {
9869   auto res = isl_basic_set_list_alloc(ctx.release(), n);
9870   ptr = res;
9871 }
9872 
basic_set_list(isl::basic_set el)9873 basic_set_list::basic_set_list(isl::basic_set el)
9874 {
9875   auto res = isl_basic_set_list_from_basic_set(el.release());
9876   ptr = res;
9877 }
9878 
9879 basic_set_list &basic_set_list::operator=(basic_set_list obj) {
9880   std::swap(this->ptr, obj.ptr);
9881   return *this;
9882 }
9883 
~basic_set_list()9884 basic_set_list::~basic_set_list() {
9885   if (ptr)
9886     isl_basic_set_list_free(ptr);
9887 }
9888 
copy()9889 __isl_give isl_basic_set_list *basic_set_list::copy() const & {
9890   return isl_basic_set_list_copy(ptr);
9891 }
9892 
get()9893 __isl_keep isl_basic_set_list *basic_set_list::get() const {
9894   return ptr;
9895 }
9896 
release()9897 __isl_give isl_basic_set_list *basic_set_list::release() {
9898   isl_basic_set_list *tmp = ptr;
9899   ptr = nullptr;
9900   return tmp;
9901 }
9902 
is_null()9903 bool basic_set_list::is_null() const {
9904   return ptr == nullptr;
9905 }
9906 
ctx()9907 isl::ctx basic_set_list::ctx() const {
9908   return isl::ctx(isl_basic_set_list_get_ctx(ptr));
9909 }
9910 
add(isl::basic_set el)9911 isl::basic_set_list basic_set_list::add(isl::basic_set el) const
9912 {
9913   auto res = isl_basic_set_list_add(copy(), el.release());
9914   return manage(res);
9915 }
9916 
at(int index)9917 isl::basic_set basic_set_list::at(int index) const
9918 {
9919   auto res = isl_basic_set_list_get_at(get(), index);
9920   return manage(res);
9921 }
9922 
get_at(int index)9923 isl::basic_set basic_set_list::get_at(int index) const
9924 {
9925   return at(index);
9926 }
9927 
clear()9928 isl::basic_set_list basic_set_list::clear() const
9929 {
9930   auto res = isl_basic_set_list_clear(copy());
9931   return manage(res);
9932 }
9933 
concat(isl::basic_set_list list2)9934 isl::basic_set_list basic_set_list::concat(isl::basic_set_list list2) const
9935 {
9936   auto res = isl_basic_set_list_concat(copy(), list2.release());
9937   return manage(res);
9938 }
9939 
drop(unsigned int first,unsigned int n)9940 isl::basic_set_list basic_set_list::drop(unsigned int first, unsigned int n) const
9941 {
9942   auto res = isl_basic_set_list_drop(copy(), first, n);
9943   return manage(res);
9944 }
9945 
foreach(const std::function<stat (isl::basic_set)> & fn)9946 stat basic_set_list::foreach(const std::function<stat(isl::basic_set)> &fn) const
9947 {
9948   struct fn_data {
9949     std::function<stat(isl::basic_set)> func;
9950   } fn_data = { fn };
9951   auto fn_lambda = [](isl_basic_set *arg_0, void *arg_1) -> isl_stat {
9952     auto *data = static_cast<struct fn_data *>(arg_1);
9953     auto ret = (data->func)(manage(arg_0));
9954     return ret.release();
9955   };
9956   auto res = isl_basic_set_list_foreach(get(), fn_lambda, &fn_data);
9957   return manage(res);
9958 }
9959 
insert(unsigned int pos,isl::basic_set el)9960 isl::basic_set_list basic_set_list::insert(unsigned int pos, isl::basic_set el) const
9961 {
9962   auto res = isl_basic_set_list_insert(copy(), pos, el.release());
9963   return manage(res);
9964 }
9965 
size()9966 class size basic_set_list::size() const
9967 {
9968   auto res = isl_basic_set_list_size(get());
9969   return manage(res);
9970 }
9971 
9972 inline std::ostream &operator<<(std::ostream &os, const basic_set_list &obj)
9973 {
9974   char *str = isl_basic_set_list_to_str(obj.get());
9975   if (!str) {
9976     os.setstate(std::ios_base::badbit);
9977     return os;
9978   }
9979   os << str;
9980   free(str);
9981   return os;
9982 }
9983 
9984 // implementations for isl::constraint
manage(__isl_take isl_constraint * ptr)9985 constraint manage(__isl_take isl_constraint *ptr) {
9986   return constraint(ptr);
9987 }
manage_copy(__isl_keep isl_constraint * ptr)9988 constraint manage_copy(__isl_keep isl_constraint *ptr) {
9989   ptr = isl_constraint_copy(ptr);
9990   return constraint(ptr);
9991 }
9992 
constraint()9993 constraint::constraint()
9994     : ptr(nullptr) {}
9995 
constraint(const constraint & obj)9996 constraint::constraint(const constraint &obj)
9997     : ptr(nullptr)
9998 {
9999   ptr = obj.copy();
10000 }
10001 
constraint(__isl_take isl_constraint * ptr)10002 constraint::constraint(__isl_take isl_constraint *ptr)
10003     : ptr(ptr) {}
10004 
10005 constraint &constraint::operator=(constraint obj) {
10006   std::swap(this->ptr, obj.ptr);
10007   return *this;
10008 }
10009 
~constraint()10010 constraint::~constraint() {
10011   if (ptr)
10012     isl_constraint_free(ptr);
10013 }
10014 
copy()10015 __isl_give isl_constraint *constraint::copy() const & {
10016   return isl_constraint_copy(ptr);
10017 }
10018 
get()10019 __isl_keep isl_constraint *constraint::get() const {
10020   return ptr;
10021 }
10022 
release()10023 __isl_give isl_constraint *constraint::release() {
10024   isl_constraint *tmp = ptr;
10025   ptr = nullptr;
10026   return tmp;
10027 }
10028 
is_null()10029 bool constraint::is_null() const {
10030   return ptr == nullptr;
10031 }
10032 
ctx()10033 isl::ctx constraint::ctx() const {
10034   return isl::ctx(isl_constraint_get_ctx(ptr));
10035 }
10036 
alloc_equality(isl::local_space ls)10037 isl::constraint constraint::alloc_equality(isl::local_space ls)
10038 {
10039   auto res = isl_constraint_alloc_equality(ls.release());
10040   return manage(res);
10041 }
10042 
alloc_inequality(isl::local_space ls)10043 isl::constraint constraint::alloc_inequality(isl::local_space ls)
10044 {
10045   auto res = isl_constraint_alloc_inequality(ls.release());
10046   return manage(res);
10047 }
10048 
set_coefficient_si(isl::dim type,int pos,int v)10049 isl::constraint constraint::set_coefficient_si(isl::dim type, int pos, int v) const
10050 {
10051   auto res = isl_constraint_set_coefficient_si(copy(), static_cast<enum isl_dim_type>(type), pos, v);
10052   return manage(res);
10053 }
10054 
set_constant_si(int v)10055 isl::constraint constraint::set_constant_si(int v) const
10056 {
10057   auto res = isl_constraint_set_constant_si(copy(), v);
10058   return manage(res);
10059 }
10060 
set_constant_val(isl::val v)10061 isl::constraint constraint::set_constant_val(isl::val v) const
10062 {
10063   auto res = isl_constraint_set_constant_val(copy(), v.release());
10064   return manage(res);
10065 }
10066 
set_constant_val(long v)10067 isl::constraint constraint::set_constant_val(long v) const
10068 {
10069   return this->set_constant_val(isl::val(ctx(), v));
10070 }
10071 
10072 // implementations for isl::fixed_box
manage(__isl_take isl_fixed_box * ptr)10073 fixed_box manage(__isl_take isl_fixed_box *ptr) {
10074   return fixed_box(ptr);
10075 }
manage_copy(__isl_keep isl_fixed_box * ptr)10076 fixed_box manage_copy(__isl_keep isl_fixed_box *ptr) {
10077   ptr = isl_fixed_box_copy(ptr);
10078   return fixed_box(ptr);
10079 }
10080 
fixed_box()10081 fixed_box::fixed_box()
10082     : ptr(nullptr) {}
10083 
fixed_box(const fixed_box & obj)10084 fixed_box::fixed_box(const fixed_box &obj)
10085     : ptr(nullptr)
10086 {
10087   ptr = obj.copy();
10088 }
10089 
fixed_box(__isl_take isl_fixed_box * ptr)10090 fixed_box::fixed_box(__isl_take isl_fixed_box *ptr)
10091     : ptr(ptr) {}
10092 
10093 fixed_box &fixed_box::operator=(fixed_box obj) {
10094   std::swap(this->ptr, obj.ptr);
10095   return *this;
10096 }
10097 
~fixed_box()10098 fixed_box::~fixed_box() {
10099   if (ptr)
10100     isl_fixed_box_free(ptr);
10101 }
10102 
copy()10103 __isl_give isl_fixed_box *fixed_box::copy() const & {
10104   return isl_fixed_box_copy(ptr);
10105 }
10106 
get()10107 __isl_keep isl_fixed_box *fixed_box::get() const {
10108   return ptr;
10109 }
10110 
release()10111 __isl_give isl_fixed_box *fixed_box::release() {
10112   isl_fixed_box *tmp = ptr;
10113   ptr = nullptr;
10114   return tmp;
10115 }
10116 
is_null()10117 bool fixed_box::is_null() const {
10118   return ptr == nullptr;
10119 }
10120 
ctx()10121 isl::ctx fixed_box::ctx() const {
10122   return isl::ctx(isl_fixed_box_get_ctx(ptr));
10123 }
10124 
is_valid()10125 boolean fixed_box::is_valid() const
10126 {
10127   auto res = isl_fixed_box_is_valid(get());
10128   return manage(res);
10129 }
10130 
offset()10131 isl::multi_aff fixed_box::offset() const
10132 {
10133   auto res = isl_fixed_box_get_offset(get());
10134   return manage(res);
10135 }
10136 
get_offset()10137 isl::multi_aff fixed_box::get_offset() const
10138 {
10139   return offset();
10140 }
10141 
size()10142 isl::multi_val fixed_box::size() const
10143 {
10144   auto res = isl_fixed_box_get_size(get());
10145   return manage(res);
10146 }
10147 
get_size()10148 isl::multi_val fixed_box::get_size() const
10149 {
10150   return size();
10151 }
10152 
space()10153 isl::space fixed_box::space() const
10154 {
10155   auto res = isl_fixed_box_get_space(get());
10156   return manage(res);
10157 }
10158 
get_space()10159 isl::space fixed_box::get_space() const
10160 {
10161   return space();
10162 }
10163 
10164 inline std::ostream &operator<<(std::ostream &os, const fixed_box &obj)
10165 {
10166   char *str = isl_fixed_box_to_str(obj.get());
10167   if (!str) {
10168     os.setstate(std::ios_base::badbit);
10169     return os;
10170   }
10171   os << str;
10172   free(str);
10173   return os;
10174 }
10175 
10176 // implementations for isl::id
manage(__isl_take isl_id * ptr)10177 id manage(__isl_take isl_id *ptr) {
10178   return id(ptr);
10179 }
manage_copy(__isl_keep isl_id * ptr)10180 id manage_copy(__isl_keep isl_id *ptr) {
10181   ptr = isl_id_copy(ptr);
10182   return id(ptr);
10183 }
10184 
id()10185 id::id()
10186     : ptr(nullptr) {}
10187 
id(const id & obj)10188 id::id(const id &obj)
10189     : ptr(nullptr)
10190 {
10191   ptr = obj.copy();
10192 }
10193 
id(__isl_take isl_id * ptr)10194 id::id(__isl_take isl_id *ptr)
10195     : ptr(ptr) {}
10196 
id(isl::ctx ctx,const std::string & str)10197 id::id(isl::ctx ctx, const std::string &str)
10198 {
10199   auto res = isl_id_read_from_str(ctx.release(), str.c_str());
10200   ptr = res;
10201 }
10202 
10203 id &id::operator=(id obj) {
10204   std::swap(this->ptr, obj.ptr);
10205   return *this;
10206 }
10207 
~id()10208 id::~id() {
10209   if (ptr)
10210     isl_id_free(ptr);
10211 }
10212 
copy()10213 __isl_give isl_id *id::copy() const & {
10214   return isl_id_copy(ptr);
10215 }
10216 
get()10217 __isl_keep isl_id *id::get() const {
10218   return ptr;
10219 }
10220 
release()10221 __isl_give isl_id *id::release() {
10222   isl_id *tmp = ptr;
10223   ptr = nullptr;
10224   return tmp;
10225 }
10226 
is_null()10227 bool id::is_null() const {
10228   return ptr == nullptr;
10229 }
10230 
ctx()10231 isl::ctx id::ctx() const {
10232   return isl::ctx(isl_id_get_ctx(ptr));
10233 }
10234 
alloc(isl::ctx ctx,const std::string & name,void * user)10235 isl::id id::alloc(isl::ctx ctx, const std::string &name, void * user)
10236 {
10237   auto res = isl_id_alloc(ctx.release(), name.c_str(), user);
10238   return manage(res);
10239 }
10240 
name()10241 std::string id::name() const
10242 {
10243   auto res = isl_id_get_name(get());
10244   std::string tmp(res);
10245   return tmp;
10246 }
10247 
get_name()10248 std::string id::get_name() const
10249 {
10250   return name();
10251 }
10252 
to_list()10253 isl::id_list id::to_list() const
10254 {
10255   auto res = isl_id_to_list(copy());
10256   return manage(res);
10257 }
10258 
user()10259 void * id::user() const
10260 {
10261   auto res = isl_id_get_user(get());
10262   return res;
10263 }
10264 
get_user()10265 void * id::get_user() const
10266 {
10267   return user();
10268 }
10269 
10270 inline std::ostream &operator<<(std::ostream &os, const id &obj)
10271 {
10272   char *str = isl_id_to_str(obj.get());
10273   if (!str) {
10274     os.setstate(std::ios_base::badbit);
10275     return os;
10276   }
10277   os << str;
10278   free(str);
10279   return os;
10280 }
10281 
10282 // implementations for isl::id_list
manage(__isl_take isl_id_list * ptr)10283 id_list manage(__isl_take isl_id_list *ptr) {
10284   return id_list(ptr);
10285 }
manage_copy(__isl_keep isl_id_list * ptr)10286 id_list manage_copy(__isl_keep isl_id_list *ptr) {
10287   ptr = isl_id_list_copy(ptr);
10288   return id_list(ptr);
10289 }
10290 
id_list()10291 id_list::id_list()
10292     : ptr(nullptr) {}
10293 
id_list(const id_list & obj)10294 id_list::id_list(const id_list &obj)
10295     : ptr(nullptr)
10296 {
10297   ptr = obj.copy();
10298 }
10299 
id_list(__isl_take isl_id_list * ptr)10300 id_list::id_list(__isl_take isl_id_list *ptr)
10301     : ptr(ptr) {}
10302 
id_list(isl::ctx ctx,int n)10303 id_list::id_list(isl::ctx ctx, int n)
10304 {
10305   auto res = isl_id_list_alloc(ctx.release(), n);
10306   ptr = res;
10307 }
10308 
id_list(isl::id el)10309 id_list::id_list(isl::id el)
10310 {
10311   auto res = isl_id_list_from_id(el.release());
10312   ptr = res;
10313 }
10314 
id_list(isl::ctx ctx,const std::string & str)10315 id_list::id_list(isl::ctx ctx, const std::string &str)
10316 {
10317   auto res = isl_id_list_read_from_str(ctx.release(), str.c_str());
10318   ptr = res;
10319 }
10320 
10321 id_list &id_list::operator=(id_list obj) {
10322   std::swap(this->ptr, obj.ptr);
10323   return *this;
10324 }
10325 
~id_list()10326 id_list::~id_list() {
10327   if (ptr)
10328     isl_id_list_free(ptr);
10329 }
10330 
copy()10331 __isl_give isl_id_list *id_list::copy() const & {
10332   return isl_id_list_copy(ptr);
10333 }
10334 
get()10335 __isl_keep isl_id_list *id_list::get() const {
10336   return ptr;
10337 }
10338 
release()10339 __isl_give isl_id_list *id_list::release() {
10340   isl_id_list *tmp = ptr;
10341   ptr = nullptr;
10342   return tmp;
10343 }
10344 
is_null()10345 bool id_list::is_null() const {
10346   return ptr == nullptr;
10347 }
10348 
ctx()10349 isl::ctx id_list::ctx() const {
10350   return isl::ctx(isl_id_list_get_ctx(ptr));
10351 }
10352 
add(isl::id el)10353 isl::id_list id_list::add(isl::id el) const
10354 {
10355   auto res = isl_id_list_add(copy(), el.release());
10356   return manage(res);
10357 }
10358 
add(const std::string & el)10359 isl::id_list id_list::add(const std::string &el) const
10360 {
10361   return this->add(isl::id(ctx(), el));
10362 }
10363 
at(int index)10364 isl::id id_list::at(int index) const
10365 {
10366   auto res = isl_id_list_get_at(get(), index);
10367   return manage(res);
10368 }
10369 
get_at(int index)10370 isl::id id_list::get_at(int index) const
10371 {
10372   return at(index);
10373 }
10374 
clear()10375 isl::id_list id_list::clear() const
10376 {
10377   auto res = isl_id_list_clear(copy());
10378   return manage(res);
10379 }
10380 
concat(isl::id_list list2)10381 isl::id_list id_list::concat(isl::id_list list2) const
10382 {
10383   auto res = isl_id_list_concat(copy(), list2.release());
10384   return manage(res);
10385 }
10386 
drop(unsigned int first,unsigned int n)10387 isl::id_list id_list::drop(unsigned int first, unsigned int n) const
10388 {
10389   auto res = isl_id_list_drop(copy(), first, n);
10390   return manage(res);
10391 }
10392 
foreach(const std::function<stat (isl::id)> & fn)10393 stat id_list::foreach(const std::function<stat(isl::id)> &fn) const
10394 {
10395   struct fn_data {
10396     std::function<stat(isl::id)> func;
10397   } fn_data = { fn };
10398   auto fn_lambda = [](isl_id *arg_0, void *arg_1) -> isl_stat {
10399     auto *data = static_cast<struct fn_data *>(arg_1);
10400     auto ret = (data->func)(manage(arg_0));
10401     return ret.release();
10402   };
10403   auto res = isl_id_list_foreach(get(), fn_lambda, &fn_data);
10404   return manage(res);
10405 }
10406 
insert(unsigned int pos,isl::id el)10407 isl::id_list id_list::insert(unsigned int pos, isl::id el) const
10408 {
10409   auto res = isl_id_list_insert(copy(), pos, el.release());
10410   return manage(res);
10411 }
10412 
insert(unsigned int pos,const std::string & el)10413 isl::id_list id_list::insert(unsigned int pos, const std::string &el) const
10414 {
10415   return this->insert(pos, isl::id(ctx(), el));
10416 }
10417 
size()10418 class size id_list::size() const
10419 {
10420   auto res = isl_id_list_size(get());
10421   return manage(res);
10422 }
10423 
10424 inline std::ostream &operator<<(std::ostream &os, const id_list &obj)
10425 {
10426   char *str = isl_id_list_to_str(obj.get());
10427   if (!str) {
10428     os.setstate(std::ios_base::badbit);
10429     return os;
10430   }
10431   os << str;
10432   free(str);
10433   return os;
10434 }
10435 
10436 // implementations for isl::id_to_ast_expr
manage(__isl_take isl_id_to_ast_expr * ptr)10437 id_to_ast_expr manage(__isl_take isl_id_to_ast_expr *ptr) {
10438   return id_to_ast_expr(ptr);
10439 }
manage_copy(__isl_keep isl_id_to_ast_expr * ptr)10440 id_to_ast_expr manage_copy(__isl_keep isl_id_to_ast_expr *ptr) {
10441   ptr = isl_id_to_ast_expr_copy(ptr);
10442   return id_to_ast_expr(ptr);
10443 }
10444 
id_to_ast_expr()10445 id_to_ast_expr::id_to_ast_expr()
10446     : ptr(nullptr) {}
10447 
id_to_ast_expr(const id_to_ast_expr & obj)10448 id_to_ast_expr::id_to_ast_expr(const id_to_ast_expr &obj)
10449     : ptr(nullptr)
10450 {
10451   ptr = obj.copy();
10452 }
10453 
id_to_ast_expr(__isl_take isl_id_to_ast_expr * ptr)10454 id_to_ast_expr::id_to_ast_expr(__isl_take isl_id_to_ast_expr *ptr)
10455     : ptr(ptr) {}
10456 
10457 id_to_ast_expr &id_to_ast_expr::operator=(id_to_ast_expr obj) {
10458   std::swap(this->ptr, obj.ptr);
10459   return *this;
10460 }
10461 
~id_to_ast_expr()10462 id_to_ast_expr::~id_to_ast_expr() {
10463   if (ptr)
10464     isl_id_to_ast_expr_free(ptr);
10465 }
10466 
copy()10467 __isl_give isl_id_to_ast_expr *id_to_ast_expr::copy() const & {
10468   return isl_id_to_ast_expr_copy(ptr);
10469 }
10470 
get()10471 __isl_keep isl_id_to_ast_expr *id_to_ast_expr::get() const {
10472   return ptr;
10473 }
10474 
release()10475 __isl_give isl_id_to_ast_expr *id_to_ast_expr::release() {
10476   isl_id_to_ast_expr *tmp = ptr;
10477   ptr = nullptr;
10478   return tmp;
10479 }
10480 
is_null()10481 bool id_to_ast_expr::is_null() const {
10482   return ptr == nullptr;
10483 }
10484 
ctx()10485 isl::ctx id_to_ast_expr::ctx() const {
10486   return isl::ctx(isl_id_to_ast_expr_get_ctx(ptr));
10487 }
10488 
alloc(isl::ctx ctx,int min_size)10489 isl::id_to_ast_expr id_to_ast_expr::alloc(isl::ctx ctx, int min_size)
10490 {
10491   auto res = isl_id_to_ast_expr_alloc(ctx.release(), min_size);
10492   return manage(res);
10493 }
10494 
set(isl::id key,isl::ast_expr val)10495 isl::id_to_ast_expr id_to_ast_expr::set(isl::id key, isl::ast_expr val) const
10496 {
10497   auto res = isl_id_to_ast_expr_set(copy(), key.release(), val.release());
10498   return manage(res);
10499 }
10500 
set(const std::string & key,const isl::ast_expr & val)10501 isl::id_to_ast_expr id_to_ast_expr::set(const std::string &key, const isl::ast_expr &val) const
10502 {
10503   return this->set(isl::id(ctx(), key), val);
10504 }
10505 
10506 // implementations for isl::local_space
manage(__isl_take isl_local_space * ptr)10507 local_space manage(__isl_take isl_local_space *ptr) {
10508   return local_space(ptr);
10509 }
manage_copy(__isl_keep isl_local_space * ptr)10510 local_space manage_copy(__isl_keep isl_local_space *ptr) {
10511   ptr = isl_local_space_copy(ptr);
10512   return local_space(ptr);
10513 }
10514 
local_space()10515 local_space::local_space()
10516     : ptr(nullptr) {}
10517 
local_space(const local_space & obj)10518 local_space::local_space(const local_space &obj)
10519     : ptr(nullptr)
10520 {
10521   ptr = obj.copy();
10522 }
10523 
local_space(__isl_take isl_local_space * ptr)10524 local_space::local_space(__isl_take isl_local_space *ptr)
10525     : ptr(ptr) {}
10526 
local_space(isl::space space)10527 local_space::local_space(isl::space space)
10528 {
10529   auto res = isl_local_space_from_space(space.release());
10530   ptr = res;
10531 }
10532 
10533 local_space &local_space::operator=(local_space obj) {
10534   std::swap(this->ptr, obj.ptr);
10535   return *this;
10536 }
10537 
~local_space()10538 local_space::~local_space() {
10539   if (ptr)
10540     isl_local_space_free(ptr);
10541 }
10542 
copy()10543 __isl_give isl_local_space *local_space::copy() const & {
10544   return isl_local_space_copy(ptr);
10545 }
10546 
get()10547 __isl_keep isl_local_space *local_space::get() const {
10548   return ptr;
10549 }
10550 
release()10551 __isl_give isl_local_space *local_space::release() {
10552   isl_local_space *tmp = ptr;
10553   ptr = nullptr;
10554   return tmp;
10555 }
10556 
is_null()10557 bool local_space::is_null() const {
10558   return ptr == nullptr;
10559 }
10560 
ctx()10561 isl::ctx local_space::ctx() const {
10562   return isl::ctx(isl_local_space_get_ctx(ptr));
10563 }
10564 
10565 // implementations for isl::map
manage(__isl_take isl_map * ptr)10566 map manage(__isl_take isl_map *ptr) {
10567   return map(ptr);
10568 }
manage_copy(__isl_keep isl_map * ptr)10569 map manage_copy(__isl_keep isl_map *ptr) {
10570   ptr = isl_map_copy(ptr);
10571   return map(ptr);
10572 }
10573 
map()10574 map::map()
10575     : ptr(nullptr) {}
10576 
map(const map & obj)10577 map::map(const map &obj)
10578     : ptr(nullptr)
10579 {
10580   ptr = obj.copy();
10581 }
10582 
map(__isl_take isl_map * ptr)10583 map::map(__isl_take isl_map *ptr)
10584     : ptr(ptr) {}
10585 
map(isl::basic_map bmap)10586 map::map(isl::basic_map bmap)
10587 {
10588   auto res = isl_map_from_basic_map(bmap.release());
10589   ptr = res;
10590 }
10591 
map(isl::ctx ctx,const std::string & str)10592 map::map(isl::ctx ctx, const std::string &str)
10593 {
10594   auto res = isl_map_read_from_str(ctx.release(), str.c_str());
10595   ptr = res;
10596 }
10597 
10598 map &map::operator=(map obj) {
10599   std::swap(this->ptr, obj.ptr);
10600   return *this;
10601 }
10602 
~map()10603 map::~map() {
10604   if (ptr)
10605     isl_map_free(ptr);
10606 }
10607 
copy()10608 __isl_give isl_map *map::copy() const & {
10609   return isl_map_copy(ptr);
10610 }
10611 
get()10612 __isl_keep isl_map *map::get() const {
10613   return ptr;
10614 }
10615 
release()10616 __isl_give isl_map *map::release() {
10617   isl_map *tmp = ptr;
10618   ptr = nullptr;
10619   return tmp;
10620 }
10621 
is_null()10622 bool map::is_null() const {
10623   return ptr == nullptr;
10624 }
10625 
ctx()10626 isl::ctx map::ctx() const {
10627   return isl::ctx(isl_map_get_ctx(ptr));
10628 }
10629 
add_constraint(isl::constraint constraint)10630 isl::map map::add_constraint(isl::constraint constraint) const
10631 {
10632   auto res = isl_map_add_constraint(copy(), constraint.release());
10633   return manage(res);
10634 }
10635 
add_dims(isl::dim type,unsigned int n)10636 isl::map map::add_dims(isl::dim type, unsigned int n) const
10637 {
10638   auto res = isl_map_add_dims(copy(), static_cast<enum isl_dim_type>(type), n);
10639   return manage(res);
10640 }
10641 
affine_hull()10642 isl::basic_map map::affine_hull() const
10643 {
10644   auto res = isl_map_affine_hull(copy());
10645   return manage(res);
10646 }
10647 
align_params(isl::space model)10648 isl::map map::align_params(isl::space model) const
10649 {
10650   auto res = isl_map_align_params(copy(), model.release());
10651   return manage(res);
10652 }
10653 
apply_domain(isl::map map2)10654 isl::map map::apply_domain(isl::map map2) const
10655 {
10656   auto res = isl_map_apply_domain(copy(), map2.release());
10657   return manage(res);
10658 }
10659 
apply_domain(const isl::union_map & umap2)10660 isl::union_map map::apply_domain(const isl::union_map &umap2) const
10661 {
10662   return isl::union_map(*this).apply_domain(umap2);
10663 }
10664 
apply_domain(const isl::basic_map & map2)10665 isl::map map::apply_domain(const isl::basic_map &map2) const
10666 {
10667   return this->apply_domain(isl::map(map2));
10668 }
10669 
apply_range(isl::map map2)10670 isl::map map::apply_range(isl::map map2) const
10671 {
10672   auto res = isl_map_apply_range(copy(), map2.release());
10673   return manage(res);
10674 }
10675 
apply_range(const isl::union_map & umap2)10676 isl::union_map map::apply_range(const isl::union_map &umap2) const
10677 {
10678   return isl::union_map(*this).apply_range(umap2);
10679 }
10680 
apply_range(const isl::basic_map & map2)10681 isl::map map::apply_range(const isl::basic_map &map2) const
10682 {
10683   return this->apply_range(isl::map(map2));
10684 }
10685 
as_map()10686 isl::map map::as_map() const
10687 {
10688   return isl::union_map(*this).as_map();
10689 }
10690 
as_multi_union_pw_aff()10691 isl::multi_union_pw_aff map::as_multi_union_pw_aff() const
10692 {
10693   return isl::union_map(*this).as_multi_union_pw_aff();
10694 }
10695 
as_pw_multi_aff()10696 isl::pw_multi_aff map::as_pw_multi_aff() const
10697 {
10698   auto res = isl_map_as_pw_multi_aff(copy());
10699   return manage(res);
10700 }
10701 
as_union_pw_multi_aff()10702 isl::union_pw_multi_aff map::as_union_pw_multi_aff() const
10703 {
10704   return isl::union_map(*this).as_union_pw_multi_aff();
10705 }
10706 
basic_map_list()10707 isl::basic_map_list map::basic_map_list() const
10708 {
10709   auto res = isl_map_get_basic_map_list(get());
10710   return manage(res);
10711 }
10712 
get_basic_map_list()10713 isl::basic_map_list map::get_basic_map_list() const
10714 {
10715   return basic_map_list();
10716 }
10717 
bind_domain(isl::multi_id tuple)10718 isl::set map::bind_domain(isl::multi_id tuple) const
10719 {
10720   auto res = isl_map_bind_domain(copy(), tuple.release());
10721   return manage(res);
10722 }
10723 
bind_range(isl::multi_id tuple)10724 isl::set map::bind_range(isl::multi_id tuple) const
10725 {
10726   auto res = isl_map_bind_range(copy(), tuple.release());
10727   return manage(res);
10728 }
10729 
can_curry()10730 boolean map::can_curry() const
10731 {
10732   auto res = isl_map_can_curry(get());
10733   return manage(res);
10734 }
10735 
coalesce()10736 isl::map map::coalesce() const
10737 {
10738   auto res = isl_map_coalesce(copy());
10739   return manage(res);
10740 }
10741 
complement()10742 isl::map map::complement() const
10743 {
10744   auto res = isl_map_complement(copy());
10745   return manage(res);
10746 }
10747 
compute_divs()10748 isl::union_map map::compute_divs() const
10749 {
10750   return isl::union_map(*this).compute_divs();
10751 }
10752 
curry()10753 isl::map map::curry() const
10754 {
10755   auto res = isl_map_curry(copy());
10756   return manage(res);
10757 }
10758 
deltas()10759 isl::set map::deltas() const
10760 {
10761   auto res = isl_map_deltas(copy());
10762   return manage(res);
10763 }
10764 
detect_equalities()10765 isl::map map::detect_equalities() const
10766 {
10767   auto res = isl_map_detect_equalities(copy());
10768   return manage(res);
10769 }
10770 
dim(isl::dim type)10771 class size map::dim(isl::dim type) const
10772 {
10773   auto res = isl_map_dim(get(), static_cast<enum isl_dim_type>(type));
10774   return manage(res);
10775 }
10776 
dim_max(int pos)10777 isl::pw_aff map::dim_max(int pos) const
10778 {
10779   auto res = isl_map_dim_max(copy(), pos);
10780   return manage(res);
10781 }
10782 
dim_min(int pos)10783 isl::pw_aff map::dim_min(int pos) const
10784 {
10785   auto res = isl_map_dim_min(copy(), pos);
10786   return manage(res);
10787 }
10788 
domain()10789 isl::set map::domain() const
10790 {
10791   auto res = isl_map_domain(copy());
10792   return manage(res);
10793 }
10794 
domain_factor_domain()10795 isl::map map::domain_factor_domain() const
10796 {
10797   auto res = isl_map_domain_factor_domain(copy());
10798   return manage(res);
10799 }
10800 
domain_factor_range()10801 isl::map map::domain_factor_range() const
10802 {
10803   auto res = isl_map_domain_factor_range(copy());
10804   return manage(res);
10805 }
10806 
domain_map()10807 isl::map map::domain_map() const
10808 {
10809   auto res = isl_map_domain_map(copy());
10810   return manage(res);
10811 }
10812 
domain_map_union_pw_multi_aff()10813 isl::union_pw_multi_aff map::domain_map_union_pw_multi_aff() const
10814 {
10815   return isl::union_map(*this).domain_map_union_pw_multi_aff();
10816 }
10817 
domain_product(isl::map map2)10818 isl::map map::domain_product(isl::map map2) const
10819 {
10820   auto res = isl_map_domain_product(copy(), map2.release());
10821   return manage(res);
10822 }
10823 
domain_product(const isl::union_map & umap2)10824 isl::union_map map::domain_product(const isl::union_map &umap2) const
10825 {
10826   return isl::union_map(*this).domain_product(umap2);
10827 }
10828 
domain_product(const isl::basic_map & map2)10829 isl::map map::domain_product(const isl::basic_map &map2) const
10830 {
10831   return this->domain_product(isl::map(map2));
10832 }
10833 
domain_tuple_dim()10834 class size map::domain_tuple_dim() const
10835 {
10836   auto res = isl_map_domain_tuple_dim(get());
10837   return manage(res);
10838 }
10839 
domain_tuple_id()10840 isl::id map::domain_tuple_id() const
10841 {
10842   auto res = isl_map_get_domain_tuple_id(get());
10843   return manage(res);
10844 }
10845 
get_domain_tuple_id()10846 isl::id map::get_domain_tuple_id() const
10847 {
10848   return domain_tuple_id();
10849 }
10850 
empty(isl::space space)10851 isl::map map::empty(isl::space space)
10852 {
10853   auto res = isl_map_empty(space.release());
10854   return manage(res);
10855 }
10856 
eq_at(isl::multi_pw_aff mpa)10857 isl::map map::eq_at(isl::multi_pw_aff mpa) const
10858 {
10859   auto res = isl_map_eq_at_multi_pw_aff(copy(), mpa.release());
10860   return manage(res);
10861 }
10862 
eq_at(const isl::multi_union_pw_aff & mupa)10863 isl::union_map map::eq_at(const isl::multi_union_pw_aff &mupa) const
10864 {
10865   return isl::union_map(*this).eq_at(mupa);
10866 }
10867 
eq_at(const isl::aff & mpa)10868 isl::map map::eq_at(const isl::aff &mpa) const
10869 {
10870   return this->eq_at(isl::multi_pw_aff(mpa));
10871 }
10872 
eq_at(const isl::multi_aff & mpa)10873 isl::map map::eq_at(const isl::multi_aff &mpa) const
10874 {
10875   return this->eq_at(isl::multi_pw_aff(mpa));
10876 }
10877 
eq_at(const isl::pw_aff & mpa)10878 isl::map map::eq_at(const isl::pw_aff &mpa) const
10879 {
10880   return this->eq_at(isl::multi_pw_aff(mpa));
10881 }
10882 
eq_at(const isl::pw_multi_aff & mpa)10883 isl::map map::eq_at(const isl::pw_multi_aff &mpa) const
10884 {
10885   return this->eq_at(isl::multi_pw_aff(mpa));
10886 }
10887 
equate(isl::dim type1,int pos1,isl::dim type2,int pos2)10888 isl::map map::equate(isl::dim type1, int pos1, isl::dim type2, int pos2) const
10889 {
10890   auto res = isl_map_equate(copy(), static_cast<enum isl_dim_type>(type1), pos1, static_cast<enum isl_dim_type>(type2), pos2);
10891   return manage(res);
10892 }
10893 
every_map(const std::function<boolean (isl::map)> & test)10894 boolean map::every_map(const std::function<boolean(isl::map)> &test) const
10895 {
10896   return isl::union_map(*this).every_map(test);
10897 }
10898 
extract_map(const isl::space & space)10899 isl::map map::extract_map(const isl::space &space) const
10900 {
10901   return isl::union_map(*this).extract_map(space);
10902 }
10903 
factor_domain()10904 isl::map map::factor_domain() const
10905 {
10906   auto res = isl_map_factor_domain(copy());
10907   return manage(res);
10908 }
10909 
factor_range()10910 isl::map map::factor_range() const
10911 {
10912   auto res = isl_map_factor_range(copy());
10913   return manage(res);
10914 }
10915 
fix_si(isl::dim type,unsigned int pos,int value)10916 isl::map map::fix_si(isl::dim type, unsigned int pos, int value) const
10917 {
10918   auto res = isl_map_fix_si(copy(), static_cast<enum isl_dim_type>(type), pos, value);
10919   return manage(res);
10920 }
10921 
fixed_power(const isl::val & exp)10922 isl::union_map map::fixed_power(const isl::val &exp) const
10923 {
10924   return isl::union_map(*this).fixed_power(exp);
10925 }
10926 
fixed_power(long exp)10927 isl::union_map map::fixed_power(long exp) const
10928 {
10929   return this->fixed_power(isl::val(ctx(), exp));
10930 }
10931 
flat_range_product(isl::map map2)10932 isl::map map::flat_range_product(isl::map map2) const
10933 {
10934   auto res = isl_map_flat_range_product(copy(), map2.release());
10935   return manage(res);
10936 }
10937 
flat_range_product(const isl::union_map & umap2)10938 isl::union_map map::flat_range_product(const isl::union_map &umap2) const
10939 {
10940   return isl::union_map(*this).flat_range_product(umap2);
10941 }
10942 
flat_range_product(const isl::basic_map & map2)10943 isl::map map::flat_range_product(const isl::basic_map &map2) const
10944 {
10945   return this->flat_range_product(isl::map(map2));
10946 }
10947 
flatten()10948 isl::map map::flatten() const
10949 {
10950   auto res = isl_map_flatten(copy());
10951   return manage(res);
10952 }
10953 
flatten_domain()10954 isl::map map::flatten_domain() const
10955 {
10956   auto res = isl_map_flatten_domain(copy());
10957   return manage(res);
10958 }
10959 
flatten_range()10960 isl::map map::flatten_range() const
10961 {
10962   auto res = isl_map_flatten_range(copy());
10963   return manage(res);
10964 }
10965 
floordiv_val(isl::val d)10966 isl::map map::floordiv_val(isl::val d) const
10967 {
10968   auto res = isl_map_floordiv_val(copy(), d.release());
10969   return manage(res);
10970 }
10971 
floordiv_val(long d)10972 isl::map map::floordiv_val(long d) const
10973 {
10974   return this->floordiv_val(isl::val(ctx(), d));
10975 }
10976 
foreach_basic_map(const std::function<stat (isl::basic_map)> & fn)10977 stat map::foreach_basic_map(const std::function<stat(isl::basic_map)> &fn) const
10978 {
10979   struct fn_data {
10980     std::function<stat(isl::basic_map)> func;
10981   } fn_data = { fn };
10982   auto fn_lambda = [](isl_basic_map *arg_0, void *arg_1) -> isl_stat {
10983     auto *data = static_cast<struct fn_data *>(arg_1);
10984     auto ret = (data->func)(manage(arg_0));
10985     return ret.release();
10986   };
10987   auto res = isl_map_foreach_basic_map(get(), fn_lambda, &fn_data);
10988   return manage(res);
10989 }
10990 
foreach_map(const std::function<stat (isl::map)> & fn)10991 stat map::foreach_map(const std::function<stat(isl::map)> &fn) const
10992 {
10993   return isl::union_map(*this).foreach_map(fn);
10994 }
10995 
from_aff(isl::aff aff)10996 isl::map map::from_aff(isl::aff aff)
10997 {
10998   auto res = isl_map_from_aff(aff.release());
10999   return manage(res);
11000 }
11001 
from_domain(isl::set set)11002 isl::map map::from_domain(isl::set set)
11003 {
11004   auto res = isl_map_from_domain(set.release());
11005   return manage(res);
11006 }
11007 
from_domain_and_range(isl::set domain,isl::set range)11008 isl::map map::from_domain_and_range(isl::set domain, isl::set range)
11009 {
11010   auto res = isl_map_from_domain_and_range(domain.release(), range.release());
11011   return manage(res);
11012 }
11013 
from_multi_aff(isl::multi_aff maff)11014 isl::map map::from_multi_aff(isl::multi_aff maff)
11015 {
11016   auto res = isl_map_from_multi_aff(maff.release());
11017   return manage(res);
11018 }
11019 
from_pw_aff(isl::pw_aff pwaff)11020 isl::map map::from_pw_aff(isl::pw_aff pwaff)
11021 {
11022   auto res = isl_map_from_pw_aff(pwaff.release());
11023   return manage(res);
11024 }
11025 
from_range(isl::set set)11026 isl::map map::from_range(isl::set set)
11027 {
11028   auto res = isl_map_from_range(set.release());
11029   return manage(res);
11030 }
11031 
from_union_map(isl::union_map umap)11032 isl::map map::from_union_map(isl::union_map umap)
11033 {
11034   auto res = isl_map_from_union_map(umap.release());
11035   return manage(res);
11036 }
11037 
gist(isl::map context)11038 isl::map map::gist(isl::map context) const
11039 {
11040   auto res = isl_map_gist(copy(), context.release());
11041   return manage(res);
11042 }
11043 
gist(const isl::union_map & context)11044 isl::union_map map::gist(const isl::union_map &context) const
11045 {
11046   return isl::union_map(*this).gist(context);
11047 }
11048 
gist(const isl::basic_map & context)11049 isl::map map::gist(const isl::basic_map &context) const
11050 {
11051   return this->gist(isl::map(context));
11052 }
11053 
gist_domain(isl::set context)11054 isl::map map::gist_domain(isl::set context) const
11055 {
11056   auto res = isl_map_gist_domain(copy(), context.release());
11057   return manage(res);
11058 }
11059 
gist_domain(const isl::union_set & uset)11060 isl::union_map map::gist_domain(const isl::union_set &uset) const
11061 {
11062   return isl::union_map(*this).gist_domain(uset);
11063 }
11064 
gist_domain(const isl::basic_set & context)11065 isl::map map::gist_domain(const isl::basic_set &context) const
11066 {
11067   return this->gist_domain(isl::set(context));
11068 }
11069 
gist_domain(const isl::point & context)11070 isl::map map::gist_domain(const isl::point &context) const
11071 {
11072   return this->gist_domain(isl::set(context));
11073 }
11074 
gist_params(isl::set context)11075 isl::map map::gist_params(isl::set context) const
11076 {
11077   auto res = isl_map_gist_params(copy(), context.release());
11078   return manage(res);
11079 }
11080 
gist_range(const isl::union_set & uset)11081 isl::union_map map::gist_range(const isl::union_set &uset) const
11082 {
11083   return isl::union_map(*this).gist_range(uset);
11084 }
11085 
has_domain_tuple_id()11086 boolean map::has_domain_tuple_id() const
11087 {
11088   auto res = isl_map_has_domain_tuple_id(get());
11089   return manage(res);
11090 }
11091 
has_equal_space(const isl::map & map2)11092 boolean map::has_equal_space(const isl::map &map2) const
11093 {
11094   auto res = isl_map_has_equal_space(get(), map2.get());
11095   return manage(res);
11096 }
11097 
has_range_tuple_id()11098 boolean map::has_range_tuple_id() const
11099 {
11100   auto res = isl_map_has_range_tuple_id(get());
11101   return manage(res);
11102 }
11103 
has_tuple_id(isl::dim type)11104 boolean map::has_tuple_id(isl::dim type) const
11105 {
11106   auto res = isl_map_has_tuple_id(get(), static_cast<enum isl_dim_type>(type));
11107   return manage(res);
11108 }
11109 
has_tuple_name(isl::dim type)11110 boolean map::has_tuple_name(isl::dim type) const
11111 {
11112   auto res = isl_map_has_tuple_name(get(), static_cast<enum isl_dim_type>(type));
11113   return manage(res);
11114 }
11115 
identity(isl::space space)11116 isl::map map::identity(isl::space space)
11117 {
11118   auto res = isl_map_identity(space.release());
11119   return manage(res);
11120 }
11121 
intersect(isl::map map2)11122 isl::map map::intersect(isl::map map2) const
11123 {
11124   auto res = isl_map_intersect(copy(), map2.release());
11125   return manage(res);
11126 }
11127 
intersect(const isl::union_map & umap2)11128 isl::union_map map::intersect(const isl::union_map &umap2) const
11129 {
11130   return isl::union_map(*this).intersect(umap2);
11131 }
11132 
intersect(const isl::basic_map & map2)11133 isl::map map::intersect(const isl::basic_map &map2) const
11134 {
11135   return this->intersect(isl::map(map2));
11136 }
11137 
intersect_domain(isl::set set)11138 isl::map map::intersect_domain(isl::set set) const
11139 {
11140   auto res = isl_map_intersect_domain(copy(), set.release());
11141   return manage(res);
11142 }
11143 
intersect_domain(const isl::space & space)11144 isl::union_map map::intersect_domain(const isl::space &space) const
11145 {
11146   return isl::union_map(*this).intersect_domain(space);
11147 }
11148 
intersect_domain(const isl::union_set & uset)11149 isl::union_map map::intersect_domain(const isl::union_set &uset) const
11150 {
11151   return isl::union_map(*this).intersect_domain(uset);
11152 }
11153 
intersect_domain(const isl::basic_set & set)11154 isl::map map::intersect_domain(const isl::basic_set &set) const
11155 {
11156   return this->intersect_domain(isl::set(set));
11157 }
11158 
intersect_domain(const isl::point & set)11159 isl::map map::intersect_domain(const isl::point &set) const
11160 {
11161   return this->intersect_domain(isl::set(set));
11162 }
11163 
intersect_domain_factor_domain(isl::map factor)11164 isl::map map::intersect_domain_factor_domain(isl::map factor) const
11165 {
11166   auto res = isl_map_intersect_domain_factor_domain(copy(), factor.release());
11167   return manage(res);
11168 }
11169 
intersect_domain_factor_domain(const isl::union_map & factor)11170 isl::union_map map::intersect_domain_factor_domain(const isl::union_map &factor) const
11171 {
11172   return isl::union_map(*this).intersect_domain_factor_domain(factor);
11173 }
11174 
intersect_domain_factor_domain(const isl::basic_map & factor)11175 isl::map map::intersect_domain_factor_domain(const isl::basic_map &factor) const
11176 {
11177   return this->intersect_domain_factor_domain(isl::map(factor));
11178 }
11179 
intersect_domain_factor_range(isl::map factor)11180 isl::map map::intersect_domain_factor_range(isl::map factor) const
11181 {
11182   auto res = isl_map_intersect_domain_factor_range(copy(), factor.release());
11183   return manage(res);
11184 }
11185 
intersect_domain_factor_range(const isl::union_map & factor)11186 isl::union_map map::intersect_domain_factor_range(const isl::union_map &factor) const
11187 {
11188   return isl::union_map(*this).intersect_domain_factor_range(factor);
11189 }
11190 
intersect_domain_factor_range(const isl::basic_map & factor)11191 isl::map map::intersect_domain_factor_range(const isl::basic_map &factor) const
11192 {
11193   return this->intersect_domain_factor_range(isl::map(factor));
11194 }
11195 
intersect_params(isl::set params)11196 isl::map map::intersect_params(isl::set params) const
11197 {
11198   auto res = isl_map_intersect_params(copy(), params.release());
11199   return manage(res);
11200 }
11201 
intersect_range(isl::set set)11202 isl::map map::intersect_range(isl::set set) const
11203 {
11204   auto res = isl_map_intersect_range(copy(), set.release());
11205   return manage(res);
11206 }
11207 
intersect_range(const isl::space & space)11208 isl::union_map map::intersect_range(const isl::space &space) const
11209 {
11210   return isl::union_map(*this).intersect_range(space);
11211 }
11212 
intersect_range(const isl::union_set & uset)11213 isl::union_map map::intersect_range(const isl::union_set &uset) const
11214 {
11215   return isl::union_map(*this).intersect_range(uset);
11216 }
11217 
intersect_range(const isl::basic_set & set)11218 isl::map map::intersect_range(const isl::basic_set &set) const
11219 {
11220   return this->intersect_range(isl::set(set));
11221 }
11222 
intersect_range(const isl::point & set)11223 isl::map map::intersect_range(const isl::point &set) const
11224 {
11225   return this->intersect_range(isl::set(set));
11226 }
11227 
intersect_range_factor_domain(isl::map factor)11228 isl::map map::intersect_range_factor_domain(isl::map factor) const
11229 {
11230   auto res = isl_map_intersect_range_factor_domain(copy(), factor.release());
11231   return manage(res);
11232 }
11233 
intersect_range_factor_domain(const isl::union_map & factor)11234 isl::union_map map::intersect_range_factor_domain(const isl::union_map &factor) const
11235 {
11236   return isl::union_map(*this).intersect_range_factor_domain(factor);
11237 }
11238 
intersect_range_factor_domain(const isl::basic_map & factor)11239 isl::map map::intersect_range_factor_domain(const isl::basic_map &factor) const
11240 {
11241   return this->intersect_range_factor_domain(isl::map(factor));
11242 }
11243 
intersect_range_factor_range(isl::map factor)11244 isl::map map::intersect_range_factor_range(isl::map factor) const
11245 {
11246   auto res = isl_map_intersect_range_factor_range(copy(), factor.release());
11247   return manage(res);
11248 }
11249 
intersect_range_factor_range(const isl::union_map & factor)11250 isl::union_map map::intersect_range_factor_range(const isl::union_map &factor) const
11251 {
11252   return isl::union_map(*this).intersect_range_factor_range(factor);
11253 }
11254 
intersect_range_factor_range(const isl::basic_map & factor)11255 isl::map map::intersect_range_factor_range(const isl::basic_map &factor) const
11256 {
11257   return this->intersect_range_factor_range(isl::map(factor));
11258 }
11259 
involves_dims(isl::dim type,unsigned int first,unsigned int n)11260 boolean map::involves_dims(isl::dim type, unsigned int first, unsigned int n) const
11261 {
11262   auto res = isl_map_involves_dims(get(), static_cast<enum isl_dim_type>(type), first, n);
11263   return manage(res);
11264 }
11265 
is_bijective()11266 boolean map::is_bijective() const
11267 {
11268   auto res = isl_map_is_bijective(get());
11269   return manage(res);
11270 }
11271 
is_disjoint(const isl::map & map2)11272 boolean map::is_disjoint(const isl::map &map2) const
11273 {
11274   auto res = isl_map_is_disjoint(get(), map2.get());
11275   return manage(res);
11276 }
11277 
is_disjoint(const isl::union_map & umap2)11278 boolean map::is_disjoint(const isl::union_map &umap2) const
11279 {
11280   return isl::union_map(*this).is_disjoint(umap2);
11281 }
11282 
is_disjoint(const isl::basic_map & map2)11283 boolean map::is_disjoint(const isl::basic_map &map2) const
11284 {
11285   return this->is_disjoint(isl::map(map2));
11286 }
11287 
is_empty()11288 boolean map::is_empty() const
11289 {
11290   auto res = isl_map_is_empty(get());
11291   return manage(res);
11292 }
11293 
is_equal(const isl::map & map2)11294 boolean map::is_equal(const isl::map &map2) const
11295 {
11296   auto res = isl_map_is_equal(get(), map2.get());
11297   return manage(res);
11298 }
11299 
is_equal(const isl::union_map & umap2)11300 boolean map::is_equal(const isl::union_map &umap2) const
11301 {
11302   return isl::union_map(*this).is_equal(umap2);
11303 }
11304 
is_equal(const isl::basic_map & map2)11305 boolean map::is_equal(const isl::basic_map &map2) const
11306 {
11307   return this->is_equal(isl::map(map2));
11308 }
11309 
is_injective()11310 boolean map::is_injective() const
11311 {
11312   auto res = isl_map_is_injective(get());
11313   return manage(res);
11314 }
11315 
is_single_valued()11316 boolean map::is_single_valued() const
11317 {
11318   auto res = isl_map_is_single_valued(get());
11319   return manage(res);
11320 }
11321 
is_strict_subset(const isl::map & map2)11322 boolean map::is_strict_subset(const isl::map &map2) const
11323 {
11324   auto res = isl_map_is_strict_subset(get(), map2.get());
11325   return manage(res);
11326 }
11327 
is_strict_subset(const isl::union_map & umap2)11328 boolean map::is_strict_subset(const isl::union_map &umap2) const
11329 {
11330   return isl::union_map(*this).is_strict_subset(umap2);
11331 }
11332 
is_strict_subset(const isl::basic_map & map2)11333 boolean map::is_strict_subset(const isl::basic_map &map2) const
11334 {
11335   return this->is_strict_subset(isl::map(map2));
11336 }
11337 
is_subset(const isl::map & map2)11338 boolean map::is_subset(const isl::map &map2) const
11339 {
11340   auto res = isl_map_is_subset(get(), map2.get());
11341   return manage(res);
11342 }
11343 
is_subset(const isl::union_map & umap2)11344 boolean map::is_subset(const isl::union_map &umap2) const
11345 {
11346   return isl::union_map(*this).is_subset(umap2);
11347 }
11348 
is_subset(const isl::basic_map & map2)11349 boolean map::is_subset(const isl::basic_map &map2) const
11350 {
11351   return this->is_subset(isl::map(map2));
11352 }
11353 
isa_map()11354 boolean map::isa_map() const
11355 {
11356   return isl::union_map(*this).isa_map();
11357 }
11358 
lex_ge(isl::space set_space)11359 isl::map map::lex_ge(isl::space set_space)
11360 {
11361   auto res = isl_map_lex_ge(set_space.release());
11362   return manage(res);
11363 }
11364 
lex_ge_at(isl::multi_pw_aff mpa)11365 isl::map map::lex_ge_at(isl::multi_pw_aff mpa) const
11366 {
11367   auto res = isl_map_lex_ge_at_multi_pw_aff(copy(), mpa.release());
11368   return manage(res);
11369 }
11370 
lex_gt(isl::space set_space)11371 isl::map map::lex_gt(isl::space set_space)
11372 {
11373   auto res = isl_map_lex_gt(set_space.release());
11374   return manage(res);
11375 }
11376 
lex_gt_at(isl::multi_pw_aff mpa)11377 isl::map map::lex_gt_at(isl::multi_pw_aff mpa) const
11378 {
11379   auto res = isl_map_lex_gt_at_multi_pw_aff(copy(), mpa.release());
11380   return manage(res);
11381 }
11382 
lex_le(isl::space set_space)11383 isl::map map::lex_le(isl::space set_space)
11384 {
11385   auto res = isl_map_lex_le(set_space.release());
11386   return manage(res);
11387 }
11388 
lex_le_at(isl::multi_pw_aff mpa)11389 isl::map map::lex_le_at(isl::multi_pw_aff mpa) const
11390 {
11391   auto res = isl_map_lex_le_at_multi_pw_aff(copy(), mpa.release());
11392   return manage(res);
11393 }
11394 
lex_lt(isl::space set_space)11395 isl::map map::lex_lt(isl::space set_space)
11396 {
11397   auto res = isl_map_lex_lt(set_space.release());
11398   return manage(res);
11399 }
11400 
lex_lt_at(isl::multi_pw_aff mpa)11401 isl::map map::lex_lt_at(isl::multi_pw_aff mpa) const
11402 {
11403   auto res = isl_map_lex_lt_at_multi_pw_aff(copy(), mpa.release());
11404   return manage(res);
11405 }
11406 
lexmax()11407 isl::map map::lexmax() const
11408 {
11409   auto res = isl_map_lexmax(copy());
11410   return manage(res);
11411 }
11412 
lexmax_pw_multi_aff()11413 isl::pw_multi_aff map::lexmax_pw_multi_aff() const
11414 {
11415   auto res = isl_map_lexmax_pw_multi_aff(copy());
11416   return manage(res);
11417 }
11418 
lexmin()11419 isl::map map::lexmin() const
11420 {
11421   auto res = isl_map_lexmin(copy());
11422   return manage(res);
11423 }
11424 
lexmin_pw_multi_aff()11425 isl::pw_multi_aff map::lexmin_pw_multi_aff() const
11426 {
11427   auto res = isl_map_lexmin_pw_multi_aff(copy());
11428   return manage(res);
11429 }
11430 
lower_bound(isl::multi_pw_aff lower)11431 isl::map map::lower_bound(isl::multi_pw_aff lower) const
11432 {
11433   auto res = isl_map_lower_bound_multi_pw_aff(copy(), lower.release());
11434   return manage(res);
11435 }
11436 
lower_bound_si(isl::dim type,unsigned int pos,int value)11437 isl::map map::lower_bound_si(isl::dim type, unsigned int pos, int value) const
11438 {
11439   auto res = isl_map_lower_bound_si(copy(), static_cast<enum isl_dim_type>(type), pos, value);
11440   return manage(res);
11441 }
11442 
map_list()11443 isl::map_list map::map_list() const
11444 {
11445   return isl::union_map(*this).map_list();
11446 }
11447 
max_multi_pw_aff()11448 isl::multi_pw_aff map::max_multi_pw_aff() const
11449 {
11450   auto res = isl_map_max_multi_pw_aff(copy());
11451   return manage(res);
11452 }
11453 
min_multi_pw_aff()11454 isl::multi_pw_aff map::min_multi_pw_aff() const
11455 {
11456   auto res = isl_map_min_multi_pw_aff(copy());
11457   return manage(res);
11458 }
11459 
move_dims(isl::dim dst_type,unsigned int dst_pos,isl::dim src_type,unsigned int src_pos,unsigned int n)11460 isl::map map::move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const
11461 {
11462   auto res = isl_map_move_dims(copy(), static_cast<enum isl_dim_type>(dst_type), dst_pos, static_cast<enum isl_dim_type>(src_type), src_pos, n);
11463   return manage(res);
11464 }
11465 
n_basic_map()11466 class size map::n_basic_map() const
11467 {
11468   auto res = isl_map_n_basic_map(get());
11469   return manage(res);
11470 }
11471 
order_lt(isl::dim type1,int pos1,isl::dim type2,int pos2)11472 isl::map map::order_lt(isl::dim type1, int pos1, isl::dim type2, int pos2) const
11473 {
11474   auto res = isl_map_order_lt(copy(), static_cast<enum isl_dim_type>(type1), pos1, static_cast<enum isl_dim_type>(type2), pos2);
11475   return manage(res);
11476 }
11477 
params()11478 isl::set map::params() const
11479 {
11480   return isl::union_map(*this).params();
11481 }
11482 
polyhedral_hull()11483 isl::basic_map map::polyhedral_hull() const
11484 {
11485   auto res = isl_map_polyhedral_hull(copy());
11486   return manage(res);
11487 }
11488 
preimage_domain(isl::multi_aff ma)11489 isl::map map::preimage_domain(isl::multi_aff ma) const
11490 {
11491   auto res = isl_map_preimage_domain_multi_aff(copy(), ma.release());
11492   return manage(res);
11493 }
11494 
preimage_domain(isl::multi_pw_aff mpa)11495 isl::map map::preimage_domain(isl::multi_pw_aff mpa) const
11496 {
11497   auto res = isl_map_preimage_domain_multi_pw_aff(copy(), mpa.release());
11498   return manage(res);
11499 }
11500 
preimage_domain(isl::pw_multi_aff pma)11501 isl::map map::preimage_domain(isl::pw_multi_aff pma) const
11502 {
11503   auto res = isl_map_preimage_domain_pw_multi_aff(copy(), pma.release());
11504   return manage(res);
11505 }
11506 
preimage_domain(const isl::union_pw_multi_aff & upma)11507 isl::union_map map::preimage_domain(const isl::union_pw_multi_aff &upma) const
11508 {
11509   return isl::union_map(*this).preimage_domain(upma);
11510 }
11511 
preimage_range(isl::multi_aff ma)11512 isl::map map::preimage_range(isl::multi_aff ma) const
11513 {
11514   auto res = isl_map_preimage_range_multi_aff(copy(), ma.release());
11515   return manage(res);
11516 }
11517 
preimage_range(isl::pw_multi_aff pma)11518 isl::map map::preimage_range(isl::pw_multi_aff pma) const
11519 {
11520   auto res = isl_map_preimage_range_pw_multi_aff(copy(), pma.release());
11521   return manage(res);
11522 }
11523 
preimage_range(const isl::union_pw_multi_aff & upma)11524 isl::union_map map::preimage_range(const isl::union_pw_multi_aff &upma) const
11525 {
11526   return isl::union_map(*this).preimage_range(upma);
11527 }
11528 
product(isl::map map2)11529 isl::map map::product(isl::map map2) const
11530 {
11531   auto res = isl_map_product(copy(), map2.release());
11532   return manage(res);
11533 }
11534 
product(const isl::union_map & umap2)11535 isl::union_map map::product(const isl::union_map &umap2) const
11536 {
11537   return isl::union_map(*this).product(umap2);
11538 }
11539 
product(const isl::basic_map & map2)11540 isl::map map::product(const isl::basic_map &map2) const
11541 {
11542   return this->product(isl::map(map2));
11543 }
11544 
project_out(isl::dim type,unsigned int first,unsigned int n)11545 isl::map map::project_out(isl::dim type, unsigned int first, unsigned int n) const
11546 {
11547   auto res = isl_map_project_out(copy(), static_cast<enum isl_dim_type>(type), first, n);
11548   return manage(res);
11549 }
11550 
project_out_all_params()11551 isl::map map::project_out_all_params() const
11552 {
11553   auto res = isl_map_project_out_all_params(copy());
11554   return manage(res);
11555 }
11556 
range()11557 isl::set map::range() const
11558 {
11559   auto res = isl_map_range(copy());
11560   return manage(res);
11561 }
11562 
range_factor_domain()11563 isl::map map::range_factor_domain() const
11564 {
11565   auto res = isl_map_range_factor_domain(copy());
11566   return manage(res);
11567 }
11568 
range_factor_range()11569 isl::map map::range_factor_range() const
11570 {
11571   auto res = isl_map_range_factor_range(copy());
11572   return manage(res);
11573 }
11574 
range_lattice_tile()11575 isl::fixed_box map::range_lattice_tile() const
11576 {
11577   auto res = isl_map_get_range_lattice_tile(get());
11578   return manage(res);
11579 }
11580 
get_range_lattice_tile()11581 isl::fixed_box map::get_range_lattice_tile() const
11582 {
11583   return range_lattice_tile();
11584 }
11585 
range_map()11586 isl::map map::range_map() const
11587 {
11588   auto res = isl_map_range_map(copy());
11589   return manage(res);
11590 }
11591 
range_product(isl::map map2)11592 isl::map map::range_product(isl::map map2) const
11593 {
11594   auto res = isl_map_range_product(copy(), map2.release());
11595   return manage(res);
11596 }
11597 
range_product(const isl::union_map & umap2)11598 isl::union_map map::range_product(const isl::union_map &umap2) const
11599 {
11600   return isl::union_map(*this).range_product(umap2);
11601 }
11602 
range_product(const isl::basic_map & map2)11603 isl::map map::range_product(const isl::basic_map &map2) const
11604 {
11605   return this->range_product(isl::map(map2));
11606 }
11607 
range_reverse()11608 isl::map map::range_reverse() const
11609 {
11610   auto res = isl_map_range_reverse(copy());
11611   return manage(res);
11612 }
11613 
range_simple_fixed_box_hull()11614 isl::fixed_box map::range_simple_fixed_box_hull() const
11615 {
11616   auto res = isl_map_get_range_simple_fixed_box_hull(get());
11617   return manage(res);
11618 }
11619 
get_range_simple_fixed_box_hull()11620 isl::fixed_box map::get_range_simple_fixed_box_hull() const
11621 {
11622   return range_simple_fixed_box_hull();
11623 }
11624 
range_tuple_dim()11625 class size map::range_tuple_dim() const
11626 {
11627   auto res = isl_map_range_tuple_dim(get());
11628   return manage(res);
11629 }
11630 
range_tuple_id()11631 isl::id map::range_tuple_id() const
11632 {
11633   auto res = isl_map_get_range_tuple_id(get());
11634   return manage(res);
11635 }
11636 
get_range_tuple_id()11637 isl::id map::get_range_tuple_id() const
11638 {
11639   return range_tuple_id();
11640 }
11641 
reverse()11642 isl::map map::reverse() const
11643 {
11644   auto res = isl_map_reverse(copy());
11645   return manage(res);
11646 }
11647 
sample()11648 isl::basic_map map::sample() const
11649 {
11650   auto res = isl_map_sample(copy());
11651   return manage(res);
11652 }
11653 
set_domain_tuple(isl::id id)11654 isl::map map::set_domain_tuple(isl::id id) const
11655 {
11656   auto res = isl_map_set_domain_tuple_id(copy(), id.release());
11657   return manage(res);
11658 }
11659 
set_domain_tuple(const std::string & id)11660 isl::map map::set_domain_tuple(const std::string &id) const
11661 {
11662   return this->set_domain_tuple(isl::id(ctx(), id));
11663 }
11664 
set_range_tuple(isl::id id)11665 isl::map map::set_range_tuple(isl::id id) const
11666 {
11667   auto res = isl_map_set_range_tuple_id(copy(), id.release());
11668   return manage(res);
11669 }
11670 
set_range_tuple(const std::string & id)11671 isl::map map::set_range_tuple(const std::string &id) const
11672 {
11673   return this->set_range_tuple(isl::id(ctx(), id));
11674 }
11675 
set_tuple_id(isl::dim type,isl::id id)11676 isl::map map::set_tuple_id(isl::dim type, isl::id id) const
11677 {
11678   auto res = isl_map_set_tuple_id(copy(), static_cast<enum isl_dim_type>(type), id.release());
11679   return manage(res);
11680 }
11681 
set_tuple_id(isl::dim type,const std::string & id)11682 isl::map map::set_tuple_id(isl::dim type, const std::string &id) const
11683 {
11684   return this->set_tuple_id(type, isl::id(ctx(), id));
11685 }
11686 
space()11687 isl::space map::space() const
11688 {
11689   auto res = isl_map_get_space(get());
11690   return manage(res);
11691 }
11692 
get_space()11693 isl::space map::get_space() const
11694 {
11695   return space();
11696 }
11697 
subtract(isl::map map2)11698 isl::map map::subtract(isl::map map2) const
11699 {
11700   auto res = isl_map_subtract(copy(), map2.release());
11701   return manage(res);
11702 }
11703 
subtract(const isl::union_map & umap2)11704 isl::union_map map::subtract(const isl::union_map &umap2) const
11705 {
11706   return isl::union_map(*this).subtract(umap2);
11707 }
11708 
subtract(const isl::basic_map & map2)11709 isl::map map::subtract(const isl::basic_map &map2) const
11710 {
11711   return this->subtract(isl::map(map2));
11712 }
11713 
subtract_domain(const isl::union_set & dom)11714 isl::union_map map::subtract_domain(const isl::union_set &dom) const
11715 {
11716   return isl::union_map(*this).subtract_domain(dom);
11717 }
11718 
subtract_range(const isl::union_set & dom)11719 isl::union_map map::subtract_range(const isl::union_set &dom) const
11720 {
11721   return isl::union_map(*this).subtract_range(dom);
11722 }
11723 
sum(isl::map map2)11724 isl::map map::sum(isl::map map2) const
11725 {
11726   auto res = isl_map_sum(copy(), map2.release());
11727   return manage(res);
11728 }
11729 
to_list()11730 isl::map_list map::to_list() const
11731 {
11732   auto res = isl_map_to_list(copy());
11733   return manage(res);
11734 }
11735 
to_union_map()11736 isl::union_map map::to_union_map() const
11737 {
11738   auto res = isl_map_to_union_map(copy());
11739   return manage(res);
11740 }
11741 
tuple_id(isl::dim type)11742 isl::id map::tuple_id(isl::dim type) const
11743 {
11744   auto res = isl_map_get_tuple_id(get(), static_cast<enum isl_dim_type>(type));
11745   return manage(res);
11746 }
11747 
get_tuple_id(isl::dim type)11748 isl::id map::get_tuple_id(isl::dim type) const
11749 {
11750   return tuple_id(type);
11751 }
11752 
uncurry()11753 isl::map map::uncurry() const
11754 {
11755   auto res = isl_map_uncurry(copy());
11756   return manage(res);
11757 }
11758 
unite(isl::map map2)11759 isl::map map::unite(isl::map map2) const
11760 {
11761   auto res = isl_map_union(copy(), map2.release());
11762   return manage(res);
11763 }
11764 
unite(const isl::union_map & umap2)11765 isl::union_map map::unite(const isl::union_map &umap2) const
11766 {
11767   return isl::union_map(*this).unite(umap2);
11768 }
11769 
unite(const isl::basic_map & map2)11770 isl::map map::unite(const isl::basic_map &map2) const
11771 {
11772   return this->unite(isl::map(map2));
11773 }
11774 
universe(isl::space space)11775 isl::map map::universe(isl::space space)
11776 {
11777   auto res = isl_map_universe(space.release());
11778   return manage(res);
11779 }
11780 
unshifted_simple_hull()11781 isl::basic_map map::unshifted_simple_hull() const
11782 {
11783   auto res = isl_map_unshifted_simple_hull(copy());
11784   return manage(res);
11785 }
11786 
upper_bound(isl::multi_pw_aff upper)11787 isl::map map::upper_bound(isl::multi_pw_aff upper) const
11788 {
11789   auto res = isl_map_upper_bound_multi_pw_aff(copy(), upper.release());
11790   return manage(res);
11791 }
11792 
upper_bound_si(isl::dim type,unsigned int pos,int value)11793 isl::map map::upper_bound_si(isl::dim type, unsigned int pos, int value) const
11794 {
11795   auto res = isl_map_upper_bound_si(copy(), static_cast<enum isl_dim_type>(type), pos, value);
11796   return manage(res);
11797 }
11798 
wrap()11799 isl::set map::wrap() const
11800 {
11801   auto res = isl_map_wrap(copy());
11802   return manage(res);
11803 }
11804 
zip()11805 isl::map map::zip() const
11806 {
11807   auto res = isl_map_zip(copy());
11808   return manage(res);
11809 }
11810 
11811 inline std::ostream &operator<<(std::ostream &os, const map &obj)
11812 {
11813   char *str = isl_map_to_str(obj.get());
11814   if (!str) {
11815     os.setstate(std::ios_base::badbit);
11816     return os;
11817   }
11818   os << str;
11819   free(str);
11820   return os;
11821 }
11822 
11823 // implementations for isl::map_list
manage(__isl_take isl_map_list * ptr)11824 map_list manage(__isl_take isl_map_list *ptr) {
11825   return map_list(ptr);
11826 }
manage_copy(__isl_keep isl_map_list * ptr)11827 map_list manage_copy(__isl_keep isl_map_list *ptr) {
11828   ptr = isl_map_list_copy(ptr);
11829   return map_list(ptr);
11830 }
11831 
map_list()11832 map_list::map_list()
11833     : ptr(nullptr) {}
11834 
map_list(const map_list & obj)11835 map_list::map_list(const map_list &obj)
11836     : ptr(nullptr)
11837 {
11838   ptr = obj.copy();
11839 }
11840 
map_list(__isl_take isl_map_list * ptr)11841 map_list::map_list(__isl_take isl_map_list *ptr)
11842     : ptr(ptr) {}
11843 
map_list(isl::ctx ctx,int n)11844 map_list::map_list(isl::ctx ctx, int n)
11845 {
11846   auto res = isl_map_list_alloc(ctx.release(), n);
11847   ptr = res;
11848 }
11849 
map_list(isl::map el)11850 map_list::map_list(isl::map el)
11851 {
11852   auto res = isl_map_list_from_map(el.release());
11853   ptr = res;
11854 }
11855 
map_list(isl::ctx ctx,const std::string & str)11856 map_list::map_list(isl::ctx ctx, const std::string &str)
11857 {
11858   auto res = isl_map_list_read_from_str(ctx.release(), str.c_str());
11859   ptr = res;
11860 }
11861 
11862 map_list &map_list::operator=(map_list obj) {
11863   std::swap(this->ptr, obj.ptr);
11864   return *this;
11865 }
11866 
~map_list()11867 map_list::~map_list() {
11868   if (ptr)
11869     isl_map_list_free(ptr);
11870 }
11871 
copy()11872 __isl_give isl_map_list *map_list::copy() const & {
11873   return isl_map_list_copy(ptr);
11874 }
11875 
get()11876 __isl_keep isl_map_list *map_list::get() const {
11877   return ptr;
11878 }
11879 
release()11880 __isl_give isl_map_list *map_list::release() {
11881   isl_map_list *tmp = ptr;
11882   ptr = nullptr;
11883   return tmp;
11884 }
11885 
is_null()11886 bool map_list::is_null() const {
11887   return ptr == nullptr;
11888 }
11889 
ctx()11890 isl::ctx map_list::ctx() const {
11891   return isl::ctx(isl_map_list_get_ctx(ptr));
11892 }
11893 
add(isl::map el)11894 isl::map_list map_list::add(isl::map el) const
11895 {
11896   auto res = isl_map_list_add(copy(), el.release());
11897   return manage(res);
11898 }
11899 
at(int index)11900 isl::map map_list::at(int index) const
11901 {
11902   auto res = isl_map_list_get_at(get(), index);
11903   return manage(res);
11904 }
11905 
get_at(int index)11906 isl::map map_list::get_at(int index) const
11907 {
11908   return at(index);
11909 }
11910 
clear()11911 isl::map_list map_list::clear() const
11912 {
11913   auto res = isl_map_list_clear(copy());
11914   return manage(res);
11915 }
11916 
concat(isl::map_list list2)11917 isl::map_list map_list::concat(isl::map_list list2) const
11918 {
11919   auto res = isl_map_list_concat(copy(), list2.release());
11920   return manage(res);
11921 }
11922 
drop(unsigned int first,unsigned int n)11923 isl::map_list map_list::drop(unsigned int first, unsigned int n) const
11924 {
11925   auto res = isl_map_list_drop(copy(), first, n);
11926   return manage(res);
11927 }
11928 
foreach(const std::function<stat (isl::map)> & fn)11929 stat map_list::foreach(const std::function<stat(isl::map)> &fn) const
11930 {
11931   struct fn_data {
11932     std::function<stat(isl::map)> func;
11933   } fn_data = { fn };
11934   auto fn_lambda = [](isl_map *arg_0, void *arg_1) -> isl_stat {
11935     auto *data = static_cast<struct fn_data *>(arg_1);
11936     auto ret = (data->func)(manage(arg_0));
11937     return ret.release();
11938   };
11939   auto res = isl_map_list_foreach(get(), fn_lambda, &fn_data);
11940   return manage(res);
11941 }
11942 
insert(unsigned int pos,isl::map el)11943 isl::map_list map_list::insert(unsigned int pos, isl::map el) const
11944 {
11945   auto res = isl_map_list_insert(copy(), pos, el.release());
11946   return manage(res);
11947 }
11948 
size()11949 class size map_list::size() const
11950 {
11951   auto res = isl_map_list_size(get());
11952   return manage(res);
11953 }
11954 
11955 inline std::ostream &operator<<(std::ostream &os, const map_list &obj)
11956 {
11957   char *str = isl_map_list_to_str(obj.get());
11958   if (!str) {
11959     os.setstate(std::ios_base::badbit);
11960     return os;
11961   }
11962   os << str;
11963   free(str);
11964   return os;
11965 }
11966 
11967 // implementations for isl::multi_aff
manage(__isl_take isl_multi_aff * ptr)11968 multi_aff manage(__isl_take isl_multi_aff *ptr) {
11969   return multi_aff(ptr);
11970 }
manage_copy(__isl_keep isl_multi_aff * ptr)11971 multi_aff manage_copy(__isl_keep isl_multi_aff *ptr) {
11972   ptr = isl_multi_aff_copy(ptr);
11973   return multi_aff(ptr);
11974 }
11975 
multi_aff()11976 multi_aff::multi_aff()
11977     : ptr(nullptr) {}
11978 
multi_aff(const multi_aff & obj)11979 multi_aff::multi_aff(const multi_aff &obj)
11980     : ptr(nullptr)
11981 {
11982   ptr = obj.copy();
11983 }
11984 
multi_aff(__isl_take isl_multi_aff * ptr)11985 multi_aff::multi_aff(__isl_take isl_multi_aff *ptr)
11986     : ptr(ptr) {}
11987 
multi_aff(isl::aff aff)11988 multi_aff::multi_aff(isl::aff aff)
11989 {
11990   auto res = isl_multi_aff_from_aff(aff.release());
11991   ptr = res;
11992 }
11993 
multi_aff(isl::space space,isl::aff_list list)11994 multi_aff::multi_aff(isl::space space, isl::aff_list list)
11995 {
11996   auto res = isl_multi_aff_from_aff_list(space.release(), list.release());
11997   ptr = res;
11998 }
11999 
multi_aff(isl::ctx ctx,const std::string & str)12000 multi_aff::multi_aff(isl::ctx ctx, const std::string &str)
12001 {
12002   auto res = isl_multi_aff_read_from_str(ctx.release(), str.c_str());
12003   ptr = res;
12004 }
12005 
12006 multi_aff &multi_aff::operator=(multi_aff obj) {
12007   std::swap(this->ptr, obj.ptr);
12008   return *this;
12009 }
12010 
~multi_aff()12011 multi_aff::~multi_aff() {
12012   if (ptr)
12013     isl_multi_aff_free(ptr);
12014 }
12015 
copy()12016 __isl_give isl_multi_aff *multi_aff::copy() const & {
12017   return isl_multi_aff_copy(ptr);
12018 }
12019 
get()12020 __isl_keep isl_multi_aff *multi_aff::get() const {
12021   return ptr;
12022 }
12023 
release()12024 __isl_give isl_multi_aff *multi_aff::release() {
12025   isl_multi_aff *tmp = ptr;
12026   ptr = nullptr;
12027   return tmp;
12028 }
12029 
is_null()12030 bool multi_aff::is_null() const {
12031   return ptr == nullptr;
12032 }
12033 
ctx()12034 isl::ctx multi_aff::ctx() const {
12035   return isl::ctx(isl_multi_aff_get_ctx(ptr));
12036 }
12037 
add(isl::multi_aff multi2)12038 isl::multi_aff multi_aff::add(isl::multi_aff multi2) const
12039 {
12040   auto res = isl_multi_aff_add(copy(), multi2.release());
12041   return manage(res);
12042 }
12043 
add(const isl::multi_pw_aff & multi2)12044 isl::multi_pw_aff multi_aff::add(const isl::multi_pw_aff &multi2) const
12045 {
12046   return isl::pw_multi_aff(*this).add(multi2);
12047 }
12048 
add(const isl::multi_union_pw_aff & multi2)12049 isl::multi_union_pw_aff multi_aff::add(const isl::multi_union_pw_aff &multi2) const
12050 {
12051   return isl::pw_multi_aff(*this).add(multi2);
12052 }
12053 
add(const isl::pw_multi_aff & pma2)12054 isl::pw_multi_aff multi_aff::add(const isl::pw_multi_aff &pma2) const
12055 {
12056   return isl::pw_multi_aff(*this).add(pma2);
12057 }
12058 
add(const isl::union_pw_multi_aff & upma2)12059 isl::union_pw_multi_aff multi_aff::add(const isl::union_pw_multi_aff &upma2) const
12060 {
12061   return isl::pw_multi_aff(*this).add(upma2);
12062 }
12063 
add(const isl::aff & multi2)12064 isl::multi_aff multi_aff::add(const isl::aff &multi2) const
12065 {
12066   return this->add(isl::multi_aff(multi2));
12067 }
12068 
add_constant(isl::multi_val mv)12069 isl::multi_aff multi_aff::add_constant(isl::multi_val mv) const
12070 {
12071   auto res = isl_multi_aff_add_constant_multi_val(copy(), mv.release());
12072   return manage(res);
12073 }
12074 
add_constant(isl::val v)12075 isl::multi_aff multi_aff::add_constant(isl::val v) const
12076 {
12077   auto res = isl_multi_aff_add_constant_val(copy(), v.release());
12078   return manage(res);
12079 }
12080 
add_constant(long v)12081 isl::multi_aff multi_aff::add_constant(long v) const
12082 {
12083   return this->add_constant(isl::val(ctx(), v));
12084 }
12085 
add_pw_multi_aff(const isl::pw_multi_aff & pma)12086 isl::union_pw_multi_aff multi_aff::add_pw_multi_aff(const isl::pw_multi_aff &pma) const
12087 {
12088   return isl::pw_multi_aff(*this).add_pw_multi_aff(pma);
12089 }
12090 
apply(const isl::union_pw_multi_aff & upma2)12091 isl::union_pw_multi_aff multi_aff::apply(const isl::union_pw_multi_aff &upma2) const
12092 {
12093   return isl::pw_multi_aff(*this).apply(upma2);
12094 }
12095 
as_map()12096 isl::map multi_aff::as_map() const
12097 {
12098   auto res = isl_multi_aff_as_map(copy());
12099   return manage(res);
12100 }
12101 
as_multi_aff()12102 isl::multi_aff multi_aff::as_multi_aff() const
12103 {
12104   return isl::pw_multi_aff(*this).as_multi_aff();
12105 }
12106 
as_multi_union_pw_aff()12107 isl::multi_union_pw_aff multi_aff::as_multi_union_pw_aff() const
12108 {
12109   return isl::pw_multi_aff(*this).as_multi_union_pw_aff();
12110 }
12111 
as_pw_multi_aff()12112 isl::pw_multi_aff multi_aff::as_pw_multi_aff() const
12113 {
12114   return isl::pw_multi_aff(*this).as_pw_multi_aff();
12115 }
12116 
as_set()12117 isl::set multi_aff::as_set() const
12118 {
12119   auto res = isl_multi_aff_as_set(copy());
12120   return manage(res);
12121 }
12122 
as_union_map()12123 isl::union_map multi_aff::as_union_map() const
12124 {
12125   return isl::pw_multi_aff(*this).as_union_map();
12126 }
12127 
at(int pos)12128 isl::aff multi_aff::at(int pos) const
12129 {
12130   auto res = isl_multi_aff_get_at(get(), pos);
12131   return manage(res);
12132 }
12133 
get_at(int pos)12134 isl::aff multi_aff::get_at(int pos) const
12135 {
12136   return at(pos);
12137 }
12138 
bind(isl::multi_id tuple)12139 isl::basic_set multi_aff::bind(isl::multi_id tuple) const
12140 {
12141   auto res = isl_multi_aff_bind(copy(), tuple.release());
12142   return manage(res);
12143 }
12144 
bind_domain(isl::multi_id tuple)12145 isl::multi_aff multi_aff::bind_domain(isl::multi_id tuple) const
12146 {
12147   auto res = isl_multi_aff_bind_domain(copy(), tuple.release());
12148   return manage(res);
12149 }
12150 
bind_domain_wrapped_domain(isl::multi_id tuple)12151 isl::multi_aff multi_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const
12152 {
12153   auto res = isl_multi_aff_bind_domain_wrapped_domain(copy(), tuple.release());
12154   return manage(res);
12155 }
12156 
coalesce()12157 isl::pw_multi_aff multi_aff::coalesce() const
12158 {
12159   return isl::pw_multi_aff(*this).coalesce();
12160 }
12161 
constant_multi_val()12162 isl::multi_val multi_aff::constant_multi_val() const
12163 {
12164   auto res = isl_multi_aff_get_constant_multi_val(get());
12165   return manage(res);
12166 }
12167 
get_constant_multi_val()12168 isl::multi_val multi_aff::get_constant_multi_val() const
12169 {
12170   return constant_multi_val();
12171 }
12172 
dim(isl::dim type)12173 class size multi_aff::dim(isl::dim type) const
12174 {
12175   auto res = isl_multi_aff_dim(get(), static_cast<enum isl_dim_type>(type));
12176   return manage(res);
12177 }
12178 
domain()12179 isl::set multi_aff::domain() const
12180 {
12181   return isl::pw_multi_aff(*this).domain();
12182 }
12183 
domain_map(isl::space space)12184 isl::multi_aff multi_aff::domain_map(isl::space space)
12185 {
12186   auto res = isl_multi_aff_domain_map(space.release());
12187   return manage(res);
12188 }
12189 
drop_dims(isl::dim type,unsigned int first,unsigned int n)12190 isl::pw_multi_aff multi_aff::drop_dims(isl::dim type, unsigned int first, unsigned int n) const
12191 {
12192   return isl::pw_multi_aff(*this).drop_dims(type, first, n);
12193 }
12194 
extract_pw_multi_aff(const isl::space & space)12195 isl::pw_multi_aff multi_aff::extract_pw_multi_aff(const isl::space &space) const
12196 {
12197   return isl::pw_multi_aff(*this).extract_pw_multi_aff(space);
12198 }
12199 
flat_range_product(isl::multi_aff multi2)12200 isl::multi_aff multi_aff::flat_range_product(isl::multi_aff multi2) const
12201 {
12202   auto res = isl_multi_aff_flat_range_product(copy(), multi2.release());
12203   return manage(res);
12204 }
12205 
flat_range_product(const isl::multi_pw_aff & multi2)12206 isl::multi_pw_aff multi_aff::flat_range_product(const isl::multi_pw_aff &multi2) const
12207 {
12208   return isl::pw_multi_aff(*this).flat_range_product(multi2);
12209 }
12210 
flat_range_product(const isl::multi_union_pw_aff & multi2)12211 isl::multi_union_pw_aff multi_aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const
12212 {
12213   return isl::pw_multi_aff(*this).flat_range_product(multi2);
12214 }
12215 
flat_range_product(const isl::pw_multi_aff & pma2)12216 isl::pw_multi_aff multi_aff::flat_range_product(const isl::pw_multi_aff &pma2) const
12217 {
12218   return isl::pw_multi_aff(*this).flat_range_product(pma2);
12219 }
12220 
flat_range_product(const isl::union_pw_multi_aff & upma2)12221 isl::union_pw_multi_aff multi_aff::flat_range_product(const isl::union_pw_multi_aff &upma2) const
12222 {
12223   return isl::pw_multi_aff(*this).flat_range_product(upma2);
12224 }
12225 
flat_range_product(const isl::aff & multi2)12226 isl::multi_aff multi_aff::flat_range_product(const isl::aff &multi2) const
12227 {
12228   return this->flat_range_product(isl::multi_aff(multi2));
12229 }
12230 
floor()12231 isl::multi_aff multi_aff::floor() const
12232 {
12233   auto res = isl_multi_aff_floor(copy());
12234   return manage(res);
12235 }
12236 
foreach_piece(const std::function<stat (isl::set,isl::multi_aff)> & fn)12237 stat multi_aff::foreach_piece(const std::function<stat(isl::set, isl::multi_aff)> &fn) const
12238 {
12239   return isl::pw_multi_aff(*this).foreach_piece(fn);
12240 }
12241 
gist(isl::set context)12242 isl::multi_aff multi_aff::gist(isl::set context) const
12243 {
12244   auto res = isl_multi_aff_gist(copy(), context.release());
12245   return manage(res);
12246 }
12247 
gist(const isl::union_set & context)12248 isl::union_pw_multi_aff multi_aff::gist(const isl::union_set &context) const
12249 {
12250   return isl::pw_multi_aff(*this).gist(context);
12251 }
12252 
gist(const isl::basic_set & context)12253 isl::multi_aff multi_aff::gist(const isl::basic_set &context) const
12254 {
12255   return this->gist(isl::set(context));
12256 }
12257 
gist(const isl::point & context)12258 isl::multi_aff multi_aff::gist(const isl::point &context) const
12259 {
12260   return this->gist(isl::set(context));
12261 }
12262 
has_range_tuple_id()12263 boolean multi_aff::has_range_tuple_id() const
12264 {
12265   auto res = isl_multi_aff_has_range_tuple_id(get());
12266   return manage(res);
12267 }
12268 
identity(isl::space space)12269 isl::multi_aff multi_aff::identity(isl::space space)
12270 {
12271   auto res = isl_multi_aff_identity(space.release());
12272   return manage(res);
12273 }
12274 
identity()12275 isl::multi_aff multi_aff::identity() const
12276 {
12277   auto res = isl_multi_aff_identity_multi_aff(copy());
12278   return manage(res);
12279 }
12280 
identity_on_domain(isl::space space)12281 isl::multi_aff multi_aff::identity_on_domain(isl::space space)
12282 {
12283   auto res = isl_multi_aff_identity_on_domain_space(space.release());
12284   return manage(res);
12285 }
12286 
insert_domain(isl::space domain)12287 isl::multi_aff multi_aff::insert_domain(isl::space domain) const
12288 {
12289   auto res = isl_multi_aff_insert_domain(copy(), domain.release());
12290   return manage(res);
12291 }
12292 
intersect_domain(const isl::set & set)12293 isl::pw_multi_aff multi_aff::intersect_domain(const isl::set &set) const
12294 {
12295   return isl::pw_multi_aff(*this).intersect_domain(set);
12296 }
12297 
intersect_domain(const isl::space & space)12298 isl::union_pw_multi_aff multi_aff::intersect_domain(const isl::space &space) const
12299 {
12300   return isl::pw_multi_aff(*this).intersect_domain(space);
12301 }
12302 
intersect_domain(const isl::union_set & uset)12303 isl::union_pw_multi_aff multi_aff::intersect_domain(const isl::union_set &uset) const
12304 {
12305   return isl::pw_multi_aff(*this).intersect_domain(uset);
12306 }
12307 
intersect_domain_wrapped_domain(const isl::union_set & uset)12308 isl::union_pw_multi_aff multi_aff::intersect_domain_wrapped_domain(const isl::union_set &uset) const
12309 {
12310   return isl::pw_multi_aff(*this).intersect_domain_wrapped_domain(uset);
12311 }
12312 
intersect_domain_wrapped_range(const isl::union_set & uset)12313 isl::union_pw_multi_aff multi_aff::intersect_domain_wrapped_range(const isl::union_set &uset) const
12314 {
12315   return isl::pw_multi_aff(*this).intersect_domain_wrapped_range(uset);
12316 }
12317 
intersect_params(const isl::set & set)12318 isl::pw_multi_aff multi_aff::intersect_params(const isl::set &set) const
12319 {
12320   return isl::pw_multi_aff(*this).intersect_params(set);
12321 }
12322 
involves_locals()12323 boolean multi_aff::involves_locals() const
12324 {
12325   auto res = isl_multi_aff_involves_locals(get());
12326   return manage(res);
12327 }
12328 
involves_nan()12329 boolean multi_aff::involves_nan() const
12330 {
12331   auto res = isl_multi_aff_involves_nan(get());
12332   return manage(res);
12333 }
12334 
involves_param(const isl::id & id)12335 boolean multi_aff::involves_param(const isl::id &id) const
12336 {
12337   return isl::pw_multi_aff(*this).involves_param(id);
12338 }
12339 
involves_param(const std::string & id)12340 boolean multi_aff::involves_param(const std::string &id) const
12341 {
12342   return this->involves_param(isl::id(ctx(), id));
12343 }
12344 
involves_param(const isl::id_list & list)12345 boolean multi_aff::involves_param(const isl::id_list &list) const
12346 {
12347   return isl::pw_multi_aff(*this).involves_param(list);
12348 }
12349 
isa_multi_aff()12350 boolean multi_aff::isa_multi_aff() const
12351 {
12352   return isl::pw_multi_aff(*this).isa_multi_aff();
12353 }
12354 
isa_pw_multi_aff()12355 boolean multi_aff::isa_pw_multi_aff() const
12356 {
12357   return isl::pw_multi_aff(*this).isa_pw_multi_aff();
12358 }
12359 
list()12360 isl::aff_list multi_aff::list() const
12361 {
12362   auto res = isl_multi_aff_get_list(get());
12363   return manage(res);
12364 }
12365 
get_list()12366 isl::aff_list multi_aff::get_list() const
12367 {
12368   return list();
12369 }
12370 
max(const isl::multi_pw_aff & multi2)12371 isl::multi_pw_aff multi_aff::max(const isl::multi_pw_aff &multi2) const
12372 {
12373   return isl::pw_multi_aff(*this).max(multi2);
12374 }
12375 
max_multi_val()12376 isl::multi_val multi_aff::max_multi_val() const
12377 {
12378   return isl::pw_multi_aff(*this).max_multi_val();
12379 }
12380 
min(const isl::multi_pw_aff & multi2)12381 isl::multi_pw_aff multi_aff::min(const isl::multi_pw_aff &multi2) const
12382 {
12383   return isl::pw_multi_aff(*this).min(multi2);
12384 }
12385 
min_multi_val()12386 isl::multi_val multi_aff::min_multi_val() const
12387 {
12388   return isl::pw_multi_aff(*this).min_multi_val();
12389 }
12390 
multi_val_on_domain(isl::space space,isl::multi_val mv)12391 isl::multi_aff multi_aff::multi_val_on_domain(isl::space space, isl::multi_val mv)
12392 {
12393   auto res = isl_multi_aff_multi_val_on_domain_space(space.release(), mv.release());
12394   return manage(res);
12395 }
12396 
n_piece()12397 class size multi_aff::n_piece() const
12398 {
12399   return isl::pw_multi_aff(*this).n_piece();
12400 }
12401 
neg()12402 isl::multi_aff multi_aff::neg() const
12403 {
12404   auto res = isl_multi_aff_neg(copy());
12405   return manage(res);
12406 }
12407 
plain_is_empty()12408 boolean multi_aff::plain_is_empty() const
12409 {
12410   return isl::pw_multi_aff(*this).plain_is_empty();
12411 }
12412 
plain_is_equal(const isl::multi_aff & multi2)12413 boolean multi_aff::plain_is_equal(const isl::multi_aff &multi2) const
12414 {
12415   auto res = isl_multi_aff_plain_is_equal(get(), multi2.get());
12416   return manage(res);
12417 }
12418 
plain_is_equal(const isl::multi_pw_aff & multi2)12419 boolean multi_aff::plain_is_equal(const isl::multi_pw_aff &multi2) const
12420 {
12421   return isl::pw_multi_aff(*this).plain_is_equal(multi2);
12422 }
12423 
plain_is_equal(const isl::multi_union_pw_aff & multi2)12424 boolean multi_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
12425 {
12426   return isl::pw_multi_aff(*this).plain_is_equal(multi2);
12427 }
12428 
plain_is_equal(const isl::aff & multi2)12429 boolean multi_aff::plain_is_equal(const isl::aff &multi2) const
12430 {
12431   return this->plain_is_equal(isl::multi_aff(multi2));
12432 }
12433 
preimage_domain_wrapped_domain(const isl::pw_multi_aff & pma2)12434 isl::pw_multi_aff multi_aff::preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const
12435 {
12436   return isl::pw_multi_aff(*this).preimage_domain_wrapped_domain(pma2);
12437 }
12438 
preimage_domain_wrapped_domain(const isl::union_pw_multi_aff & upma2)12439 isl::union_pw_multi_aff multi_aff::preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const
12440 {
12441   return isl::pw_multi_aff(*this).preimage_domain_wrapped_domain(upma2);
12442 }
12443 
product(isl::multi_aff multi2)12444 isl::multi_aff multi_aff::product(isl::multi_aff multi2) const
12445 {
12446   auto res = isl_multi_aff_product(copy(), multi2.release());
12447   return manage(res);
12448 }
12449 
product(const isl::multi_pw_aff & multi2)12450 isl::multi_pw_aff multi_aff::product(const isl::multi_pw_aff &multi2) const
12451 {
12452   return isl::pw_multi_aff(*this).product(multi2);
12453 }
12454 
product(const isl::pw_multi_aff & pma2)12455 isl::pw_multi_aff multi_aff::product(const isl::pw_multi_aff &pma2) const
12456 {
12457   return isl::pw_multi_aff(*this).product(pma2);
12458 }
12459 
product(const isl::aff & multi2)12460 isl::multi_aff multi_aff::product(const isl::aff &multi2) const
12461 {
12462   return this->product(isl::multi_aff(multi2));
12463 }
12464 
pullback(isl::multi_aff ma2)12465 isl::multi_aff multi_aff::pullback(isl::multi_aff ma2) const
12466 {
12467   auto res = isl_multi_aff_pullback_multi_aff(copy(), ma2.release());
12468   return manage(res);
12469 }
12470 
pullback(const isl::multi_pw_aff & mpa2)12471 isl::multi_pw_aff multi_aff::pullback(const isl::multi_pw_aff &mpa2) const
12472 {
12473   return isl::pw_multi_aff(*this).pullback(mpa2);
12474 }
12475 
pullback(const isl::pw_multi_aff & pma2)12476 isl::pw_multi_aff multi_aff::pullback(const isl::pw_multi_aff &pma2) const
12477 {
12478   return isl::pw_multi_aff(*this).pullback(pma2);
12479 }
12480 
pullback(const isl::union_pw_multi_aff & upma2)12481 isl::union_pw_multi_aff multi_aff::pullback(const isl::union_pw_multi_aff &upma2) const
12482 {
12483   return isl::pw_multi_aff(*this).pullback(upma2);
12484 }
12485 
pullback(const isl::aff & ma2)12486 isl::multi_aff multi_aff::pullback(const isl::aff &ma2) const
12487 {
12488   return this->pullback(isl::multi_aff(ma2));
12489 }
12490 
pw_multi_aff_list()12491 isl::pw_multi_aff_list multi_aff::pw_multi_aff_list() const
12492 {
12493   return isl::pw_multi_aff(*this).pw_multi_aff_list();
12494 }
12495 
range_factor_domain()12496 isl::pw_multi_aff multi_aff::range_factor_domain() const
12497 {
12498   return isl::pw_multi_aff(*this).range_factor_domain();
12499 }
12500 
range_factor_range()12501 isl::pw_multi_aff multi_aff::range_factor_range() const
12502 {
12503   return isl::pw_multi_aff(*this).range_factor_range();
12504 }
12505 
range_map(isl::space space)12506 isl::multi_aff multi_aff::range_map(isl::space space)
12507 {
12508   auto res = isl_multi_aff_range_map(space.release());
12509   return manage(res);
12510 }
12511 
range_product(isl::multi_aff multi2)12512 isl::multi_aff multi_aff::range_product(isl::multi_aff multi2) const
12513 {
12514   auto res = isl_multi_aff_range_product(copy(), multi2.release());
12515   return manage(res);
12516 }
12517 
range_product(const isl::multi_pw_aff & multi2)12518 isl::multi_pw_aff multi_aff::range_product(const isl::multi_pw_aff &multi2) const
12519 {
12520   return isl::pw_multi_aff(*this).range_product(multi2);
12521 }
12522 
range_product(const isl::multi_union_pw_aff & multi2)12523 isl::multi_union_pw_aff multi_aff::range_product(const isl::multi_union_pw_aff &multi2) const
12524 {
12525   return isl::pw_multi_aff(*this).range_product(multi2);
12526 }
12527 
range_product(const isl::pw_multi_aff & pma2)12528 isl::pw_multi_aff multi_aff::range_product(const isl::pw_multi_aff &pma2) const
12529 {
12530   return isl::pw_multi_aff(*this).range_product(pma2);
12531 }
12532 
range_product(const isl::union_pw_multi_aff & upma2)12533 isl::union_pw_multi_aff multi_aff::range_product(const isl::union_pw_multi_aff &upma2) const
12534 {
12535   return isl::pw_multi_aff(*this).range_product(upma2);
12536 }
12537 
range_product(const isl::aff & multi2)12538 isl::multi_aff multi_aff::range_product(const isl::aff &multi2) const
12539 {
12540   return this->range_product(isl::multi_aff(multi2));
12541 }
12542 
range_tuple_id()12543 isl::id multi_aff::range_tuple_id() const
12544 {
12545   auto res = isl_multi_aff_get_range_tuple_id(get());
12546   return manage(res);
12547 }
12548 
get_range_tuple_id()12549 isl::id multi_aff::get_range_tuple_id() const
12550 {
12551   return range_tuple_id();
12552 }
12553 
reset_range_tuple_id()12554 isl::multi_aff multi_aff::reset_range_tuple_id() const
12555 {
12556   auto res = isl_multi_aff_reset_range_tuple_id(copy());
12557   return manage(res);
12558 }
12559 
reset_tuple_id(isl::dim type)12560 isl::multi_aff multi_aff::reset_tuple_id(isl::dim type) const
12561 {
12562   auto res = isl_multi_aff_reset_tuple_id(copy(), static_cast<enum isl_dim_type>(type));
12563   return manage(res);
12564 }
12565 
scale(isl::multi_val mv)12566 isl::multi_aff multi_aff::scale(isl::multi_val mv) const
12567 {
12568   auto res = isl_multi_aff_scale_multi_val(copy(), mv.release());
12569   return manage(res);
12570 }
12571 
scale(isl::val v)12572 isl::multi_aff multi_aff::scale(isl::val v) const
12573 {
12574   auto res = isl_multi_aff_scale_val(copy(), v.release());
12575   return manage(res);
12576 }
12577 
scale(long v)12578 isl::multi_aff multi_aff::scale(long v) const
12579 {
12580   return this->scale(isl::val(ctx(), v));
12581 }
12582 
scale_down(isl::multi_val mv)12583 isl::multi_aff multi_aff::scale_down(isl::multi_val mv) const
12584 {
12585   auto res = isl_multi_aff_scale_down_multi_val(copy(), mv.release());
12586   return manage(res);
12587 }
12588 
scale_down(isl::val v)12589 isl::multi_aff multi_aff::scale_down(isl::val v) const
12590 {
12591   auto res = isl_multi_aff_scale_down_val(copy(), v.release());
12592   return manage(res);
12593 }
12594 
scale_down(long v)12595 isl::multi_aff multi_aff::scale_down(long v) const
12596 {
12597   return this->scale_down(isl::val(ctx(), v));
12598 }
12599 
set_aff(int pos,isl::aff el)12600 isl::multi_aff multi_aff::set_aff(int pos, isl::aff el) const
12601 {
12602   auto res = isl_multi_aff_set_aff(copy(), pos, el.release());
12603   return manage(res);
12604 }
12605 
set_at(int pos,isl::aff el)12606 isl::multi_aff multi_aff::set_at(int pos, isl::aff el) const
12607 {
12608   auto res = isl_multi_aff_set_at(copy(), pos, el.release());
12609   return manage(res);
12610 }
12611 
set_at(int pos,const isl::pw_aff & el)12612 isl::multi_pw_aff multi_aff::set_at(int pos, const isl::pw_aff &el) const
12613 {
12614   return isl::pw_multi_aff(*this).set_at(pos, el);
12615 }
12616 
set_at(int pos,const isl::union_pw_aff & el)12617 isl::multi_union_pw_aff multi_aff::set_at(int pos, const isl::union_pw_aff &el) const
12618 {
12619   return isl::pw_multi_aff(*this).set_at(pos, el);
12620 }
12621 
set_pw_aff(int pos,const isl::pw_aff & el)12622 isl::multi_pw_aff multi_aff::set_pw_aff(int pos, const isl::pw_aff &el) const
12623 {
12624   return isl::pw_multi_aff(*this).set_pw_aff(pos, el);
12625 }
12626 
set_pw_aff(unsigned int pos,const isl::pw_aff & pa)12627 isl::pw_multi_aff multi_aff::set_pw_aff(unsigned int pos, const isl::pw_aff &pa) const
12628 {
12629   return isl::pw_multi_aff(*this).set_pw_aff(pos, pa);
12630 }
12631 
set_range_tuple(isl::id id)12632 isl::multi_aff multi_aff::set_range_tuple(isl::id id) const
12633 {
12634   auto res = isl_multi_aff_set_range_tuple_id(copy(), id.release());
12635   return manage(res);
12636 }
12637 
set_range_tuple(const std::string & id)12638 isl::multi_aff multi_aff::set_range_tuple(const std::string &id) const
12639 {
12640   return this->set_range_tuple(isl::id(ctx(), id));
12641 }
12642 
set_union_pw_aff(int pos,const isl::union_pw_aff & el)12643 isl::multi_union_pw_aff multi_aff::set_union_pw_aff(int pos, const isl::union_pw_aff &el) const
12644 {
12645   return isl::pw_multi_aff(*this).set_union_pw_aff(pos, el);
12646 }
12647 
size()12648 class size multi_aff::size() const
12649 {
12650   auto res = isl_multi_aff_size(get());
12651   return manage(res);
12652 }
12653 
space()12654 isl::space multi_aff::space() const
12655 {
12656   auto res = isl_multi_aff_get_space(get());
12657   return manage(res);
12658 }
12659 
get_space()12660 isl::space multi_aff::get_space() const
12661 {
12662   return space();
12663 }
12664 
sub(isl::multi_aff multi2)12665 isl::multi_aff multi_aff::sub(isl::multi_aff multi2) const
12666 {
12667   auto res = isl_multi_aff_sub(copy(), multi2.release());
12668   return manage(res);
12669 }
12670 
sub(const isl::multi_pw_aff & multi2)12671 isl::multi_pw_aff multi_aff::sub(const isl::multi_pw_aff &multi2) const
12672 {
12673   return isl::pw_multi_aff(*this).sub(multi2);
12674 }
12675 
sub(const isl::multi_union_pw_aff & multi2)12676 isl::multi_union_pw_aff multi_aff::sub(const isl::multi_union_pw_aff &multi2) const
12677 {
12678   return isl::pw_multi_aff(*this).sub(multi2);
12679 }
12680 
sub(const isl::pw_multi_aff & pma2)12681 isl::pw_multi_aff multi_aff::sub(const isl::pw_multi_aff &pma2) const
12682 {
12683   return isl::pw_multi_aff(*this).sub(pma2);
12684 }
12685 
sub(const isl::union_pw_multi_aff & upma2)12686 isl::union_pw_multi_aff multi_aff::sub(const isl::union_pw_multi_aff &upma2) const
12687 {
12688   return isl::pw_multi_aff(*this).sub(upma2);
12689 }
12690 
sub(const isl::aff & multi2)12691 isl::multi_aff multi_aff::sub(const isl::aff &multi2) const
12692 {
12693   return this->sub(isl::multi_aff(multi2));
12694 }
12695 
subtract_domain(const isl::set & set)12696 isl::pw_multi_aff multi_aff::subtract_domain(const isl::set &set) const
12697 {
12698   return isl::pw_multi_aff(*this).subtract_domain(set);
12699 }
12700 
subtract_domain(const isl::space & space)12701 isl::union_pw_multi_aff multi_aff::subtract_domain(const isl::space &space) const
12702 {
12703   return isl::pw_multi_aff(*this).subtract_domain(space);
12704 }
12705 
subtract_domain(const isl::union_set & uset)12706 isl::union_pw_multi_aff multi_aff::subtract_domain(const isl::union_set &uset) const
12707 {
12708   return isl::pw_multi_aff(*this).subtract_domain(uset);
12709 }
12710 
to_list()12711 isl::pw_multi_aff_list multi_aff::to_list() const
12712 {
12713   return isl::pw_multi_aff(*this).to_list();
12714 }
12715 
to_multi_pw_aff()12716 isl::multi_pw_aff multi_aff::to_multi_pw_aff() const
12717 {
12718   auto res = isl_multi_aff_to_multi_pw_aff(copy());
12719   return manage(res);
12720 }
12721 
to_multi_union_pw_aff()12722 isl::multi_union_pw_aff multi_aff::to_multi_union_pw_aff() const
12723 {
12724   auto res = isl_multi_aff_to_multi_union_pw_aff(copy());
12725   return manage(res);
12726 }
12727 
to_pw_multi_aff()12728 isl::pw_multi_aff multi_aff::to_pw_multi_aff() const
12729 {
12730   auto res = isl_multi_aff_to_pw_multi_aff(copy());
12731   return manage(res);
12732 }
12733 
to_union_pw_multi_aff()12734 isl::union_pw_multi_aff multi_aff::to_union_pw_multi_aff() const
12735 {
12736   return isl::pw_multi_aff(*this).to_union_pw_multi_aff();
12737 }
12738 
tuple_id(isl::dim type)12739 isl::id multi_aff::tuple_id(isl::dim type) const
12740 {
12741   return isl::pw_multi_aff(*this).tuple_id(type);
12742 }
12743 
unbind_params_insert_domain(isl::multi_id domain)12744 isl::multi_aff multi_aff::unbind_params_insert_domain(isl::multi_id domain) const
12745 {
12746   auto res = isl_multi_aff_unbind_params_insert_domain(copy(), domain.release());
12747   return manage(res);
12748 }
12749 
union_add(const isl::multi_pw_aff & mpa2)12750 isl::multi_pw_aff multi_aff::union_add(const isl::multi_pw_aff &mpa2) const
12751 {
12752   return isl::pw_multi_aff(*this).union_add(mpa2);
12753 }
12754 
union_add(const isl::multi_union_pw_aff & mupa2)12755 isl::multi_union_pw_aff multi_aff::union_add(const isl::multi_union_pw_aff &mupa2) const
12756 {
12757   return isl::pw_multi_aff(*this).union_add(mupa2);
12758 }
12759 
union_add(const isl::pw_multi_aff & pma2)12760 isl::pw_multi_aff multi_aff::union_add(const isl::pw_multi_aff &pma2) const
12761 {
12762   return isl::pw_multi_aff(*this).union_add(pma2);
12763 }
12764 
union_add(const isl::union_pw_multi_aff & upma2)12765 isl::union_pw_multi_aff multi_aff::union_add(const isl::union_pw_multi_aff &upma2) const
12766 {
12767   return isl::pw_multi_aff(*this).union_add(upma2);
12768 }
12769 
zero(isl::space space)12770 isl::multi_aff multi_aff::zero(isl::space space)
12771 {
12772   auto res = isl_multi_aff_zero(space.release());
12773   return manage(res);
12774 }
12775 
12776 inline std::ostream &operator<<(std::ostream &os, const multi_aff &obj)
12777 {
12778   char *str = isl_multi_aff_to_str(obj.get());
12779   if (!str) {
12780     os.setstate(std::ios_base::badbit);
12781     return os;
12782   }
12783   os << str;
12784   free(str);
12785   return os;
12786 }
12787 
12788 // implementations for isl::multi_id
manage(__isl_take isl_multi_id * ptr)12789 multi_id manage(__isl_take isl_multi_id *ptr) {
12790   return multi_id(ptr);
12791 }
manage_copy(__isl_keep isl_multi_id * ptr)12792 multi_id manage_copy(__isl_keep isl_multi_id *ptr) {
12793   ptr = isl_multi_id_copy(ptr);
12794   return multi_id(ptr);
12795 }
12796 
multi_id()12797 multi_id::multi_id()
12798     : ptr(nullptr) {}
12799 
multi_id(const multi_id & obj)12800 multi_id::multi_id(const multi_id &obj)
12801     : ptr(nullptr)
12802 {
12803   ptr = obj.copy();
12804 }
12805 
multi_id(__isl_take isl_multi_id * ptr)12806 multi_id::multi_id(__isl_take isl_multi_id *ptr)
12807     : ptr(ptr) {}
12808 
multi_id(isl::space space,isl::id_list list)12809 multi_id::multi_id(isl::space space, isl::id_list list)
12810 {
12811   auto res = isl_multi_id_from_id_list(space.release(), list.release());
12812   ptr = res;
12813 }
12814 
multi_id(isl::ctx ctx,const std::string & str)12815 multi_id::multi_id(isl::ctx ctx, const std::string &str)
12816 {
12817   auto res = isl_multi_id_read_from_str(ctx.release(), str.c_str());
12818   ptr = res;
12819 }
12820 
12821 multi_id &multi_id::operator=(multi_id obj) {
12822   std::swap(this->ptr, obj.ptr);
12823   return *this;
12824 }
12825 
~multi_id()12826 multi_id::~multi_id() {
12827   if (ptr)
12828     isl_multi_id_free(ptr);
12829 }
12830 
copy()12831 __isl_give isl_multi_id *multi_id::copy() const & {
12832   return isl_multi_id_copy(ptr);
12833 }
12834 
get()12835 __isl_keep isl_multi_id *multi_id::get() const {
12836   return ptr;
12837 }
12838 
release()12839 __isl_give isl_multi_id *multi_id::release() {
12840   isl_multi_id *tmp = ptr;
12841   ptr = nullptr;
12842   return tmp;
12843 }
12844 
is_null()12845 bool multi_id::is_null() const {
12846   return ptr == nullptr;
12847 }
12848 
ctx()12849 isl::ctx multi_id::ctx() const {
12850   return isl::ctx(isl_multi_id_get_ctx(ptr));
12851 }
12852 
at(int pos)12853 isl::id multi_id::at(int pos) const
12854 {
12855   auto res = isl_multi_id_get_at(get(), pos);
12856   return manage(res);
12857 }
12858 
get_at(int pos)12859 isl::id multi_id::get_at(int pos) const
12860 {
12861   return at(pos);
12862 }
12863 
flat_range_product(isl::multi_id multi2)12864 isl::multi_id multi_id::flat_range_product(isl::multi_id multi2) const
12865 {
12866   auto res = isl_multi_id_flat_range_product(copy(), multi2.release());
12867   return manage(res);
12868 }
12869 
list()12870 isl::id_list multi_id::list() const
12871 {
12872   auto res = isl_multi_id_get_list(get());
12873   return manage(res);
12874 }
12875 
get_list()12876 isl::id_list multi_id::get_list() const
12877 {
12878   return list();
12879 }
12880 
plain_is_equal(const isl::multi_id & multi2)12881 boolean multi_id::plain_is_equal(const isl::multi_id &multi2) const
12882 {
12883   auto res = isl_multi_id_plain_is_equal(get(), multi2.get());
12884   return manage(res);
12885 }
12886 
range_product(isl::multi_id multi2)12887 isl::multi_id multi_id::range_product(isl::multi_id multi2) const
12888 {
12889   auto res = isl_multi_id_range_product(copy(), multi2.release());
12890   return manage(res);
12891 }
12892 
set_at(int pos,isl::id el)12893 isl::multi_id multi_id::set_at(int pos, isl::id el) const
12894 {
12895   auto res = isl_multi_id_set_at(copy(), pos, el.release());
12896   return manage(res);
12897 }
12898 
set_at(int pos,const std::string & el)12899 isl::multi_id multi_id::set_at(int pos, const std::string &el) const
12900 {
12901   return this->set_at(pos, isl::id(ctx(), el));
12902 }
12903 
set_id(int pos,isl::id el)12904 isl::multi_id multi_id::set_id(int pos, isl::id el) const
12905 {
12906   auto res = isl_multi_id_set_id(copy(), pos, el.release());
12907   return manage(res);
12908 }
12909 
set_id(int pos,const std::string & el)12910 isl::multi_id multi_id::set_id(int pos, const std::string &el) const
12911 {
12912   return this->set_id(pos, isl::id(ctx(), el));
12913 }
12914 
size()12915 class size multi_id::size() const
12916 {
12917   auto res = isl_multi_id_size(get());
12918   return manage(res);
12919 }
12920 
space()12921 isl::space multi_id::space() const
12922 {
12923   auto res = isl_multi_id_get_space(get());
12924   return manage(res);
12925 }
12926 
get_space()12927 isl::space multi_id::get_space() const
12928 {
12929   return space();
12930 }
12931 
12932 inline std::ostream &operator<<(std::ostream &os, const multi_id &obj)
12933 {
12934   char *str = isl_multi_id_to_str(obj.get());
12935   if (!str) {
12936     os.setstate(std::ios_base::badbit);
12937     return os;
12938   }
12939   os << str;
12940   free(str);
12941   return os;
12942 }
12943 
12944 // implementations for isl::multi_pw_aff
manage(__isl_take isl_multi_pw_aff * ptr)12945 multi_pw_aff manage(__isl_take isl_multi_pw_aff *ptr) {
12946   return multi_pw_aff(ptr);
12947 }
manage_copy(__isl_keep isl_multi_pw_aff * ptr)12948 multi_pw_aff manage_copy(__isl_keep isl_multi_pw_aff *ptr) {
12949   ptr = isl_multi_pw_aff_copy(ptr);
12950   return multi_pw_aff(ptr);
12951 }
12952 
multi_pw_aff()12953 multi_pw_aff::multi_pw_aff()
12954     : ptr(nullptr) {}
12955 
multi_pw_aff(const multi_pw_aff & obj)12956 multi_pw_aff::multi_pw_aff(const multi_pw_aff &obj)
12957     : ptr(nullptr)
12958 {
12959   ptr = obj.copy();
12960 }
12961 
multi_pw_aff(__isl_take isl_multi_pw_aff * ptr)12962 multi_pw_aff::multi_pw_aff(__isl_take isl_multi_pw_aff *ptr)
12963     : ptr(ptr) {}
12964 
multi_pw_aff(isl::aff aff)12965 multi_pw_aff::multi_pw_aff(isl::aff aff)
12966 {
12967   auto res = isl_multi_pw_aff_from_aff(aff.release());
12968   ptr = res;
12969 }
12970 
multi_pw_aff(isl::multi_aff ma)12971 multi_pw_aff::multi_pw_aff(isl::multi_aff ma)
12972 {
12973   auto res = isl_multi_pw_aff_from_multi_aff(ma.release());
12974   ptr = res;
12975 }
12976 
multi_pw_aff(isl::pw_aff pa)12977 multi_pw_aff::multi_pw_aff(isl::pw_aff pa)
12978 {
12979   auto res = isl_multi_pw_aff_from_pw_aff(pa.release());
12980   ptr = res;
12981 }
12982 
multi_pw_aff(isl::space space,isl::pw_aff_list list)12983 multi_pw_aff::multi_pw_aff(isl::space space, isl::pw_aff_list list)
12984 {
12985   auto res = isl_multi_pw_aff_from_pw_aff_list(space.release(), list.release());
12986   ptr = res;
12987 }
12988 
multi_pw_aff(isl::pw_multi_aff pma)12989 multi_pw_aff::multi_pw_aff(isl::pw_multi_aff pma)
12990 {
12991   auto res = isl_multi_pw_aff_from_pw_multi_aff(pma.release());
12992   ptr = res;
12993 }
12994 
multi_pw_aff(isl::ctx ctx,const std::string & str)12995 multi_pw_aff::multi_pw_aff(isl::ctx ctx, const std::string &str)
12996 {
12997   auto res = isl_multi_pw_aff_read_from_str(ctx.release(), str.c_str());
12998   ptr = res;
12999 }
13000 
13001 multi_pw_aff &multi_pw_aff::operator=(multi_pw_aff obj) {
13002   std::swap(this->ptr, obj.ptr);
13003   return *this;
13004 }
13005 
~multi_pw_aff()13006 multi_pw_aff::~multi_pw_aff() {
13007   if (ptr)
13008     isl_multi_pw_aff_free(ptr);
13009 }
13010 
copy()13011 __isl_give isl_multi_pw_aff *multi_pw_aff::copy() const & {
13012   return isl_multi_pw_aff_copy(ptr);
13013 }
13014 
get()13015 __isl_keep isl_multi_pw_aff *multi_pw_aff::get() const {
13016   return ptr;
13017 }
13018 
release()13019 __isl_give isl_multi_pw_aff *multi_pw_aff::release() {
13020   isl_multi_pw_aff *tmp = ptr;
13021   ptr = nullptr;
13022   return tmp;
13023 }
13024 
is_null()13025 bool multi_pw_aff::is_null() const {
13026   return ptr == nullptr;
13027 }
13028 
ctx()13029 isl::ctx multi_pw_aff::ctx() const {
13030   return isl::ctx(isl_multi_pw_aff_get_ctx(ptr));
13031 }
13032 
add(isl::multi_pw_aff multi2)13033 isl::multi_pw_aff multi_pw_aff::add(isl::multi_pw_aff multi2) const
13034 {
13035   auto res = isl_multi_pw_aff_add(copy(), multi2.release());
13036   return manage(res);
13037 }
13038 
add(const isl::multi_union_pw_aff & multi2)13039 isl::multi_union_pw_aff multi_pw_aff::add(const isl::multi_union_pw_aff &multi2) const
13040 {
13041   return isl::multi_union_pw_aff(*this).add(multi2);
13042 }
13043 
add(const isl::aff & multi2)13044 isl::multi_pw_aff multi_pw_aff::add(const isl::aff &multi2) const
13045 {
13046   return this->add(isl::multi_pw_aff(multi2));
13047 }
13048 
add(const isl::multi_aff & multi2)13049 isl::multi_pw_aff multi_pw_aff::add(const isl::multi_aff &multi2) const
13050 {
13051   return this->add(isl::multi_pw_aff(multi2));
13052 }
13053 
add(const isl::pw_aff & multi2)13054 isl::multi_pw_aff multi_pw_aff::add(const isl::pw_aff &multi2) const
13055 {
13056   return this->add(isl::multi_pw_aff(multi2));
13057 }
13058 
add(const isl::pw_multi_aff & multi2)13059 isl::multi_pw_aff multi_pw_aff::add(const isl::pw_multi_aff &multi2) const
13060 {
13061   return this->add(isl::multi_pw_aff(multi2));
13062 }
13063 
add_constant(isl::multi_val mv)13064 isl::multi_pw_aff multi_pw_aff::add_constant(isl::multi_val mv) const
13065 {
13066   auto res = isl_multi_pw_aff_add_constant_multi_val(copy(), mv.release());
13067   return manage(res);
13068 }
13069 
add_constant(isl::val v)13070 isl::multi_pw_aff multi_pw_aff::add_constant(isl::val v) const
13071 {
13072   auto res = isl_multi_pw_aff_add_constant_val(copy(), v.release());
13073   return manage(res);
13074 }
13075 
add_constant(long v)13076 isl::multi_pw_aff multi_pw_aff::add_constant(long v) const
13077 {
13078   return this->add_constant(isl::val(ctx(), v));
13079 }
13080 
as_map()13081 isl::map multi_pw_aff::as_map() const
13082 {
13083   auto res = isl_multi_pw_aff_as_map(copy());
13084   return manage(res);
13085 }
13086 
as_multi_aff()13087 isl::multi_aff multi_pw_aff::as_multi_aff() const
13088 {
13089   auto res = isl_multi_pw_aff_as_multi_aff(copy());
13090   return manage(res);
13091 }
13092 
as_set()13093 isl::set multi_pw_aff::as_set() const
13094 {
13095   auto res = isl_multi_pw_aff_as_set(copy());
13096   return manage(res);
13097 }
13098 
at(int pos)13099 isl::pw_aff multi_pw_aff::at(int pos) const
13100 {
13101   auto res = isl_multi_pw_aff_get_at(get(), pos);
13102   return manage(res);
13103 }
13104 
get_at(int pos)13105 isl::pw_aff multi_pw_aff::get_at(int pos) const
13106 {
13107   return at(pos);
13108 }
13109 
bind(isl::multi_id tuple)13110 isl::set multi_pw_aff::bind(isl::multi_id tuple) const
13111 {
13112   auto res = isl_multi_pw_aff_bind(copy(), tuple.release());
13113   return manage(res);
13114 }
13115 
bind_domain(isl::multi_id tuple)13116 isl::multi_pw_aff multi_pw_aff::bind_domain(isl::multi_id tuple) const
13117 {
13118   auto res = isl_multi_pw_aff_bind_domain(copy(), tuple.release());
13119   return manage(res);
13120 }
13121 
bind_domain_wrapped_domain(isl::multi_id tuple)13122 isl::multi_pw_aff multi_pw_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const
13123 {
13124   auto res = isl_multi_pw_aff_bind_domain_wrapped_domain(copy(), tuple.release());
13125   return manage(res);
13126 }
13127 
coalesce()13128 isl::multi_pw_aff multi_pw_aff::coalesce() const
13129 {
13130   auto res = isl_multi_pw_aff_coalesce(copy());
13131   return manage(res);
13132 }
13133 
dim(isl::dim type)13134 class size multi_pw_aff::dim(isl::dim type) const
13135 {
13136   auto res = isl_multi_pw_aff_dim(get(), static_cast<enum isl_dim_type>(type));
13137   return manage(res);
13138 }
13139 
domain()13140 isl::set multi_pw_aff::domain() const
13141 {
13142   auto res = isl_multi_pw_aff_domain(copy());
13143   return manage(res);
13144 }
13145 
flat_range_product(isl::multi_pw_aff multi2)13146 isl::multi_pw_aff multi_pw_aff::flat_range_product(isl::multi_pw_aff multi2) const
13147 {
13148   auto res = isl_multi_pw_aff_flat_range_product(copy(), multi2.release());
13149   return manage(res);
13150 }
13151 
flat_range_product(const isl::multi_union_pw_aff & multi2)13152 isl::multi_union_pw_aff multi_pw_aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const
13153 {
13154   return isl::multi_union_pw_aff(*this).flat_range_product(multi2);
13155 }
13156 
flat_range_product(const isl::aff & multi2)13157 isl::multi_pw_aff multi_pw_aff::flat_range_product(const isl::aff &multi2) const
13158 {
13159   return this->flat_range_product(isl::multi_pw_aff(multi2));
13160 }
13161 
flat_range_product(const isl::multi_aff & multi2)13162 isl::multi_pw_aff multi_pw_aff::flat_range_product(const isl::multi_aff &multi2) const
13163 {
13164   return this->flat_range_product(isl::multi_pw_aff(multi2));
13165 }
13166 
flat_range_product(const isl::pw_aff & multi2)13167 isl::multi_pw_aff multi_pw_aff::flat_range_product(const isl::pw_aff &multi2) const
13168 {
13169   return this->flat_range_product(isl::multi_pw_aff(multi2));
13170 }
13171 
flat_range_product(const isl::pw_multi_aff & multi2)13172 isl::multi_pw_aff multi_pw_aff::flat_range_product(const isl::pw_multi_aff &multi2) const
13173 {
13174   return this->flat_range_product(isl::multi_pw_aff(multi2));
13175 }
13176 
gist(isl::set set)13177 isl::multi_pw_aff multi_pw_aff::gist(isl::set set) const
13178 {
13179   auto res = isl_multi_pw_aff_gist(copy(), set.release());
13180   return manage(res);
13181 }
13182 
gist(const isl::union_set & context)13183 isl::multi_union_pw_aff multi_pw_aff::gist(const isl::union_set &context) const
13184 {
13185   return isl::multi_union_pw_aff(*this).gist(context);
13186 }
13187 
gist(const isl::basic_set & set)13188 isl::multi_pw_aff multi_pw_aff::gist(const isl::basic_set &set) const
13189 {
13190   return this->gist(isl::set(set));
13191 }
13192 
gist(const isl::point & set)13193 isl::multi_pw_aff multi_pw_aff::gist(const isl::point &set) const
13194 {
13195   return this->gist(isl::set(set));
13196 }
13197 
has_range_tuple_id()13198 boolean multi_pw_aff::has_range_tuple_id() const
13199 {
13200   auto res = isl_multi_pw_aff_has_range_tuple_id(get());
13201   return manage(res);
13202 }
13203 
identity(isl::space space)13204 isl::multi_pw_aff multi_pw_aff::identity(isl::space space)
13205 {
13206   auto res = isl_multi_pw_aff_identity(space.release());
13207   return manage(res);
13208 }
13209 
identity()13210 isl::multi_pw_aff multi_pw_aff::identity() const
13211 {
13212   auto res = isl_multi_pw_aff_identity_multi_pw_aff(copy());
13213   return manage(res);
13214 }
13215 
identity_on_domain(isl::space space)13216 isl::multi_pw_aff multi_pw_aff::identity_on_domain(isl::space space)
13217 {
13218   auto res = isl_multi_pw_aff_identity_on_domain_space(space.release());
13219   return manage(res);
13220 }
13221 
insert_domain(isl::space domain)13222 isl::multi_pw_aff multi_pw_aff::insert_domain(isl::space domain) const
13223 {
13224   auto res = isl_multi_pw_aff_insert_domain(copy(), domain.release());
13225   return manage(res);
13226 }
13227 
intersect_domain(isl::set domain)13228 isl::multi_pw_aff multi_pw_aff::intersect_domain(isl::set domain) const
13229 {
13230   auto res = isl_multi_pw_aff_intersect_domain(copy(), domain.release());
13231   return manage(res);
13232 }
13233 
intersect_domain(const isl::union_set & uset)13234 isl::multi_union_pw_aff multi_pw_aff::intersect_domain(const isl::union_set &uset) const
13235 {
13236   return isl::multi_union_pw_aff(*this).intersect_domain(uset);
13237 }
13238 
intersect_domain(const isl::basic_set & domain)13239 isl::multi_pw_aff multi_pw_aff::intersect_domain(const isl::basic_set &domain) const
13240 {
13241   return this->intersect_domain(isl::set(domain));
13242 }
13243 
intersect_domain(const isl::point & domain)13244 isl::multi_pw_aff multi_pw_aff::intersect_domain(const isl::point &domain) const
13245 {
13246   return this->intersect_domain(isl::set(domain));
13247 }
13248 
intersect_params(isl::set set)13249 isl::multi_pw_aff multi_pw_aff::intersect_params(isl::set set) const
13250 {
13251   auto res = isl_multi_pw_aff_intersect_params(copy(), set.release());
13252   return manage(res);
13253 }
13254 
involves_nan()13255 boolean multi_pw_aff::involves_nan() const
13256 {
13257   auto res = isl_multi_pw_aff_involves_nan(get());
13258   return manage(res);
13259 }
13260 
involves_param(const isl::id & id)13261 boolean multi_pw_aff::involves_param(const isl::id &id) const
13262 {
13263   auto res = isl_multi_pw_aff_involves_param_id(get(), id.get());
13264   return manage(res);
13265 }
13266 
involves_param(const std::string & id)13267 boolean multi_pw_aff::involves_param(const std::string &id) const
13268 {
13269   return this->involves_param(isl::id(ctx(), id));
13270 }
13271 
involves_param(const isl::id_list & list)13272 boolean multi_pw_aff::involves_param(const isl::id_list &list) const
13273 {
13274   auto res = isl_multi_pw_aff_involves_param_id_list(get(), list.get());
13275   return manage(res);
13276 }
13277 
isa_multi_aff()13278 boolean multi_pw_aff::isa_multi_aff() const
13279 {
13280   auto res = isl_multi_pw_aff_isa_multi_aff(get());
13281   return manage(res);
13282 }
13283 
list()13284 isl::pw_aff_list multi_pw_aff::list() const
13285 {
13286   auto res = isl_multi_pw_aff_get_list(get());
13287   return manage(res);
13288 }
13289 
get_list()13290 isl::pw_aff_list multi_pw_aff::get_list() const
13291 {
13292   return list();
13293 }
13294 
max(isl::multi_pw_aff multi2)13295 isl::multi_pw_aff multi_pw_aff::max(isl::multi_pw_aff multi2) const
13296 {
13297   auto res = isl_multi_pw_aff_max(copy(), multi2.release());
13298   return manage(res);
13299 }
13300 
max_multi_val()13301 isl::multi_val multi_pw_aff::max_multi_val() const
13302 {
13303   auto res = isl_multi_pw_aff_max_multi_val(copy());
13304   return manage(res);
13305 }
13306 
min(isl::multi_pw_aff multi2)13307 isl::multi_pw_aff multi_pw_aff::min(isl::multi_pw_aff multi2) const
13308 {
13309   auto res = isl_multi_pw_aff_min(copy(), multi2.release());
13310   return manage(res);
13311 }
13312 
min_multi_val()13313 isl::multi_val multi_pw_aff::min_multi_val() const
13314 {
13315   auto res = isl_multi_pw_aff_min_multi_val(copy());
13316   return manage(res);
13317 }
13318 
neg()13319 isl::multi_pw_aff multi_pw_aff::neg() const
13320 {
13321   auto res = isl_multi_pw_aff_neg(copy());
13322   return manage(res);
13323 }
13324 
plain_is_equal(const isl::multi_pw_aff & multi2)13325 boolean multi_pw_aff::plain_is_equal(const isl::multi_pw_aff &multi2) const
13326 {
13327   auto res = isl_multi_pw_aff_plain_is_equal(get(), multi2.get());
13328   return manage(res);
13329 }
13330 
plain_is_equal(const isl::multi_union_pw_aff & multi2)13331 boolean multi_pw_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
13332 {
13333   return isl::multi_union_pw_aff(*this).plain_is_equal(multi2);
13334 }
13335 
plain_is_equal(const isl::aff & multi2)13336 boolean multi_pw_aff::plain_is_equal(const isl::aff &multi2) const
13337 {
13338   return this->plain_is_equal(isl::multi_pw_aff(multi2));
13339 }
13340 
plain_is_equal(const isl::multi_aff & multi2)13341 boolean multi_pw_aff::plain_is_equal(const isl::multi_aff &multi2) const
13342 {
13343   return this->plain_is_equal(isl::multi_pw_aff(multi2));
13344 }
13345 
plain_is_equal(const isl::pw_aff & multi2)13346 boolean multi_pw_aff::plain_is_equal(const isl::pw_aff &multi2) const
13347 {
13348   return this->plain_is_equal(isl::multi_pw_aff(multi2));
13349 }
13350 
plain_is_equal(const isl::pw_multi_aff & multi2)13351 boolean multi_pw_aff::plain_is_equal(const isl::pw_multi_aff &multi2) const
13352 {
13353   return this->plain_is_equal(isl::multi_pw_aff(multi2));
13354 }
13355 
product(isl::multi_pw_aff multi2)13356 isl::multi_pw_aff multi_pw_aff::product(isl::multi_pw_aff multi2) const
13357 {
13358   auto res = isl_multi_pw_aff_product(copy(), multi2.release());
13359   return manage(res);
13360 }
13361 
pullback(isl::multi_aff ma)13362 isl::multi_pw_aff multi_pw_aff::pullback(isl::multi_aff ma) const
13363 {
13364   auto res = isl_multi_pw_aff_pullback_multi_aff(copy(), ma.release());
13365   return manage(res);
13366 }
13367 
pullback(isl::multi_pw_aff mpa2)13368 isl::multi_pw_aff multi_pw_aff::pullback(isl::multi_pw_aff mpa2) const
13369 {
13370   auto res = isl_multi_pw_aff_pullback_multi_pw_aff(copy(), mpa2.release());
13371   return manage(res);
13372 }
13373 
pullback(isl::pw_multi_aff pma)13374 isl::multi_pw_aff multi_pw_aff::pullback(isl::pw_multi_aff pma) const
13375 {
13376   auto res = isl_multi_pw_aff_pullback_pw_multi_aff(copy(), pma.release());
13377   return manage(res);
13378 }
13379 
pullback(const isl::union_pw_multi_aff & upma)13380 isl::multi_union_pw_aff multi_pw_aff::pullback(const isl::union_pw_multi_aff &upma) const
13381 {
13382   return isl::multi_union_pw_aff(*this).pullback(upma);
13383 }
13384 
range_product(isl::multi_pw_aff multi2)13385 isl::multi_pw_aff multi_pw_aff::range_product(isl::multi_pw_aff multi2) const
13386 {
13387   auto res = isl_multi_pw_aff_range_product(copy(), multi2.release());
13388   return manage(res);
13389 }
13390 
range_product(const isl::multi_union_pw_aff & multi2)13391 isl::multi_union_pw_aff multi_pw_aff::range_product(const isl::multi_union_pw_aff &multi2) const
13392 {
13393   return isl::multi_union_pw_aff(*this).range_product(multi2);
13394 }
13395 
range_product(const isl::aff & multi2)13396 isl::multi_pw_aff multi_pw_aff::range_product(const isl::aff &multi2) const
13397 {
13398   return this->range_product(isl::multi_pw_aff(multi2));
13399 }
13400 
range_product(const isl::multi_aff & multi2)13401 isl::multi_pw_aff multi_pw_aff::range_product(const isl::multi_aff &multi2) const
13402 {
13403   return this->range_product(isl::multi_pw_aff(multi2));
13404 }
13405 
range_product(const isl::pw_aff & multi2)13406 isl::multi_pw_aff multi_pw_aff::range_product(const isl::pw_aff &multi2) const
13407 {
13408   return this->range_product(isl::multi_pw_aff(multi2));
13409 }
13410 
range_product(const isl::pw_multi_aff & multi2)13411 isl::multi_pw_aff multi_pw_aff::range_product(const isl::pw_multi_aff &multi2) const
13412 {
13413   return this->range_product(isl::multi_pw_aff(multi2));
13414 }
13415 
range_tuple_id()13416 isl::id multi_pw_aff::range_tuple_id() const
13417 {
13418   auto res = isl_multi_pw_aff_get_range_tuple_id(get());
13419   return manage(res);
13420 }
13421 
get_range_tuple_id()13422 isl::id multi_pw_aff::get_range_tuple_id() const
13423 {
13424   return range_tuple_id();
13425 }
13426 
reset_range_tuple_id()13427 isl::multi_pw_aff multi_pw_aff::reset_range_tuple_id() const
13428 {
13429   auto res = isl_multi_pw_aff_reset_range_tuple_id(copy());
13430   return manage(res);
13431 }
13432 
reset_tuple_id(isl::dim type)13433 isl::multi_pw_aff multi_pw_aff::reset_tuple_id(isl::dim type) const
13434 {
13435   auto res = isl_multi_pw_aff_reset_tuple_id(copy(), static_cast<enum isl_dim_type>(type));
13436   return manage(res);
13437 }
13438 
scale(isl::multi_val mv)13439 isl::multi_pw_aff multi_pw_aff::scale(isl::multi_val mv) const
13440 {
13441   auto res = isl_multi_pw_aff_scale_multi_val(copy(), mv.release());
13442   return manage(res);
13443 }
13444 
scale(isl::val v)13445 isl::multi_pw_aff multi_pw_aff::scale(isl::val v) const
13446 {
13447   auto res = isl_multi_pw_aff_scale_val(copy(), v.release());
13448   return manage(res);
13449 }
13450 
scale(long v)13451 isl::multi_pw_aff multi_pw_aff::scale(long v) const
13452 {
13453   return this->scale(isl::val(ctx(), v));
13454 }
13455 
scale_down(isl::multi_val mv)13456 isl::multi_pw_aff multi_pw_aff::scale_down(isl::multi_val mv) const
13457 {
13458   auto res = isl_multi_pw_aff_scale_down_multi_val(copy(), mv.release());
13459   return manage(res);
13460 }
13461 
scale_down(isl::val v)13462 isl::multi_pw_aff multi_pw_aff::scale_down(isl::val v) const
13463 {
13464   auto res = isl_multi_pw_aff_scale_down_val(copy(), v.release());
13465   return manage(res);
13466 }
13467 
scale_down(long v)13468 isl::multi_pw_aff multi_pw_aff::scale_down(long v) const
13469 {
13470   return this->scale_down(isl::val(ctx(), v));
13471 }
13472 
set_at(int pos,isl::pw_aff el)13473 isl::multi_pw_aff multi_pw_aff::set_at(int pos, isl::pw_aff el) const
13474 {
13475   auto res = isl_multi_pw_aff_set_at(copy(), pos, el.release());
13476   return manage(res);
13477 }
13478 
set_at(int pos,const isl::union_pw_aff & el)13479 isl::multi_union_pw_aff multi_pw_aff::set_at(int pos, const isl::union_pw_aff &el) const
13480 {
13481   return isl::multi_union_pw_aff(*this).set_at(pos, el);
13482 }
13483 
set_pw_aff(int pos,isl::pw_aff el)13484 isl::multi_pw_aff multi_pw_aff::set_pw_aff(int pos, isl::pw_aff el) const
13485 {
13486   auto res = isl_multi_pw_aff_set_pw_aff(copy(), pos, el.release());
13487   return manage(res);
13488 }
13489 
set_range_tuple(isl::id id)13490 isl::multi_pw_aff multi_pw_aff::set_range_tuple(isl::id id) const
13491 {
13492   auto res = isl_multi_pw_aff_set_range_tuple_id(copy(), id.release());
13493   return manage(res);
13494 }
13495 
set_range_tuple(const std::string & id)13496 isl::multi_pw_aff multi_pw_aff::set_range_tuple(const std::string &id) const
13497 {
13498   return this->set_range_tuple(isl::id(ctx(), id));
13499 }
13500 
set_union_pw_aff(int pos,const isl::union_pw_aff & el)13501 isl::multi_union_pw_aff multi_pw_aff::set_union_pw_aff(int pos, const isl::union_pw_aff &el) const
13502 {
13503   return isl::multi_union_pw_aff(*this).set_union_pw_aff(pos, el);
13504 }
13505 
size()13506 class size multi_pw_aff::size() const
13507 {
13508   auto res = isl_multi_pw_aff_size(get());
13509   return manage(res);
13510 }
13511 
space()13512 isl::space multi_pw_aff::space() const
13513 {
13514   auto res = isl_multi_pw_aff_get_space(get());
13515   return manage(res);
13516 }
13517 
get_space()13518 isl::space multi_pw_aff::get_space() const
13519 {
13520   return space();
13521 }
13522 
sub(isl::multi_pw_aff multi2)13523 isl::multi_pw_aff multi_pw_aff::sub(isl::multi_pw_aff multi2) const
13524 {
13525   auto res = isl_multi_pw_aff_sub(copy(), multi2.release());
13526   return manage(res);
13527 }
13528 
sub(const isl::multi_union_pw_aff & multi2)13529 isl::multi_union_pw_aff multi_pw_aff::sub(const isl::multi_union_pw_aff &multi2) const
13530 {
13531   return isl::multi_union_pw_aff(*this).sub(multi2);
13532 }
13533 
sub(const isl::aff & multi2)13534 isl::multi_pw_aff multi_pw_aff::sub(const isl::aff &multi2) const
13535 {
13536   return this->sub(isl::multi_pw_aff(multi2));
13537 }
13538 
sub(const isl::multi_aff & multi2)13539 isl::multi_pw_aff multi_pw_aff::sub(const isl::multi_aff &multi2) const
13540 {
13541   return this->sub(isl::multi_pw_aff(multi2));
13542 }
13543 
sub(const isl::pw_aff & multi2)13544 isl::multi_pw_aff multi_pw_aff::sub(const isl::pw_aff &multi2) const
13545 {
13546   return this->sub(isl::multi_pw_aff(multi2));
13547 }
13548 
sub(const isl::pw_multi_aff & multi2)13549 isl::multi_pw_aff multi_pw_aff::sub(const isl::pw_multi_aff &multi2) const
13550 {
13551   return this->sub(isl::multi_pw_aff(multi2));
13552 }
13553 
unbind_params_insert_domain(isl::multi_id domain)13554 isl::multi_pw_aff multi_pw_aff::unbind_params_insert_domain(isl::multi_id domain) const
13555 {
13556   auto res = isl_multi_pw_aff_unbind_params_insert_domain(copy(), domain.release());
13557   return manage(res);
13558 }
13559 
union_add(isl::multi_pw_aff mpa2)13560 isl::multi_pw_aff multi_pw_aff::union_add(isl::multi_pw_aff mpa2) const
13561 {
13562   auto res = isl_multi_pw_aff_union_add(copy(), mpa2.release());
13563   return manage(res);
13564 }
13565 
union_add(const isl::multi_union_pw_aff & mupa2)13566 isl::multi_union_pw_aff multi_pw_aff::union_add(const isl::multi_union_pw_aff &mupa2) const
13567 {
13568   return isl::multi_union_pw_aff(*this).union_add(mupa2);
13569 }
13570 
union_add(const isl::aff & mpa2)13571 isl::multi_pw_aff multi_pw_aff::union_add(const isl::aff &mpa2) const
13572 {
13573   return this->union_add(isl::multi_pw_aff(mpa2));
13574 }
13575 
union_add(const isl::multi_aff & mpa2)13576 isl::multi_pw_aff multi_pw_aff::union_add(const isl::multi_aff &mpa2) const
13577 {
13578   return this->union_add(isl::multi_pw_aff(mpa2));
13579 }
13580 
union_add(const isl::pw_aff & mpa2)13581 isl::multi_pw_aff multi_pw_aff::union_add(const isl::pw_aff &mpa2) const
13582 {
13583   return this->union_add(isl::multi_pw_aff(mpa2));
13584 }
13585 
union_add(const isl::pw_multi_aff & mpa2)13586 isl::multi_pw_aff multi_pw_aff::union_add(const isl::pw_multi_aff &mpa2) const
13587 {
13588   return this->union_add(isl::multi_pw_aff(mpa2));
13589 }
13590 
zero(isl::space space)13591 isl::multi_pw_aff multi_pw_aff::zero(isl::space space)
13592 {
13593   auto res = isl_multi_pw_aff_zero(space.release());
13594   return manage(res);
13595 }
13596 
13597 inline std::ostream &operator<<(std::ostream &os, const multi_pw_aff &obj)
13598 {
13599   char *str = isl_multi_pw_aff_to_str(obj.get());
13600   if (!str) {
13601     os.setstate(std::ios_base::badbit);
13602     return os;
13603   }
13604   os << str;
13605   free(str);
13606   return os;
13607 }
13608 
13609 // implementations for isl::multi_union_pw_aff
manage(__isl_take isl_multi_union_pw_aff * ptr)13610 multi_union_pw_aff manage(__isl_take isl_multi_union_pw_aff *ptr) {
13611   return multi_union_pw_aff(ptr);
13612 }
manage_copy(__isl_keep isl_multi_union_pw_aff * ptr)13613 multi_union_pw_aff manage_copy(__isl_keep isl_multi_union_pw_aff *ptr) {
13614   ptr = isl_multi_union_pw_aff_copy(ptr);
13615   return multi_union_pw_aff(ptr);
13616 }
13617 
multi_union_pw_aff()13618 multi_union_pw_aff::multi_union_pw_aff()
13619     : ptr(nullptr) {}
13620 
multi_union_pw_aff(const multi_union_pw_aff & obj)13621 multi_union_pw_aff::multi_union_pw_aff(const multi_union_pw_aff &obj)
13622     : ptr(nullptr)
13623 {
13624   ptr = obj.copy();
13625 }
13626 
multi_union_pw_aff(__isl_take isl_multi_union_pw_aff * ptr)13627 multi_union_pw_aff::multi_union_pw_aff(__isl_take isl_multi_union_pw_aff *ptr)
13628     : ptr(ptr) {}
13629 
multi_union_pw_aff(isl::multi_pw_aff mpa)13630 multi_union_pw_aff::multi_union_pw_aff(isl::multi_pw_aff mpa)
13631 {
13632   auto res = isl_multi_union_pw_aff_from_multi_pw_aff(mpa.release());
13633   ptr = res;
13634 }
13635 
multi_union_pw_aff(isl::union_pw_aff upa)13636 multi_union_pw_aff::multi_union_pw_aff(isl::union_pw_aff upa)
13637 {
13638   auto res = isl_multi_union_pw_aff_from_union_pw_aff(upa.release());
13639   ptr = res;
13640 }
13641 
multi_union_pw_aff(isl::space space,isl::union_pw_aff_list list)13642 multi_union_pw_aff::multi_union_pw_aff(isl::space space, isl::union_pw_aff_list list)
13643 {
13644   auto res = isl_multi_union_pw_aff_from_union_pw_aff_list(space.release(), list.release());
13645   ptr = res;
13646 }
13647 
multi_union_pw_aff(isl::union_pw_multi_aff upma)13648 multi_union_pw_aff::multi_union_pw_aff(isl::union_pw_multi_aff upma)
13649 {
13650   auto res = isl_multi_union_pw_aff_from_union_pw_multi_aff(upma.release());
13651   ptr = res;
13652 }
13653 
multi_union_pw_aff(isl::ctx ctx,const std::string & str)13654 multi_union_pw_aff::multi_union_pw_aff(isl::ctx ctx, const std::string &str)
13655 {
13656   auto res = isl_multi_union_pw_aff_read_from_str(ctx.release(), str.c_str());
13657   ptr = res;
13658 }
13659 
13660 multi_union_pw_aff &multi_union_pw_aff::operator=(multi_union_pw_aff obj) {
13661   std::swap(this->ptr, obj.ptr);
13662   return *this;
13663 }
13664 
~multi_union_pw_aff()13665 multi_union_pw_aff::~multi_union_pw_aff() {
13666   if (ptr)
13667     isl_multi_union_pw_aff_free(ptr);
13668 }
13669 
copy()13670 __isl_give isl_multi_union_pw_aff *multi_union_pw_aff::copy() const & {
13671   return isl_multi_union_pw_aff_copy(ptr);
13672 }
13673 
get()13674 __isl_keep isl_multi_union_pw_aff *multi_union_pw_aff::get() const {
13675   return ptr;
13676 }
13677 
release()13678 __isl_give isl_multi_union_pw_aff *multi_union_pw_aff::release() {
13679   isl_multi_union_pw_aff *tmp = ptr;
13680   ptr = nullptr;
13681   return tmp;
13682 }
13683 
is_null()13684 bool multi_union_pw_aff::is_null() const {
13685   return ptr == nullptr;
13686 }
13687 
ctx()13688 isl::ctx multi_union_pw_aff::ctx() const {
13689   return isl::ctx(isl_multi_union_pw_aff_get_ctx(ptr));
13690 }
13691 
add(isl::multi_union_pw_aff multi2)13692 isl::multi_union_pw_aff multi_union_pw_aff::add(isl::multi_union_pw_aff multi2) const
13693 {
13694   auto res = isl_multi_union_pw_aff_add(copy(), multi2.release());
13695   return manage(res);
13696 }
13697 
at(int pos)13698 isl::union_pw_aff multi_union_pw_aff::at(int pos) const
13699 {
13700   auto res = isl_multi_union_pw_aff_get_at(get(), pos);
13701   return manage(res);
13702 }
13703 
get_at(int pos)13704 isl::union_pw_aff multi_union_pw_aff::get_at(int pos) const
13705 {
13706   return at(pos);
13707 }
13708 
bind(isl::multi_id tuple)13709 isl::union_set multi_union_pw_aff::bind(isl::multi_id tuple) const
13710 {
13711   auto res = isl_multi_union_pw_aff_bind(copy(), tuple.release());
13712   return manage(res);
13713 }
13714 
coalesce()13715 isl::multi_union_pw_aff multi_union_pw_aff::coalesce() const
13716 {
13717   auto res = isl_multi_union_pw_aff_coalesce(copy());
13718   return manage(res);
13719 }
13720 
dim(isl::dim type)13721 class size multi_union_pw_aff::dim(isl::dim type) const
13722 {
13723   auto res = isl_multi_union_pw_aff_dim(get(), static_cast<enum isl_dim_type>(type));
13724   return manage(res);
13725 }
13726 
domain()13727 isl::union_set multi_union_pw_aff::domain() const
13728 {
13729   auto res = isl_multi_union_pw_aff_domain(copy());
13730   return manage(res);
13731 }
13732 
flat_range_product(isl::multi_union_pw_aff multi2)13733 isl::multi_union_pw_aff multi_union_pw_aff::flat_range_product(isl::multi_union_pw_aff multi2) const
13734 {
13735   auto res = isl_multi_union_pw_aff_flat_range_product(copy(), multi2.release());
13736   return manage(res);
13737 }
13738 
from_union_map(isl::union_map umap)13739 isl::multi_union_pw_aff multi_union_pw_aff::from_union_map(isl::union_map umap)
13740 {
13741   auto res = isl_multi_union_pw_aff_from_union_map(umap.release());
13742   return manage(res);
13743 }
13744 
gist(isl::union_set context)13745 isl::multi_union_pw_aff multi_union_pw_aff::gist(isl::union_set context) const
13746 {
13747   auto res = isl_multi_union_pw_aff_gist(copy(), context.release());
13748   return manage(res);
13749 }
13750 
has_range_tuple_id()13751 boolean multi_union_pw_aff::has_range_tuple_id() const
13752 {
13753   auto res = isl_multi_union_pw_aff_has_range_tuple_id(get());
13754   return manage(res);
13755 }
13756 
intersect_domain(isl::union_set uset)13757 isl::multi_union_pw_aff multi_union_pw_aff::intersect_domain(isl::union_set uset) const
13758 {
13759   auto res = isl_multi_union_pw_aff_intersect_domain(copy(), uset.release());
13760   return manage(res);
13761 }
13762 
intersect_params(isl::set params)13763 isl::multi_union_pw_aff multi_union_pw_aff::intersect_params(isl::set params) const
13764 {
13765   auto res = isl_multi_union_pw_aff_intersect_params(copy(), params.release());
13766   return manage(res);
13767 }
13768 
involves_nan()13769 boolean multi_union_pw_aff::involves_nan() const
13770 {
13771   auto res = isl_multi_union_pw_aff_involves_nan(get());
13772   return manage(res);
13773 }
13774 
list()13775 isl::union_pw_aff_list multi_union_pw_aff::list() const
13776 {
13777   auto res = isl_multi_union_pw_aff_get_list(get());
13778   return manage(res);
13779 }
13780 
get_list()13781 isl::union_pw_aff_list multi_union_pw_aff::get_list() const
13782 {
13783   return list();
13784 }
13785 
neg()13786 isl::multi_union_pw_aff multi_union_pw_aff::neg() const
13787 {
13788   auto res = isl_multi_union_pw_aff_neg(copy());
13789   return manage(res);
13790 }
13791 
plain_is_equal(const isl::multi_union_pw_aff & multi2)13792 boolean multi_union_pw_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
13793 {
13794   auto res = isl_multi_union_pw_aff_plain_is_equal(get(), multi2.get());
13795   return manage(res);
13796 }
13797 
pullback(isl::union_pw_multi_aff upma)13798 isl::multi_union_pw_aff multi_union_pw_aff::pullback(isl::union_pw_multi_aff upma) const
13799 {
13800   auto res = isl_multi_union_pw_aff_pullback_union_pw_multi_aff(copy(), upma.release());
13801   return manage(res);
13802 }
13803 
range_product(isl::multi_union_pw_aff multi2)13804 isl::multi_union_pw_aff multi_union_pw_aff::range_product(isl::multi_union_pw_aff multi2) const
13805 {
13806   auto res = isl_multi_union_pw_aff_range_product(copy(), multi2.release());
13807   return manage(res);
13808 }
13809 
range_tuple_id()13810 isl::id multi_union_pw_aff::range_tuple_id() const
13811 {
13812   auto res = isl_multi_union_pw_aff_get_range_tuple_id(get());
13813   return manage(res);
13814 }
13815 
get_range_tuple_id()13816 isl::id multi_union_pw_aff::get_range_tuple_id() const
13817 {
13818   return range_tuple_id();
13819 }
13820 
reset_range_tuple_id()13821 isl::multi_union_pw_aff multi_union_pw_aff::reset_range_tuple_id() const
13822 {
13823   auto res = isl_multi_union_pw_aff_reset_range_tuple_id(copy());
13824   return manage(res);
13825 }
13826 
reset_tuple_id(isl::dim type)13827 isl::multi_union_pw_aff multi_union_pw_aff::reset_tuple_id(isl::dim type) const
13828 {
13829   auto res = isl_multi_union_pw_aff_reset_tuple_id(copy(), static_cast<enum isl_dim_type>(type));
13830   return manage(res);
13831 }
13832 
scale(isl::multi_val mv)13833 isl::multi_union_pw_aff multi_union_pw_aff::scale(isl::multi_val mv) const
13834 {
13835   auto res = isl_multi_union_pw_aff_scale_multi_val(copy(), mv.release());
13836   return manage(res);
13837 }
13838 
scale(isl::val v)13839 isl::multi_union_pw_aff multi_union_pw_aff::scale(isl::val v) const
13840 {
13841   auto res = isl_multi_union_pw_aff_scale_val(copy(), v.release());
13842   return manage(res);
13843 }
13844 
scale(long v)13845 isl::multi_union_pw_aff multi_union_pw_aff::scale(long v) const
13846 {
13847   return this->scale(isl::val(ctx(), v));
13848 }
13849 
scale_down(isl::multi_val mv)13850 isl::multi_union_pw_aff multi_union_pw_aff::scale_down(isl::multi_val mv) const
13851 {
13852   auto res = isl_multi_union_pw_aff_scale_down_multi_val(copy(), mv.release());
13853   return manage(res);
13854 }
13855 
scale_down(isl::val v)13856 isl::multi_union_pw_aff multi_union_pw_aff::scale_down(isl::val v) const
13857 {
13858   auto res = isl_multi_union_pw_aff_scale_down_val(copy(), v.release());
13859   return manage(res);
13860 }
13861 
scale_down(long v)13862 isl::multi_union_pw_aff multi_union_pw_aff::scale_down(long v) const
13863 {
13864   return this->scale_down(isl::val(ctx(), v));
13865 }
13866 
set_at(int pos,isl::union_pw_aff el)13867 isl::multi_union_pw_aff multi_union_pw_aff::set_at(int pos, isl::union_pw_aff el) const
13868 {
13869   auto res = isl_multi_union_pw_aff_set_at(copy(), pos, el.release());
13870   return manage(res);
13871 }
13872 
set_range_tuple(isl::id id)13873 isl::multi_union_pw_aff multi_union_pw_aff::set_range_tuple(isl::id id) const
13874 {
13875   auto res = isl_multi_union_pw_aff_set_range_tuple_id(copy(), id.release());
13876   return manage(res);
13877 }
13878 
set_range_tuple(const std::string & id)13879 isl::multi_union_pw_aff multi_union_pw_aff::set_range_tuple(const std::string &id) const
13880 {
13881   return this->set_range_tuple(isl::id(ctx(), id));
13882 }
13883 
set_union_pw_aff(int pos,isl::union_pw_aff el)13884 isl::multi_union_pw_aff multi_union_pw_aff::set_union_pw_aff(int pos, isl::union_pw_aff el) const
13885 {
13886   auto res = isl_multi_union_pw_aff_set_union_pw_aff(copy(), pos, el.release());
13887   return manage(res);
13888 }
13889 
size()13890 class size multi_union_pw_aff::size() const
13891 {
13892   auto res = isl_multi_union_pw_aff_size(get());
13893   return manage(res);
13894 }
13895 
space()13896 isl::space multi_union_pw_aff::space() const
13897 {
13898   auto res = isl_multi_union_pw_aff_get_space(get());
13899   return manage(res);
13900 }
13901 
get_space()13902 isl::space multi_union_pw_aff::get_space() const
13903 {
13904   return space();
13905 }
13906 
sub(isl::multi_union_pw_aff multi2)13907 isl::multi_union_pw_aff multi_union_pw_aff::sub(isl::multi_union_pw_aff multi2) const
13908 {
13909   auto res = isl_multi_union_pw_aff_sub(copy(), multi2.release());
13910   return manage(res);
13911 }
13912 
union_add(isl::multi_union_pw_aff mupa2)13913 isl::multi_union_pw_aff multi_union_pw_aff::union_add(isl::multi_union_pw_aff mupa2) const
13914 {
13915   auto res = isl_multi_union_pw_aff_union_add(copy(), mupa2.release());
13916   return manage(res);
13917 }
13918 
zero(isl::space space)13919 isl::multi_union_pw_aff multi_union_pw_aff::zero(isl::space space)
13920 {
13921   auto res = isl_multi_union_pw_aff_zero(space.release());
13922   return manage(res);
13923 }
13924 
13925 inline std::ostream &operator<<(std::ostream &os, const multi_union_pw_aff &obj)
13926 {
13927   char *str = isl_multi_union_pw_aff_to_str(obj.get());
13928   if (!str) {
13929     os.setstate(std::ios_base::badbit);
13930     return os;
13931   }
13932   os << str;
13933   free(str);
13934   return os;
13935 }
13936 
13937 // implementations for isl::multi_val
manage(__isl_take isl_multi_val * ptr)13938 multi_val manage(__isl_take isl_multi_val *ptr) {
13939   return multi_val(ptr);
13940 }
manage_copy(__isl_keep isl_multi_val * ptr)13941 multi_val manage_copy(__isl_keep isl_multi_val *ptr) {
13942   ptr = isl_multi_val_copy(ptr);
13943   return multi_val(ptr);
13944 }
13945 
multi_val()13946 multi_val::multi_val()
13947     : ptr(nullptr) {}
13948 
multi_val(const multi_val & obj)13949 multi_val::multi_val(const multi_val &obj)
13950     : ptr(nullptr)
13951 {
13952   ptr = obj.copy();
13953 }
13954 
multi_val(__isl_take isl_multi_val * ptr)13955 multi_val::multi_val(__isl_take isl_multi_val *ptr)
13956     : ptr(ptr) {}
13957 
multi_val(isl::space space,isl::val_list list)13958 multi_val::multi_val(isl::space space, isl::val_list list)
13959 {
13960   auto res = isl_multi_val_from_val_list(space.release(), list.release());
13961   ptr = res;
13962 }
13963 
multi_val(isl::ctx ctx,const std::string & str)13964 multi_val::multi_val(isl::ctx ctx, const std::string &str)
13965 {
13966   auto res = isl_multi_val_read_from_str(ctx.release(), str.c_str());
13967   ptr = res;
13968 }
13969 
13970 multi_val &multi_val::operator=(multi_val obj) {
13971   std::swap(this->ptr, obj.ptr);
13972   return *this;
13973 }
13974 
~multi_val()13975 multi_val::~multi_val() {
13976   if (ptr)
13977     isl_multi_val_free(ptr);
13978 }
13979 
copy()13980 __isl_give isl_multi_val *multi_val::copy() const & {
13981   return isl_multi_val_copy(ptr);
13982 }
13983 
get()13984 __isl_keep isl_multi_val *multi_val::get() const {
13985   return ptr;
13986 }
13987 
release()13988 __isl_give isl_multi_val *multi_val::release() {
13989   isl_multi_val *tmp = ptr;
13990   ptr = nullptr;
13991   return tmp;
13992 }
13993 
is_null()13994 bool multi_val::is_null() const {
13995   return ptr == nullptr;
13996 }
13997 
ctx()13998 isl::ctx multi_val::ctx() const {
13999   return isl::ctx(isl_multi_val_get_ctx(ptr));
14000 }
14001 
add(isl::multi_val multi2)14002 isl::multi_val multi_val::add(isl::multi_val multi2) const
14003 {
14004   auto res = isl_multi_val_add(copy(), multi2.release());
14005   return manage(res);
14006 }
14007 
add(isl::val v)14008 isl::multi_val multi_val::add(isl::val v) const
14009 {
14010   auto res = isl_multi_val_add_val(copy(), v.release());
14011   return manage(res);
14012 }
14013 
add(long v)14014 isl::multi_val multi_val::add(long v) const
14015 {
14016   return this->add(isl::val(ctx(), v));
14017 }
14018 
at(int pos)14019 isl::val multi_val::at(int pos) const
14020 {
14021   auto res = isl_multi_val_get_at(get(), pos);
14022   return manage(res);
14023 }
14024 
get_at(int pos)14025 isl::val multi_val::get_at(int pos) const
14026 {
14027   return at(pos);
14028 }
14029 
dim(isl::dim type)14030 class size multi_val::dim(isl::dim type) const
14031 {
14032   auto res = isl_multi_val_dim(get(), static_cast<enum isl_dim_type>(type));
14033   return manage(res);
14034 }
14035 
flat_range_product(isl::multi_val multi2)14036 isl::multi_val multi_val::flat_range_product(isl::multi_val multi2) const
14037 {
14038   auto res = isl_multi_val_flat_range_product(copy(), multi2.release());
14039   return manage(res);
14040 }
14041 
has_range_tuple_id()14042 boolean multi_val::has_range_tuple_id() const
14043 {
14044   auto res = isl_multi_val_has_range_tuple_id(get());
14045   return manage(res);
14046 }
14047 
involves_nan()14048 boolean multi_val::involves_nan() const
14049 {
14050   auto res = isl_multi_val_involves_nan(get());
14051   return manage(res);
14052 }
14053 
list()14054 isl::val_list multi_val::list() const
14055 {
14056   auto res = isl_multi_val_get_list(get());
14057   return manage(res);
14058 }
14059 
get_list()14060 isl::val_list multi_val::get_list() const
14061 {
14062   return list();
14063 }
14064 
max(isl::multi_val multi2)14065 isl::multi_val multi_val::max(isl::multi_val multi2) const
14066 {
14067   auto res = isl_multi_val_max(copy(), multi2.release());
14068   return manage(res);
14069 }
14070 
min(isl::multi_val multi2)14071 isl::multi_val multi_val::min(isl::multi_val multi2) const
14072 {
14073   auto res = isl_multi_val_min(copy(), multi2.release());
14074   return manage(res);
14075 }
14076 
neg()14077 isl::multi_val multi_val::neg() const
14078 {
14079   auto res = isl_multi_val_neg(copy());
14080   return manage(res);
14081 }
14082 
plain_is_equal(const isl::multi_val & multi2)14083 boolean multi_val::plain_is_equal(const isl::multi_val &multi2) const
14084 {
14085   auto res = isl_multi_val_plain_is_equal(get(), multi2.get());
14086   return manage(res);
14087 }
14088 
product(isl::multi_val multi2)14089 isl::multi_val multi_val::product(isl::multi_val multi2) const
14090 {
14091   auto res = isl_multi_val_product(copy(), multi2.release());
14092   return manage(res);
14093 }
14094 
range_product(isl::multi_val multi2)14095 isl::multi_val multi_val::range_product(isl::multi_val multi2) const
14096 {
14097   auto res = isl_multi_val_range_product(copy(), multi2.release());
14098   return manage(res);
14099 }
14100 
range_tuple_id()14101 isl::id multi_val::range_tuple_id() const
14102 {
14103   auto res = isl_multi_val_get_range_tuple_id(get());
14104   return manage(res);
14105 }
14106 
get_range_tuple_id()14107 isl::id multi_val::get_range_tuple_id() const
14108 {
14109   return range_tuple_id();
14110 }
14111 
reset_range_tuple_id()14112 isl::multi_val multi_val::reset_range_tuple_id() const
14113 {
14114   auto res = isl_multi_val_reset_range_tuple_id(copy());
14115   return manage(res);
14116 }
14117 
reset_tuple_id(isl::dim type)14118 isl::multi_val multi_val::reset_tuple_id(isl::dim type) const
14119 {
14120   auto res = isl_multi_val_reset_tuple_id(copy(), static_cast<enum isl_dim_type>(type));
14121   return manage(res);
14122 }
14123 
scale(isl::multi_val mv)14124 isl::multi_val multi_val::scale(isl::multi_val mv) const
14125 {
14126   auto res = isl_multi_val_scale_multi_val(copy(), mv.release());
14127   return manage(res);
14128 }
14129 
scale(isl::val v)14130 isl::multi_val multi_val::scale(isl::val v) const
14131 {
14132   auto res = isl_multi_val_scale_val(copy(), v.release());
14133   return manage(res);
14134 }
14135 
scale(long v)14136 isl::multi_val multi_val::scale(long v) const
14137 {
14138   return this->scale(isl::val(ctx(), v));
14139 }
14140 
scale_down(isl::multi_val mv)14141 isl::multi_val multi_val::scale_down(isl::multi_val mv) const
14142 {
14143   auto res = isl_multi_val_scale_down_multi_val(copy(), mv.release());
14144   return manage(res);
14145 }
14146 
scale_down(isl::val v)14147 isl::multi_val multi_val::scale_down(isl::val v) const
14148 {
14149   auto res = isl_multi_val_scale_down_val(copy(), v.release());
14150   return manage(res);
14151 }
14152 
scale_down(long v)14153 isl::multi_val multi_val::scale_down(long v) const
14154 {
14155   return this->scale_down(isl::val(ctx(), v));
14156 }
14157 
set_at(int pos,isl::val el)14158 isl::multi_val multi_val::set_at(int pos, isl::val el) const
14159 {
14160   auto res = isl_multi_val_set_at(copy(), pos, el.release());
14161   return manage(res);
14162 }
14163 
set_at(int pos,long el)14164 isl::multi_val multi_val::set_at(int pos, long el) const
14165 {
14166   return this->set_at(pos, isl::val(ctx(), el));
14167 }
14168 
set_range_tuple(isl::id id)14169 isl::multi_val multi_val::set_range_tuple(isl::id id) const
14170 {
14171   auto res = isl_multi_val_set_range_tuple_id(copy(), id.release());
14172   return manage(res);
14173 }
14174 
set_range_tuple(const std::string & id)14175 isl::multi_val multi_val::set_range_tuple(const std::string &id) const
14176 {
14177   return this->set_range_tuple(isl::id(ctx(), id));
14178 }
14179 
set_val(int pos,isl::val el)14180 isl::multi_val multi_val::set_val(int pos, isl::val el) const
14181 {
14182   auto res = isl_multi_val_set_val(copy(), pos, el.release());
14183   return manage(res);
14184 }
14185 
set_val(int pos,long el)14186 isl::multi_val multi_val::set_val(int pos, long el) const
14187 {
14188   return this->set_val(pos, isl::val(ctx(), el));
14189 }
14190 
size()14191 class size multi_val::size() const
14192 {
14193   auto res = isl_multi_val_size(get());
14194   return manage(res);
14195 }
14196 
space()14197 isl::space multi_val::space() const
14198 {
14199   auto res = isl_multi_val_get_space(get());
14200   return manage(res);
14201 }
14202 
get_space()14203 isl::space multi_val::get_space() const
14204 {
14205   return space();
14206 }
14207 
sub(isl::multi_val multi2)14208 isl::multi_val multi_val::sub(isl::multi_val multi2) const
14209 {
14210   auto res = isl_multi_val_sub(copy(), multi2.release());
14211   return manage(res);
14212 }
14213 
zero(isl::space space)14214 isl::multi_val multi_val::zero(isl::space space)
14215 {
14216   auto res = isl_multi_val_zero(space.release());
14217   return manage(res);
14218 }
14219 
14220 inline std::ostream &operator<<(std::ostream &os, const multi_val &obj)
14221 {
14222   char *str = isl_multi_val_to_str(obj.get());
14223   if (!str) {
14224     os.setstate(std::ios_base::badbit);
14225     return os;
14226   }
14227   os << str;
14228   free(str);
14229   return os;
14230 }
14231 
14232 // implementations for isl::point
manage(__isl_take isl_point * ptr)14233 point manage(__isl_take isl_point *ptr) {
14234   return point(ptr);
14235 }
manage_copy(__isl_keep isl_point * ptr)14236 point manage_copy(__isl_keep isl_point *ptr) {
14237   ptr = isl_point_copy(ptr);
14238   return point(ptr);
14239 }
14240 
point()14241 point::point()
14242     : ptr(nullptr) {}
14243 
point(const point & obj)14244 point::point(const point &obj)
14245     : ptr(nullptr)
14246 {
14247   ptr = obj.copy();
14248 }
14249 
point(__isl_take isl_point * ptr)14250 point::point(__isl_take isl_point *ptr)
14251     : ptr(ptr) {}
14252 
point(isl::space space)14253 point::point(isl::space space)
14254 {
14255   auto res = isl_point_zero(space.release());
14256   ptr = res;
14257 }
14258 
14259 point &point::operator=(point obj) {
14260   std::swap(this->ptr, obj.ptr);
14261   return *this;
14262 }
14263 
~point()14264 point::~point() {
14265   if (ptr)
14266     isl_point_free(ptr);
14267 }
14268 
copy()14269 __isl_give isl_point *point::copy() const & {
14270   return isl_point_copy(ptr);
14271 }
14272 
get()14273 __isl_keep isl_point *point::get() const {
14274   return ptr;
14275 }
14276 
release()14277 __isl_give isl_point *point::release() {
14278   isl_point *tmp = ptr;
14279   ptr = nullptr;
14280   return tmp;
14281 }
14282 
is_null()14283 bool point::is_null() const {
14284   return ptr == nullptr;
14285 }
14286 
ctx()14287 isl::ctx point::ctx() const {
14288   return isl::ctx(isl_point_get_ctx(ptr));
14289 }
14290 
add_constraint(const isl::constraint & constraint)14291 isl::set point::add_constraint(const isl::constraint &constraint) const
14292 {
14293   return isl::basic_set(*this).add_constraint(constraint);
14294 }
14295 
add_dims(isl::dim type,unsigned int n)14296 isl::set point::add_dims(isl::dim type, unsigned int n) const
14297 {
14298   return isl::basic_set(*this).add_dims(type, n);
14299 }
14300 
affine_hull()14301 isl::basic_set point::affine_hull() const
14302 {
14303   return isl::basic_set(*this).affine_hull();
14304 }
14305 
align_params(const isl::space & model)14306 isl::set point::align_params(const isl::space &model) const
14307 {
14308   return isl::basic_set(*this).align_params(model);
14309 }
14310 
apply(const isl::basic_map & bmap)14311 isl::basic_set point::apply(const isl::basic_map &bmap) const
14312 {
14313   return isl::basic_set(*this).apply(bmap);
14314 }
14315 
apply(const isl::map & map)14316 isl::set point::apply(const isl::map &map) const
14317 {
14318   return isl::basic_set(*this).apply(map);
14319 }
14320 
apply(const isl::union_map & umap)14321 isl::union_set point::apply(const isl::union_map &umap) const
14322 {
14323   return isl::basic_set(*this).apply(umap);
14324 }
14325 
as_pw_multi_aff()14326 isl::pw_multi_aff point::as_pw_multi_aff() const
14327 {
14328   return isl::basic_set(*this).as_pw_multi_aff();
14329 }
14330 
as_set()14331 isl::set point::as_set() const
14332 {
14333   return isl::basic_set(*this).as_set();
14334 }
14335 
basic_set_list()14336 isl::basic_set_list point::basic_set_list() const
14337 {
14338   return isl::basic_set(*this).basic_set_list();
14339 }
14340 
bind(const isl::multi_id & tuple)14341 isl::set point::bind(const isl::multi_id &tuple) const
14342 {
14343   return isl::basic_set(*this).bind(tuple);
14344 }
14345 
coalesce()14346 isl::set point::coalesce() const
14347 {
14348   return isl::basic_set(*this).coalesce();
14349 }
14350 
complement()14351 isl::set point::complement() const
14352 {
14353   return isl::basic_set(*this).complement();
14354 }
14355 
compute_divs()14356 isl::union_set point::compute_divs() const
14357 {
14358   return isl::basic_set(*this).compute_divs();
14359 }
14360 
contains(const isl::space & space)14361 boolean point::contains(const isl::space &space) const
14362 {
14363   return isl::basic_set(*this).contains(space);
14364 }
14365 
convex_hull()14366 isl::basic_set point::convex_hull() const
14367 {
14368   return isl::basic_set(*this).convex_hull();
14369 }
14370 
coordinate_val(isl::dim type,int pos)14371 isl::val point::coordinate_val(isl::dim type, int pos) const
14372 {
14373   auto res = isl_point_get_coordinate_val(get(), static_cast<enum isl_dim_type>(type), pos);
14374   return manage(res);
14375 }
14376 
get_coordinate_val(isl::dim type,int pos)14377 isl::val point::get_coordinate_val(isl::dim type, int pos) const
14378 {
14379   return coordinate_val(type, pos);
14380 }
14381 
detect_equalities()14382 isl::basic_set point::detect_equalities() const
14383 {
14384   return isl::basic_set(*this).detect_equalities();
14385 }
14386 
dim(isl::dim type)14387 class size point::dim(isl::dim type) const
14388 {
14389   return isl::basic_set(*this).dim(type);
14390 }
14391 
dim_has_any_lower_bound(isl::dim type,unsigned int pos)14392 boolean point::dim_has_any_lower_bound(isl::dim type, unsigned int pos) const
14393 {
14394   return isl::basic_set(*this).dim_has_any_lower_bound(type, pos);
14395 }
14396 
dim_id(isl::dim type,unsigned int pos)14397 isl::id point::dim_id(isl::dim type, unsigned int pos) const
14398 {
14399   return isl::basic_set(*this).dim_id(type, pos);
14400 }
14401 
dim_max(int pos)14402 isl::pw_aff point::dim_max(int pos) const
14403 {
14404   return isl::basic_set(*this).dim_max(pos);
14405 }
14406 
dim_max_val(int pos)14407 isl::val point::dim_max_val(int pos) const
14408 {
14409   return isl::basic_set(*this).dim_max_val(pos);
14410 }
14411 
dim_min(int pos)14412 isl::pw_aff point::dim_min(int pos) const
14413 {
14414   return isl::basic_set(*this).dim_min(pos);
14415 }
14416 
dim_min_val(int pos)14417 isl::val point::dim_min_val(int pos) const
14418 {
14419   return isl::basic_set(*this).dim_min_val(pos);
14420 }
14421 
dim_name(isl::dim type,unsigned int pos)14422 std::string point::dim_name(isl::dim type, unsigned int pos) const
14423 {
14424   return isl::basic_set(*this).dim_name(type, pos);
14425 }
14426 
div(int pos)14427 isl::aff point::div(int pos) const
14428 {
14429   return isl::basic_set(*this).div(pos);
14430 }
14431 
drop_constraints_involving_dims(isl::dim type,unsigned int first,unsigned int n)14432 isl::set point::drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const
14433 {
14434   return isl::basic_set(*this).drop_constraints_involving_dims(type, first, n);
14435 }
14436 
eliminate(isl::dim type,unsigned int first,unsigned int n)14437 isl::set point::eliminate(isl::dim type, unsigned int first, unsigned int n) const
14438 {
14439   return isl::basic_set(*this).eliminate(type, first, n);
14440 }
14441 
every_set(const std::function<boolean (isl::set)> & test)14442 boolean point::every_set(const std::function<boolean(isl::set)> &test) const
14443 {
14444   return isl::basic_set(*this).every_set(test);
14445 }
14446 
extract_set(const isl::space & space)14447 isl::set point::extract_set(const isl::space &space) const
14448 {
14449   return isl::basic_set(*this).extract_set(space);
14450 }
14451 
find_dim_by_id(isl::dim type,const isl::id & id)14452 int point::find_dim_by_id(isl::dim type, const isl::id &id) const
14453 {
14454   return isl::basic_set(*this).find_dim_by_id(type, id);
14455 }
14456 
find_dim_by_id(isl::dim type,const std::string & id)14457 int point::find_dim_by_id(isl::dim type, const std::string &id) const
14458 {
14459   return this->find_dim_by_id(type, isl::id(ctx(), id));
14460 }
14461 
fix_si(isl::dim type,unsigned int pos,int value)14462 isl::basic_set point::fix_si(isl::dim type, unsigned int pos, int value) const
14463 {
14464   return isl::basic_set(*this).fix_si(type, pos, value);
14465 }
14466 
fix_val(isl::dim type,unsigned int pos,const isl::val & v)14467 isl::basic_set point::fix_val(isl::dim type, unsigned int pos, const isl::val &v) const
14468 {
14469   return isl::basic_set(*this).fix_val(type, pos, v);
14470 }
14471 
fix_val(isl::dim type,unsigned int pos,long v)14472 isl::basic_set point::fix_val(isl::dim type, unsigned int pos, long v) const
14473 {
14474   return this->fix_val(type, pos, isl::val(ctx(), v));
14475 }
14476 
flatten()14477 isl::basic_set point::flatten() const
14478 {
14479   return isl::basic_set(*this).flatten();
14480 }
14481 
foreach_basic_set(const std::function<stat (isl::basic_set)> & fn)14482 stat point::foreach_basic_set(const std::function<stat(isl::basic_set)> &fn) const
14483 {
14484   return isl::basic_set(*this).foreach_basic_set(fn);
14485 }
14486 
foreach_point(const std::function<stat (isl::point)> & fn)14487 stat point::foreach_point(const std::function<stat(isl::point)> &fn) const
14488 {
14489   return isl::basic_set(*this).foreach_point(fn);
14490 }
14491 
foreach_set(const std::function<stat (isl::set)> & fn)14492 stat point::foreach_set(const std::function<stat(isl::set)> &fn) const
14493 {
14494   return isl::basic_set(*this).foreach_set(fn);
14495 }
14496 
gist(const isl::basic_set & context)14497 isl::basic_set point::gist(const isl::basic_set &context) const
14498 {
14499   return isl::basic_set(*this).gist(context);
14500 }
14501 
gist(const isl::set & context)14502 isl::set point::gist(const isl::set &context) const
14503 {
14504   return isl::basic_set(*this).gist(context);
14505 }
14506 
gist(const isl::union_set & context)14507 isl::union_set point::gist(const isl::union_set &context) const
14508 {
14509   return isl::basic_set(*this).gist(context);
14510 }
14511 
gist_params(const isl::set & context)14512 isl::set point::gist_params(const isl::set &context) const
14513 {
14514   return isl::basic_set(*this).gist_params(context);
14515 }
14516 
has_equal_space(const isl::set & set2)14517 boolean point::has_equal_space(const isl::set &set2) const
14518 {
14519   return isl::basic_set(*this).has_equal_space(set2);
14520 }
14521 
identity()14522 isl::map point::identity() const
14523 {
14524   return isl::basic_set(*this).identity();
14525 }
14526 
identity_union_pw_multi_aff()14527 isl::union_pw_multi_aff point::identity_union_pw_multi_aff() const
14528 {
14529   return isl::basic_set(*this).identity_union_pw_multi_aff();
14530 }
14531 
indicator_function()14532 isl::pw_aff point::indicator_function() const
14533 {
14534   return isl::basic_set(*this).indicator_function();
14535 }
14536 
insert_dims(isl::dim type,unsigned int pos,unsigned int n)14537 isl::set point::insert_dims(isl::dim type, unsigned int pos, unsigned int n) const
14538 {
14539   return isl::basic_set(*this).insert_dims(type, pos, n);
14540 }
14541 
insert_domain(const isl::space & domain)14542 isl::map point::insert_domain(const isl::space &domain) const
14543 {
14544   return isl::basic_set(*this).insert_domain(domain);
14545 }
14546 
intersect(const isl::basic_set & bset2)14547 isl::basic_set point::intersect(const isl::basic_set &bset2) const
14548 {
14549   return isl::basic_set(*this).intersect(bset2);
14550 }
14551 
intersect(const isl::set & set2)14552 isl::set point::intersect(const isl::set &set2) const
14553 {
14554   return isl::basic_set(*this).intersect(set2);
14555 }
14556 
intersect(const isl::union_set & uset2)14557 isl::union_set point::intersect(const isl::union_set &uset2) const
14558 {
14559   return isl::basic_set(*this).intersect(uset2);
14560 }
14561 
intersect_params(const isl::basic_set & bset2)14562 isl::basic_set point::intersect_params(const isl::basic_set &bset2) const
14563 {
14564   return isl::basic_set(*this).intersect_params(bset2);
14565 }
14566 
intersect_params(const isl::set & params)14567 isl::set point::intersect_params(const isl::set &params) const
14568 {
14569   return isl::basic_set(*this).intersect_params(params);
14570 }
14571 
involves_dims(isl::dim type,unsigned int first,unsigned int n)14572 boolean point::involves_dims(isl::dim type, unsigned int first, unsigned int n) const
14573 {
14574   return isl::basic_set(*this).involves_dims(type, first, n);
14575 }
14576 
involves_locals()14577 boolean point::involves_locals() const
14578 {
14579   return isl::basic_set(*this).involves_locals();
14580 }
14581 
is_bounded()14582 boolean point::is_bounded() const
14583 {
14584   return isl::basic_set(*this).is_bounded();
14585 }
14586 
is_disjoint(const isl::set & set2)14587 boolean point::is_disjoint(const isl::set &set2) const
14588 {
14589   return isl::basic_set(*this).is_disjoint(set2);
14590 }
14591 
is_disjoint(const isl::union_set & uset2)14592 boolean point::is_disjoint(const isl::union_set &uset2) const
14593 {
14594   return isl::basic_set(*this).is_disjoint(uset2);
14595 }
14596 
is_empty()14597 boolean point::is_empty() const
14598 {
14599   return isl::basic_set(*this).is_empty();
14600 }
14601 
is_equal(const isl::basic_set & bset2)14602 boolean point::is_equal(const isl::basic_set &bset2) const
14603 {
14604   return isl::basic_set(*this).is_equal(bset2);
14605 }
14606 
is_equal(const isl::set & set2)14607 boolean point::is_equal(const isl::set &set2) const
14608 {
14609   return isl::basic_set(*this).is_equal(set2);
14610 }
14611 
is_equal(const isl::union_set & uset2)14612 boolean point::is_equal(const isl::union_set &uset2) const
14613 {
14614   return isl::basic_set(*this).is_equal(uset2);
14615 }
14616 
is_params()14617 boolean point::is_params() const
14618 {
14619   return isl::basic_set(*this).is_params();
14620 }
14621 
is_singleton()14622 boolean point::is_singleton() const
14623 {
14624   return isl::basic_set(*this).is_singleton();
14625 }
14626 
is_strict_subset(const isl::set & set2)14627 boolean point::is_strict_subset(const isl::set &set2) const
14628 {
14629   return isl::basic_set(*this).is_strict_subset(set2);
14630 }
14631 
is_strict_subset(const isl::union_set & uset2)14632 boolean point::is_strict_subset(const isl::union_set &uset2) const
14633 {
14634   return isl::basic_set(*this).is_strict_subset(uset2);
14635 }
14636 
is_subset(const isl::basic_set & bset2)14637 boolean point::is_subset(const isl::basic_set &bset2) const
14638 {
14639   return isl::basic_set(*this).is_subset(bset2);
14640 }
14641 
is_subset(const isl::set & set2)14642 boolean point::is_subset(const isl::set &set2) const
14643 {
14644   return isl::basic_set(*this).is_subset(set2);
14645 }
14646 
is_subset(const isl::union_set & uset2)14647 boolean point::is_subset(const isl::union_set &uset2) const
14648 {
14649   return isl::basic_set(*this).is_subset(uset2);
14650 }
14651 
is_wrapping()14652 boolean point::is_wrapping() const
14653 {
14654   return isl::basic_set(*this).is_wrapping();
14655 }
14656 
isa_set()14657 boolean point::isa_set() const
14658 {
14659   return isl::basic_set(*this).isa_set();
14660 }
14661 
lexmax()14662 isl::set point::lexmax() const
14663 {
14664   return isl::basic_set(*this).lexmax();
14665 }
14666 
lexmax_pw_multi_aff()14667 isl::pw_multi_aff point::lexmax_pw_multi_aff() const
14668 {
14669   return isl::basic_set(*this).lexmax_pw_multi_aff();
14670 }
14671 
lexmin()14672 isl::set point::lexmin() const
14673 {
14674   return isl::basic_set(*this).lexmin();
14675 }
14676 
lexmin_pw_multi_aff()14677 isl::pw_multi_aff point::lexmin_pw_multi_aff() const
14678 {
14679   return isl::basic_set(*this).lexmin_pw_multi_aff();
14680 }
14681 
lower_bound(const isl::multi_pw_aff & lower)14682 isl::set point::lower_bound(const isl::multi_pw_aff &lower) const
14683 {
14684   return isl::basic_set(*this).lower_bound(lower);
14685 }
14686 
lower_bound(const isl::multi_val & lower)14687 isl::set point::lower_bound(const isl::multi_val &lower) const
14688 {
14689   return isl::basic_set(*this).lower_bound(lower);
14690 }
14691 
lower_bound_si(isl::dim type,unsigned int pos,int value)14692 isl::set point::lower_bound_si(isl::dim type, unsigned int pos, int value) const
14693 {
14694   return isl::basic_set(*this).lower_bound_si(type, pos, value);
14695 }
14696 
lower_bound_val(isl::dim type,unsigned int pos,const isl::val & value)14697 isl::set point::lower_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const
14698 {
14699   return isl::basic_set(*this).lower_bound_val(type, pos, value);
14700 }
14701 
lower_bound_val(isl::dim type,unsigned int pos,long value)14702 isl::set point::lower_bound_val(isl::dim type, unsigned int pos, long value) const
14703 {
14704   return this->lower_bound_val(type, pos, isl::val(ctx(), value));
14705 }
14706 
max_multi_pw_aff()14707 isl::multi_pw_aff point::max_multi_pw_aff() const
14708 {
14709   return isl::basic_set(*this).max_multi_pw_aff();
14710 }
14711 
max_val(const isl::aff & obj)14712 isl::val point::max_val(const isl::aff &obj) const
14713 {
14714   return isl::basic_set(*this).max_val(obj);
14715 }
14716 
min_multi_pw_aff()14717 isl::multi_pw_aff point::min_multi_pw_aff() const
14718 {
14719   return isl::basic_set(*this).min_multi_pw_aff();
14720 }
14721 
min_val(const isl::aff & obj)14722 isl::val point::min_val(const isl::aff &obj) const
14723 {
14724   return isl::basic_set(*this).min_val(obj);
14725 }
14726 
multi_val()14727 isl::multi_val point::multi_val() const
14728 {
14729   auto res = isl_point_get_multi_val(get());
14730   return manage(res);
14731 }
14732 
get_multi_val()14733 isl::multi_val point::get_multi_val() const
14734 {
14735   return multi_val();
14736 }
14737 
n_basic_set()14738 class size point::n_basic_set() const
14739 {
14740   return isl::basic_set(*this).n_basic_set();
14741 }
14742 
params()14743 isl::basic_set point::params() const
14744 {
14745   return isl::basic_set(*this).params();
14746 }
14747 
plain_get_val_if_fixed(isl::dim type,unsigned int pos)14748 isl::val point::plain_get_val_if_fixed(isl::dim type, unsigned int pos) const
14749 {
14750   return isl::basic_set(*this).plain_get_val_if_fixed(type, pos);
14751 }
14752 
plain_multi_val_if_fixed()14753 isl::multi_val point::plain_multi_val_if_fixed() const
14754 {
14755   return isl::basic_set(*this).plain_multi_val_if_fixed();
14756 }
14757 
polyhedral_hull()14758 isl::basic_set point::polyhedral_hull() const
14759 {
14760   return isl::basic_set(*this).polyhedral_hull();
14761 }
14762 
preimage(const isl::multi_aff & ma)14763 isl::set point::preimage(const isl::multi_aff &ma) const
14764 {
14765   return isl::basic_set(*this).preimage(ma);
14766 }
14767 
preimage(const isl::multi_pw_aff & mpa)14768 isl::set point::preimage(const isl::multi_pw_aff &mpa) const
14769 {
14770   return isl::basic_set(*this).preimage(mpa);
14771 }
14772 
preimage(const isl::pw_multi_aff & pma)14773 isl::set point::preimage(const isl::pw_multi_aff &pma) const
14774 {
14775   return isl::basic_set(*this).preimage(pma);
14776 }
14777 
preimage(const isl::union_pw_multi_aff & upma)14778 isl::union_set point::preimage(const isl::union_pw_multi_aff &upma) const
14779 {
14780   return isl::basic_set(*this).preimage(upma);
14781 }
14782 
product(const isl::set & set2)14783 isl::set point::product(const isl::set &set2) const
14784 {
14785   return isl::basic_set(*this).product(set2);
14786 }
14787 
project_out(isl::dim type,unsigned int first,unsigned int n)14788 isl::basic_set point::project_out(isl::dim type, unsigned int first, unsigned int n) const
14789 {
14790   return isl::basic_set(*this).project_out(type, first, n);
14791 }
14792 
project_out_all_params()14793 isl::set point::project_out_all_params() const
14794 {
14795   return isl::basic_set(*this).project_out_all_params();
14796 }
14797 
project_out_param(const isl::id & id)14798 isl::set point::project_out_param(const isl::id &id) const
14799 {
14800   return isl::basic_set(*this).project_out_param(id);
14801 }
14802 
project_out_param(const std::string & id)14803 isl::set point::project_out_param(const std::string &id) const
14804 {
14805   return this->project_out_param(isl::id(ctx(), id));
14806 }
14807 
project_out_param(const isl::id_list & list)14808 isl::set point::project_out_param(const isl::id_list &list) const
14809 {
14810   return isl::basic_set(*this).project_out_param(list);
14811 }
14812 
pw_multi_aff_on_domain(const isl::multi_val & mv)14813 isl::pw_multi_aff point::pw_multi_aff_on_domain(const isl::multi_val &mv) const
14814 {
14815   return isl::basic_set(*this).pw_multi_aff_on_domain(mv);
14816 }
14817 
remove_dims(isl::dim type,unsigned int first,unsigned int n)14818 isl::set point::remove_dims(isl::dim type, unsigned int first, unsigned int n) const
14819 {
14820   return isl::basic_set(*this).remove_dims(type, first, n);
14821 }
14822 
remove_divs()14823 isl::set point::remove_divs() const
14824 {
14825   return isl::basic_set(*this).remove_divs();
14826 }
14827 
remove_redundancies()14828 isl::set point::remove_redundancies() const
14829 {
14830   return isl::basic_set(*this).remove_redundancies();
14831 }
14832 
reset_tuple_id()14833 isl::set point::reset_tuple_id() const
14834 {
14835   return isl::basic_set(*this).reset_tuple_id();
14836 }
14837 
sample()14838 isl::basic_set point::sample() const
14839 {
14840   return isl::basic_set(*this).sample();
14841 }
14842 
sample_point()14843 isl::point point::sample_point() const
14844 {
14845   return isl::basic_set(*this).sample_point();
14846 }
14847 
set_dim_id(isl::dim type,unsigned int pos,const isl::id & id)14848 isl::set point::set_dim_id(isl::dim type, unsigned int pos, const isl::id &id) const
14849 {
14850   return isl::basic_set(*this).set_dim_id(type, pos, id);
14851 }
14852 
set_dim_id(isl::dim type,unsigned int pos,const std::string & id)14853 isl::set point::set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const
14854 {
14855   return this->set_dim_id(type, pos, isl::id(ctx(), id));
14856 }
14857 
set_list()14858 isl::set_list point::set_list() const
14859 {
14860   return isl::basic_set(*this).set_list();
14861 }
14862 
set_tuple_id(const isl::id & id)14863 isl::set point::set_tuple_id(const isl::id &id) const
14864 {
14865   return isl::basic_set(*this).set_tuple_id(id);
14866 }
14867 
set_tuple_id(const std::string & id)14868 isl::set point::set_tuple_id(const std::string &id) const
14869 {
14870   return this->set_tuple_id(isl::id(ctx(), id));
14871 }
14872 
simple_fixed_box_hull()14873 isl::fixed_box point::simple_fixed_box_hull() const
14874 {
14875   return isl::basic_set(*this).simple_fixed_box_hull();
14876 }
14877 
simple_hull()14878 isl::basic_set point::simple_hull() const
14879 {
14880   return isl::basic_set(*this).simple_hull();
14881 }
14882 
space()14883 isl::space point::space() const
14884 {
14885   return isl::basic_set(*this).space();
14886 }
14887 
stride(int pos)14888 isl::val point::stride(int pos) const
14889 {
14890   return isl::basic_set(*this).stride(pos);
14891 }
14892 
subtract(const isl::set & set2)14893 isl::set point::subtract(const isl::set &set2) const
14894 {
14895   return isl::basic_set(*this).subtract(set2);
14896 }
14897 
subtract(const isl::union_set & uset2)14898 isl::union_set point::subtract(const isl::union_set &uset2) const
14899 {
14900   return isl::basic_set(*this).subtract(uset2);
14901 }
14902 
to_list()14903 isl::basic_set_list point::to_list() const
14904 {
14905   return isl::basic_set(*this).to_list();
14906 }
14907 
to_set()14908 isl::set point::to_set() const
14909 {
14910   auto res = isl_point_to_set(copy());
14911   return manage(res);
14912 }
14913 
to_union_set()14914 isl::union_set point::to_union_set() const
14915 {
14916   return isl::basic_set(*this).to_union_set();
14917 }
14918 
translation()14919 isl::map point::translation() const
14920 {
14921   return isl::basic_set(*this).translation();
14922 }
14923 
tuple_dim()14924 class size point::tuple_dim() const
14925 {
14926   return isl::basic_set(*this).tuple_dim();
14927 }
14928 
tuple_id()14929 isl::id point::tuple_id() const
14930 {
14931   return isl::basic_set(*this).tuple_id();
14932 }
14933 
tuple_name()14934 std::string point::tuple_name() const
14935 {
14936   return isl::basic_set(*this).tuple_name();
14937 }
14938 
unbind_params(const isl::multi_id & tuple)14939 isl::set point::unbind_params(const isl::multi_id &tuple) const
14940 {
14941   return isl::basic_set(*this).unbind_params(tuple);
14942 }
14943 
unbind_params_insert_domain(const isl::multi_id & domain)14944 isl::map point::unbind_params_insert_domain(const isl::multi_id &domain) const
14945 {
14946   return isl::basic_set(*this).unbind_params_insert_domain(domain);
14947 }
14948 
unite(const isl::basic_set & bset2)14949 isl::set point::unite(const isl::basic_set &bset2) const
14950 {
14951   return isl::basic_set(*this).unite(bset2);
14952 }
14953 
unite(const isl::set & set2)14954 isl::set point::unite(const isl::set &set2) const
14955 {
14956   return isl::basic_set(*this).unite(set2);
14957 }
14958 
unite(const isl::union_set & uset2)14959 isl::union_set point::unite(const isl::union_set &uset2) const
14960 {
14961   return isl::basic_set(*this).unite(uset2);
14962 }
14963 
unshifted_simple_hull()14964 isl::basic_set point::unshifted_simple_hull() const
14965 {
14966   return isl::basic_set(*this).unshifted_simple_hull();
14967 }
14968 
unwrap()14969 isl::map point::unwrap() const
14970 {
14971   return isl::basic_set(*this).unwrap();
14972 }
14973 
upper_bound(const isl::multi_pw_aff & upper)14974 isl::set point::upper_bound(const isl::multi_pw_aff &upper) const
14975 {
14976   return isl::basic_set(*this).upper_bound(upper);
14977 }
14978 
upper_bound(const isl::multi_val & upper)14979 isl::set point::upper_bound(const isl::multi_val &upper) const
14980 {
14981   return isl::basic_set(*this).upper_bound(upper);
14982 }
14983 
upper_bound_val(isl::dim type,unsigned int pos,const isl::val & value)14984 isl::set point::upper_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const
14985 {
14986   return isl::basic_set(*this).upper_bound_val(type, pos, value);
14987 }
14988 
upper_bound_val(isl::dim type,unsigned int pos,long value)14989 isl::set point::upper_bound_val(isl::dim type, unsigned int pos, long value) const
14990 {
14991   return this->upper_bound_val(type, pos, isl::val(ctx(), value));
14992 }
14993 
14994 inline std::ostream &operator<<(std::ostream &os, const point &obj)
14995 {
14996   char *str = isl_point_to_str(obj.get());
14997   if (!str) {
14998     os.setstate(std::ios_base::badbit);
14999     return os;
15000   }
15001   os << str;
15002   free(str);
15003   return os;
15004 }
15005 
15006 // implementations for isl::pw_aff
manage(__isl_take isl_pw_aff * ptr)15007 pw_aff manage(__isl_take isl_pw_aff *ptr) {
15008   return pw_aff(ptr);
15009 }
manage_copy(__isl_keep isl_pw_aff * ptr)15010 pw_aff manage_copy(__isl_keep isl_pw_aff *ptr) {
15011   ptr = isl_pw_aff_copy(ptr);
15012   return pw_aff(ptr);
15013 }
15014 
pw_aff()15015 pw_aff::pw_aff()
15016     : ptr(nullptr) {}
15017 
pw_aff(const pw_aff & obj)15018 pw_aff::pw_aff(const pw_aff &obj)
15019     : ptr(nullptr)
15020 {
15021   ptr = obj.copy();
15022 }
15023 
pw_aff(__isl_take isl_pw_aff * ptr)15024 pw_aff::pw_aff(__isl_take isl_pw_aff *ptr)
15025     : ptr(ptr) {}
15026 
pw_aff(isl::aff aff)15027 pw_aff::pw_aff(isl::aff aff)
15028 {
15029   auto res = isl_pw_aff_from_aff(aff.release());
15030   ptr = res;
15031 }
15032 
pw_aff(isl::ctx ctx,const std::string & str)15033 pw_aff::pw_aff(isl::ctx ctx, const std::string &str)
15034 {
15035   auto res = isl_pw_aff_read_from_str(ctx.release(), str.c_str());
15036   ptr = res;
15037 }
15038 
pw_aff(isl::set domain,isl::val v)15039 pw_aff::pw_aff(isl::set domain, isl::val v)
15040 {
15041   auto res = isl_pw_aff_val_on_domain(domain.release(), v.release());
15042   ptr = res;
15043 }
15044 
pw_aff(isl::local_space ls)15045 pw_aff::pw_aff(isl::local_space ls)
15046 {
15047   auto res = isl_pw_aff_zero_on_domain(ls.release());
15048   ptr = res;
15049 }
15050 
15051 pw_aff &pw_aff::operator=(pw_aff obj) {
15052   std::swap(this->ptr, obj.ptr);
15053   return *this;
15054 }
15055 
~pw_aff()15056 pw_aff::~pw_aff() {
15057   if (ptr)
15058     isl_pw_aff_free(ptr);
15059 }
15060 
copy()15061 __isl_give isl_pw_aff *pw_aff::copy() const & {
15062   return isl_pw_aff_copy(ptr);
15063 }
15064 
get()15065 __isl_keep isl_pw_aff *pw_aff::get() const {
15066   return ptr;
15067 }
15068 
release()15069 __isl_give isl_pw_aff *pw_aff::release() {
15070   isl_pw_aff *tmp = ptr;
15071   ptr = nullptr;
15072   return tmp;
15073 }
15074 
is_null()15075 bool pw_aff::is_null() const {
15076   return ptr == nullptr;
15077 }
15078 
ctx()15079 isl::ctx pw_aff::ctx() const {
15080   return isl::ctx(isl_pw_aff_get_ctx(ptr));
15081 }
15082 
add(const isl::multi_pw_aff & multi2)15083 isl::multi_pw_aff pw_aff::add(const isl::multi_pw_aff &multi2) const
15084 {
15085   return isl::pw_multi_aff(*this).add(multi2);
15086 }
15087 
add(const isl::multi_union_pw_aff & multi2)15088 isl::multi_union_pw_aff pw_aff::add(const isl::multi_union_pw_aff &multi2) const
15089 {
15090   return isl::union_pw_aff(*this).add(multi2);
15091 }
15092 
add(isl::pw_aff pwaff2)15093 isl::pw_aff pw_aff::add(isl::pw_aff pwaff2) const
15094 {
15095   auto res = isl_pw_aff_add(copy(), pwaff2.release());
15096   return manage(res);
15097 }
15098 
add(const isl::pw_multi_aff & pma2)15099 isl::pw_multi_aff pw_aff::add(const isl::pw_multi_aff &pma2) const
15100 {
15101   return isl::pw_multi_aff(*this).add(pma2);
15102 }
15103 
add(const isl::union_pw_aff & upa2)15104 isl::union_pw_aff pw_aff::add(const isl::union_pw_aff &upa2) const
15105 {
15106   return isl::union_pw_aff(*this).add(upa2);
15107 }
15108 
add(const isl::union_pw_multi_aff & upma2)15109 isl::union_pw_multi_aff pw_aff::add(const isl::union_pw_multi_aff &upma2) const
15110 {
15111   return isl::union_pw_aff(*this).add(upma2);
15112 }
15113 
add(const isl::aff & pwaff2)15114 isl::pw_aff pw_aff::add(const isl::aff &pwaff2) const
15115 {
15116   return this->add(isl::pw_aff(pwaff2));
15117 }
15118 
add_constant(isl::val v)15119 isl::pw_aff pw_aff::add_constant(isl::val v) const
15120 {
15121   auto res = isl_pw_aff_add_constant_val(copy(), v.release());
15122   return manage(res);
15123 }
15124 
add_constant(long v)15125 isl::pw_aff pw_aff::add_constant(long v) const
15126 {
15127   return this->add_constant(isl::val(ctx(), v));
15128 }
15129 
add_constant(const isl::multi_val & mv)15130 isl::pw_multi_aff pw_aff::add_constant(const isl::multi_val &mv) const
15131 {
15132   return isl::pw_multi_aff(*this).add_constant(mv);
15133 }
15134 
add_dims(isl::dim type,unsigned int n)15135 isl::pw_aff pw_aff::add_dims(isl::dim type, unsigned int n) const
15136 {
15137   auto res = isl_pw_aff_add_dims(copy(), static_cast<enum isl_dim_type>(type), n);
15138   return manage(res);
15139 }
15140 
add_pw_multi_aff(const isl::pw_multi_aff & pma)15141 isl::union_pw_multi_aff pw_aff::add_pw_multi_aff(const isl::pw_multi_aff &pma) const
15142 {
15143   return isl::union_pw_aff(*this).add_pw_multi_aff(pma);
15144 }
15145 
apply(const isl::union_pw_multi_aff & upma2)15146 isl::union_pw_multi_aff pw_aff::apply(const isl::union_pw_multi_aff &upma2) const
15147 {
15148   return isl::union_pw_aff(*this).apply(upma2);
15149 }
15150 
as_aff()15151 isl::aff pw_aff::as_aff() const
15152 {
15153   auto res = isl_pw_aff_as_aff(copy());
15154   return manage(res);
15155 }
15156 
as_map()15157 isl::map pw_aff::as_map() const
15158 {
15159   auto res = isl_pw_aff_as_map(copy());
15160   return manage(res);
15161 }
15162 
as_multi_aff()15163 isl::multi_aff pw_aff::as_multi_aff() const
15164 {
15165   return isl::pw_multi_aff(*this).as_multi_aff();
15166 }
15167 
as_multi_union_pw_aff()15168 isl::multi_union_pw_aff pw_aff::as_multi_union_pw_aff() const
15169 {
15170   return isl::union_pw_aff(*this).as_multi_union_pw_aff();
15171 }
15172 
as_pw_multi_aff()15173 isl::pw_multi_aff pw_aff::as_pw_multi_aff() const
15174 {
15175   return isl::union_pw_aff(*this).as_pw_multi_aff();
15176 }
15177 
as_set()15178 isl::set pw_aff::as_set() const
15179 {
15180   return isl::pw_multi_aff(*this).as_set();
15181 }
15182 
as_union_map()15183 isl::union_map pw_aff::as_union_map() const
15184 {
15185   return isl::union_pw_aff(*this).as_union_map();
15186 }
15187 
at(int pos)15188 isl::pw_aff pw_aff::at(int pos) const
15189 {
15190   return isl::pw_multi_aff(*this).at(pos);
15191 }
15192 
bind(const isl::multi_id & tuple)15193 isl::set pw_aff::bind(const isl::multi_id &tuple) const
15194 {
15195   return isl::multi_pw_aff(*this).bind(tuple);
15196 }
15197 
bind(isl::id id)15198 isl::set pw_aff::bind(isl::id id) const
15199 {
15200   auto res = isl_pw_aff_bind_id(copy(), id.release());
15201   return manage(res);
15202 }
15203 
bind(const std::string & id)15204 isl::set pw_aff::bind(const std::string &id) const
15205 {
15206   return this->bind(isl::id(ctx(), id));
15207 }
15208 
bind_domain(isl::multi_id tuple)15209 isl::pw_aff pw_aff::bind_domain(isl::multi_id tuple) const
15210 {
15211   auto res = isl_pw_aff_bind_domain(copy(), tuple.release());
15212   return manage(res);
15213 }
15214 
bind_domain_wrapped_domain(isl::multi_id tuple)15215 isl::pw_aff pw_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const
15216 {
15217   auto res = isl_pw_aff_bind_domain_wrapped_domain(copy(), tuple.release());
15218   return manage(res);
15219 }
15220 
ceil()15221 isl::pw_aff pw_aff::ceil() const
15222 {
15223   auto res = isl_pw_aff_ceil(copy());
15224   return manage(res);
15225 }
15226 
coalesce()15227 isl::pw_aff pw_aff::coalesce() const
15228 {
15229   auto res = isl_pw_aff_coalesce(copy());
15230   return manage(res);
15231 }
15232 
cond(isl::pw_aff pwaff_true,isl::pw_aff pwaff_false)15233 isl::pw_aff pw_aff::cond(isl::pw_aff pwaff_true, isl::pw_aff pwaff_false) const
15234 {
15235   auto res = isl_pw_aff_cond(copy(), pwaff_true.release(), pwaff_false.release());
15236   return manage(res);
15237 }
15238 
dim(isl::dim type)15239 class size pw_aff::dim(isl::dim type) const
15240 {
15241   return isl::pw_multi_aff(*this).dim(type);
15242 }
15243 
dim_id(isl::dim type,unsigned int pos)15244 isl::id pw_aff::dim_id(isl::dim type, unsigned int pos) const
15245 {
15246   auto res = isl_pw_aff_get_dim_id(get(), static_cast<enum isl_dim_type>(type), pos);
15247   return manage(res);
15248 }
15249 
get_dim_id(isl::dim type,unsigned int pos)15250 isl::id pw_aff::get_dim_id(isl::dim type, unsigned int pos) const
15251 {
15252   return dim_id(type, pos);
15253 }
15254 
div(isl::pw_aff pa2)15255 isl::pw_aff pw_aff::div(isl::pw_aff pa2) const
15256 {
15257   auto res = isl_pw_aff_div(copy(), pa2.release());
15258   return manage(res);
15259 }
15260 
domain()15261 isl::set pw_aff::domain() const
15262 {
15263   auto res = isl_pw_aff_domain(copy());
15264   return manage(res);
15265 }
15266 
domain_space()15267 isl::space pw_aff::domain_space() const
15268 {
15269   auto res = isl_pw_aff_get_domain_space(get());
15270   return manage(res);
15271 }
15272 
get_domain_space()15273 isl::space pw_aff::get_domain_space() const
15274 {
15275   return domain_space();
15276 }
15277 
drop_dims(isl::dim type,unsigned int first,unsigned int n)15278 isl::pw_multi_aff pw_aff::drop_dims(isl::dim type, unsigned int first, unsigned int n) const
15279 {
15280   return isl::pw_multi_aff(*this).drop_dims(type, first, n);
15281 }
15282 
eq_set(isl::pw_aff pwaff2)15283 isl::set pw_aff::eq_set(isl::pw_aff pwaff2) const
15284 {
15285   auto res = isl_pw_aff_eq_set(copy(), pwaff2.release());
15286   return manage(res);
15287 }
15288 
eval(isl::point pnt)15289 isl::val pw_aff::eval(isl::point pnt) const
15290 {
15291   auto res = isl_pw_aff_eval(copy(), pnt.release());
15292   return manage(res);
15293 }
15294 
extract_pw_multi_aff(const isl::space & space)15295 isl::pw_multi_aff pw_aff::extract_pw_multi_aff(const isl::space &space) const
15296 {
15297   return isl::union_pw_aff(*this).extract_pw_multi_aff(space);
15298 }
15299 
flat_range_product(const isl::multi_pw_aff & multi2)15300 isl::multi_pw_aff pw_aff::flat_range_product(const isl::multi_pw_aff &multi2) const
15301 {
15302   return isl::pw_multi_aff(*this).flat_range_product(multi2);
15303 }
15304 
flat_range_product(const isl::multi_union_pw_aff & multi2)15305 isl::multi_union_pw_aff pw_aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const
15306 {
15307   return isl::union_pw_aff(*this).flat_range_product(multi2);
15308 }
15309 
flat_range_product(const isl::pw_multi_aff & pma2)15310 isl::pw_multi_aff pw_aff::flat_range_product(const isl::pw_multi_aff &pma2) const
15311 {
15312   return isl::pw_multi_aff(*this).flat_range_product(pma2);
15313 }
15314 
flat_range_product(const isl::union_pw_multi_aff & upma2)15315 isl::union_pw_multi_aff pw_aff::flat_range_product(const isl::union_pw_multi_aff &upma2) const
15316 {
15317   return isl::union_pw_aff(*this).flat_range_product(upma2);
15318 }
15319 
floor()15320 isl::pw_aff pw_aff::floor() const
15321 {
15322   auto res = isl_pw_aff_floor(copy());
15323   return manage(res);
15324 }
15325 
foreach_piece(const std::function<stat (isl::set,isl::aff)> & fn)15326 stat pw_aff::foreach_piece(const std::function<stat(isl::set, isl::aff)> &fn) const
15327 {
15328   struct fn_data {
15329     std::function<stat(isl::set, isl::aff)> func;
15330   } fn_data = { fn };
15331   auto fn_lambda = [](isl_set *arg_0, isl_aff *arg_1, void *arg_2) -> isl_stat {
15332     auto *data = static_cast<struct fn_data *>(arg_2);
15333     auto ret = (data->func)(manage(arg_0), manage(arg_1));
15334     return ret.release();
15335   };
15336   auto res = isl_pw_aff_foreach_piece(get(), fn_lambda, &fn_data);
15337   return manage(res);
15338 }
15339 
foreach_piece(const std::function<stat (isl::set,isl::multi_aff)> & fn)15340 stat pw_aff::foreach_piece(const std::function<stat(isl::set, isl::multi_aff)> &fn) const
15341 {
15342   return isl::pw_multi_aff(*this).foreach_piece(fn);
15343 }
15344 
foreach_pw_aff(const std::function<stat (isl::pw_aff)> & fn)15345 stat pw_aff::foreach_pw_aff(const std::function<stat(isl::pw_aff)> &fn) const
15346 {
15347   return isl::union_pw_aff(*this).foreach_pw_aff(fn);
15348 }
15349 
ge_set(isl::pw_aff pwaff2)15350 isl::set pw_aff::ge_set(isl::pw_aff pwaff2) const
15351 {
15352   auto res = isl_pw_aff_ge_set(copy(), pwaff2.release());
15353   return manage(res);
15354 }
15355 
gist(isl::set context)15356 isl::pw_aff pw_aff::gist(isl::set context) const
15357 {
15358   auto res = isl_pw_aff_gist(copy(), context.release());
15359   return manage(res);
15360 }
15361 
gist(const isl::union_set & context)15362 isl::union_pw_aff pw_aff::gist(const isl::union_set &context) const
15363 {
15364   return isl::union_pw_aff(*this).gist(context);
15365 }
15366 
gist(const isl::basic_set & context)15367 isl::pw_aff pw_aff::gist(const isl::basic_set &context) const
15368 {
15369   return this->gist(isl::set(context));
15370 }
15371 
gist(const isl::point & context)15372 isl::pw_aff pw_aff::gist(const isl::point &context) const
15373 {
15374   return this->gist(isl::set(context));
15375 }
15376 
gt_set(isl::pw_aff pwaff2)15377 isl::set pw_aff::gt_set(isl::pw_aff pwaff2) const
15378 {
15379   auto res = isl_pw_aff_gt_set(copy(), pwaff2.release());
15380   return manage(res);
15381 }
15382 
has_range_tuple_id()15383 boolean pw_aff::has_range_tuple_id() const
15384 {
15385   return isl::pw_multi_aff(*this).has_range_tuple_id();
15386 }
15387 
identity()15388 isl::multi_pw_aff pw_aff::identity() const
15389 {
15390   return isl::pw_multi_aff(*this).identity();
15391 }
15392 
insert_domain(isl::space domain)15393 isl::pw_aff pw_aff::insert_domain(isl::space domain) const
15394 {
15395   auto res = isl_pw_aff_insert_domain(copy(), domain.release());
15396   return manage(res);
15397 }
15398 
intersect_domain(isl::set set)15399 isl::pw_aff pw_aff::intersect_domain(isl::set set) const
15400 {
15401   auto res = isl_pw_aff_intersect_domain(copy(), set.release());
15402   return manage(res);
15403 }
15404 
intersect_domain(const isl::space & space)15405 isl::union_pw_aff pw_aff::intersect_domain(const isl::space &space) const
15406 {
15407   return isl::union_pw_aff(*this).intersect_domain(space);
15408 }
15409 
intersect_domain(const isl::union_set & uset)15410 isl::union_pw_aff pw_aff::intersect_domain(const isl::union_set &uset) const
15411 {
15412   return isl::union_pw_aff(*this).intersect_domain(uset);
15413 }
15414 
intersect_domain(const isl::basic_set & set)15415 isl::pw_aff pw_aff::intersect_domain(const isl::basic_set &set) const
15416 {
15417   return this->intersect_domain(isl::set(set));
15418 }
15419 
intersect_domain(const isl::point & set)15420 isl::pw_aff pw_aff::intersect_domain(const isl::point &set) const
15421 {
15422   return this->intersect_domain(isl::set(set));
15423 }
15424 
intersect_domain_wrapped_domain(const isl::union_set & uset)15425 isl::union_pw_aff pw_aff::intersect_domain_wrapped_domain(const isl::union_set &uset) const
15426 {
15427   return isl::union_pw_aff(*this).intersect_domain_wrapped_domain(uset);
15428 }
15429 
intersect_domain_wrapped_range(const isl::union_set & uset)15430 isl::union_pw_aff pw_aff::intersect_domain_wrapped_range(const isl::union_set &uset) const
15431 {
15432   return isl::union_pw_aff(*this).intersect_domain_wrapped_range(uset);
15433 }
15434 
intersect_params(isl::set set)15435 isl::pw_aff pw_aff::intersect_params(isl::set set) const
15436 {
15437   auto res = isl_pw_aff_intersect_params(copy(), set.release());
15438   return manage(res);
15439 }
15440 
involves_locals()15441 boolean pw_aff::involves_locals() const
15442 {
15443   return isl::pw_multi_aff(*this).involves_locals();
15444 }
15445 
involves_nan()15446 boolean pw_aff::involves_nan() const
15447 {
15448   return isl::multi_pw_aff(*this).involves_nan();
15449 }
15450 
involves_param(const isl::id & id)15451 boolean pw_aff::involves_param(const isl::id &id) const
15452 {
15453   return isl::pw_multi_aff(*this).involves_param(id);
15454 }
15455 
involves_param(const std::string & id)15456 boolean pw_aff::involves_param(const std::string &id) const
15457 {
15458   return this->involves_param(isl::id(ctx(), id));
15459 }
15460 
involves_param(const isl::id_list & list)15461 boolean pw_aff::involves_param(const isl::id_list &list) const
15462 {
15463   return isl::pw_multi_aff(*this).involves_param(list);
15464 }
15465 
is_cst()15466 boolean pw_aff::is_cst() const
15467 {
15468   auto res = isl_pw_aff_is_cst(get());
15469   return manage(res);
15470 }
15471 
is_equal(const isl::pw_aff & pa2)15472 boolean pw_aff::is_equal(const isl::pw_aff &pa2) const
15473 {
15474   auto res = isl_pw_aff_is_equal(get(), pa2.get());
15475   return manage(res);
15476 }
15477 
isa_aff()15478 boolean pw_aff::isa_aff() const
15479 {
15480   auto res = isl_pw_aff_isa_aff(get());
15481   return manage(res);
15482 }
15483 
isa_multi_aff()15484 boolean pw_aff::isa_multi_aff() const
15485 {
15486   return isl::pw_multi_aff(*this).isa_multi_aff();
15487 }
15488 
isa_pw_multi_aff()15489 boolean pw_aff::isa_pw_multi_aff() const
15490 {
15491   return isl::union_pw_aff(*this).isa_pw_multi_aff();
15492 }
15493 
le_set(isl::pw_aff pwaff2)15494 isl::set pw_aff::le_set(isl::pw_aff pwaff2) const
15495 {
15496   auto res = isl_pw_aff_le_set(copy(), pwaff2.release());
15497   return manage(res);
15498 }
15499 
list()15500 isl::pw_aff_list pw_aff::list() const
15501 {
15502   return isl::multi_pw_aff(*this).list();
15503 }
15504 
lt_set(isl::pw_aff pwaff2)15505 isl::set pw_aff::lt_set(isl::pw_aff pwaff2) const
15506 {
15507   auto res = isl_pw_aff_lt_set(copy(), pwaff2.release());
15508   return manage(res);
15509 }
15510 
max(const isl::multi_pw_aff & multi2)15511 isl::multi_pw_aff pw_aff::max(const isl::multi_pw_aff &multi2) const
15512 {
15513   return isl::pw_multi_aff(*this).max(multi2);
15514 }
15515 
max(isl::pw_aff pwaff2)15516 isl::pw_aff pw_aff::max(isl::pw_aff pwaff2) const
15517 {
15518   auto res = isl_pw_aff_max(copy(), pwaff2.release());
15519   return manage(res);
15520 }
15521 
max(const isl::aff & pwaff2)15522 isl::pw_aff pw_aff::max(const isl::aff &pwaff2) const
15523 {
15524   return this->max(isl::pw_aff(pwaff2));
15525 }
15526 
max_multi_val()15527 isl::multi_val pw_aff::max_multi_val() const
15528 {
15529   return isl::pw_multi_aff(*this).max_multi_val();
15530 }
15531 
min(const isl::multi_pw_aff & multi2)15532 isl::multi_pw_aff pw_aff::min(const isl::multi_pw_aff &multi2) const
15533 {
15534   return isl::pw_multi_aff(*this).min(multi2);
15535 }
15536 
min(isl::pw_aff pwaff2)15537 isl::pw_aff pw_aff::min(isl::pw_aff pwaff2) const
15538 {
15539   auto res = isl_pw_aff_min(copy(), pwaff2.release());
15540   return manage(res);
15541 }
15542 
min(const isl::aff & pwaff2)15543 isl::pw_aff pw_aff::min(const isl::aff &pwaff2) const
15544 {
15545   return this->min(isl::pw_aff(pwaff2));
15546 }
15547 
min_multi_val()15548 isl::multi_val pw_aff::min_multi_val() const
15549 {
15550   return isl::pw_multi_aff(*this).min_multi_val();
15551 }
15552 
mod(isl::val mod)15553 isl::pw_aff pw_aff::mod(isl::val mod) const
15554 {
15555   auto res = isl_pw_aff_mod_val(copy(), mod.release());
15556   return manage(res);
15557 }
15558 
mod(long mod)15559 isl::pw_aff pw_aff::mod(long mod) const
15560 {
15561   return this->mod(isl::val(ctx(), mod));
15562 }
15563 
mul(isl::pw_aff pwaff2)15564 isl::pw_aff pw_aff::mul(isl::pw_aff pwaff2) const
15565 {
15566   auto res = isl_pw_aff_mul(copy(), pwaff2.release());
15567   return manage(res);
15568 }
15569 
n_piece()15570 class size pw_aff::n_piece() const
15571 {
15572   return isl::pw_multi_aff(*this).n_piece();
15573 }
15574 
ne_set(isl::pw_aff pwaff2)15575 isl::set pw_aff::ne_set(isl::pw_aff pwaff2) const
15576 {
15577   auto res = isl_pw_aff_ne_set(copy(), pwaff2.release());
15578   return manage(res);
15579 }
15580 
neg()15581 isl::pw_aff pw_aff::neg() const
15582 {
15583   auto res = isl_pw_aff_neg(copy());
15584   return manage(res);
15585 }
15586 
param_on_domain(isl::set domain,isl::id id)15587 isl::pw_aff pw_aff::param_on_domain(isl::set domain, isl::id id)
15588 {
15589   auto res = isl_pw_aff_param_on_domain_id(domain.release(), id.release());
15590   return manage(res);
15591 }
15592 
plain_is_empty()15593 boolean pw_aff::plain_is_empty() const
15594 {
15595   return isl::union_pw_aff(*this).plain_is_empty();
15596 }
15597 
plain_is_equal(const isl::multi_pw_aff & multi2)15598 boolean pw_aff::plain_is_equal(const isl::multi_pw_aff &multi2) const
15599 {
15600   return isl::pw_multi_aff(*this).plain_is_equal(multi2);
15601 }
15602 
plain_is_equal(const isl::multi_union_pw_aff & multi2)15603 boolean pw_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
15604 {
15605   return isl::union_pw_aff(*this).plain_is_equal(multi2);
15606 }
15607 
preimage_domain_wrapped_domain(const isl::pw_multi_aff & pma2)15608 isl::pw_multi_aff pw_aff::preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const
15609 {
15610   return isl::pw_multi_aff(*this).preimage_domain_wrapped_domain(pma2);
15611 }
15612 
preimage_domain_wrapped_domain(const isl::union_pw_multi_aff & upma2)15613 isl::union_pw_multi_aff pw_aff::preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const
15614 {
15615   return isl::union_pw_aff(*this).preimage_domain_wrapped_domain(upma2);
15616 }
15617 
product(const isl::multi_pw_aff & multi2)15618 isl::multi_pw_aff pw_aff::product(const isl::multi_pw_aff &multi2) const
15619 {
15620   return isl::pw_multi_aff(*this).product(multi2);
15621 }
15622 
product(const isl::pw_multi_aff & pma2)15623 isl::pw_multi_aff pw_aff::product(const isl::pw_multi_aff &pma2) const
15624 {
15625   return isl::pw_multi_aff(*this).product(pma2);
15626 }
15627 
pullback(isl::multi_aff ma)15628 isl::pw_aff pw_aff::pullback(isl::multi_aff ma) const
15629 {
15630   auto res = isl_pw_aff_pullback_multi_aff(copy(), ma.release());
15631   return manage(res);
15632 }
15633 
pullback(isl::multi_pw_aff mpa)15634 isl::pw_aff pw_aff::pullback(isl::multi_pw_aff mpa) const
15635 {
15636   auto res = isl_pw_aff_pullback_multi_pw_aff(copy(), mpa.release());
15637   return manage(res);
15638 }
15639 
pullback(isl::pw_multi_aff pma)15640 isl::pw_aff pw_aff::pullback(isl::pw_multi_aff pma) const
15641 {
15642   auto res = isl_pw_aff_pullback_pw_multi_aff(copy(), pma.release());
15643   return manage(res);
15644 }
15645 
pullback(const isl::union_pw_multi_aff & upma)15646 isl::union_pw_aff pw_aff::pullback(const isl::union_pw_multi_aff &upma) const
15647 {
15648   return isl::union_pw_aff(*this).pullback(upma);
15649 }
15650 
pw_multi_aff_list()15651 isl::pw_multi_aff_list pw_aff::pw_multi_aff_list() const
15652 {
15653   return isl::union_pw_aff(*this).pw_multi_aff_list();
15654 }
15655 
range_factor_domain()15656 isl::pw_multi_aff pw_aff::range_factor_domain() const
15657 {
15658   return isl::pw_multi_aff(*this).range_factor_domain();
15659 }
15660 
range_factor_range()15661 isl::pw_multi_aff pw_aff::range_factor_range() const
15662 {
15663   return isl::pw_multi_aff(*this).range_factor_range();
15664 }
15665 
range_product(const isl::multi_pw_aff & multi2)15666 isl::multi_pw_aff pw_aff::range_product(const isl::multi_pw_aff &multi2) const
15667 {
15668   return isl::pw_multi_aff(*this).range_product(multi2);
15669 }
15670 
range_product(const isl::multi_union_pw_aff & multi2)15671 isl::multi_union_pw_aff pw_aff::range_product(const isl::multi_union_pw_aff &multi2) const
15672 {
15673   return isl::union_pw_aff(*this).range_product(multi2);
15674 }
15675 
range_product(const isl::pw_multi_aff & pma2)15676 isl::pw_multi_aff pw_aff::range_product(const isl::pw_multi_aff &pma2) const
15677 {
15678   return isl::pw_multi_aff(*this).range_product(pma2);
15679 }
15680 
range_product(const isl::union_pw_multi_aff & upma2)15681 isl::union_pw_multi_aff pw_aff::range_product(const isl::union_pw_multi_aff &upma2) const
15682 {
15683   return isl::union_pw_aff(*this).range_product(upma2);
15684 }
15685 
range_tuple_id()15686 isl::id pw_aff::range_tuple_id() const
15687 {
15688   return isl::pw_multi_aff(*this).range_tuple_id();
15689 }
15690 
reset_range_tuple_id()15691 isl::multi_pw_aff pw_aff::reset_range_tuple_id() const
15692 {
15693   return isl::multi_pw_aff(*this).reset_range_tuple_id();
15694 }
15695 
reset_tuple_id(isl::dim type)15696 isl::multi_pw_aff pw_aff::reset_tuple_id(isl::dim type) const
15697 {
15698   return isl::multi_pw_aff(*this).reset_tuple_id(type);
15699 }
15700 
scale(const isl::multi_val & mv)15701 isl::multi_pw_aff pw_aff::scale(const isl::multi_val &mv) const
15702 {
15703   return isl::multi_pw_aff(*this).scale(mv);
15704 }
15705 
scale(isl::val v)15706 isl::pw_aff pw_aff::scale(isl::val v) const
15707 {
15708   auto res = isl_pw_aff_scale_val(copy(), v.release());
15709   return manage(res);
15710 }
15711 
scale(long v)15712 isl::pw_aff pw_aff::scale(long v) const
15713 {
15714   return this->scale(isl::val(ctx(), v));
15715 }
15716 
scale_down(const isl::multi_val & mv)15717 isl::multi_pw_aff pw_aff::scale_down(const isl::multi_val &mv) const
15718 {
15719   return isl::multi_pw_aff(*this).scale_down(mv);
15720 }
15721 
scale_down(isl::val f)15722 isl::pw_aff pw_aff::scale_down(isl::val f) const
15723 {
15724   auto res = isl_pw_aff_scale_down_val(copy(), f.release());
15725   return manage(res);
15726 }
15727 
scale_down(long f)15728 isl::pw_aff pw_aff::scale_down(long f) const
15729 {
15730   return this->scale_down(isl::val(ctx(), f));
15731 }
15732 
set_at(int pos,const isl::pw_aff & el)15733 isl::multi_pw_aff pw_aff::set_at(int pos, const isl::pw_aff &el) const
15734 {
15735   return isl::pw_multi_aff(*this).set_at(pos, el);
15736 }
15737 
set_at(int pos,const isl::union_pw_aff & el)15738 isl::multi_union_pw_aff pw_aff::set_at(int pos, const isl::union_pw_aff &el) const
15739 {
15740   return isl::union_pw_aff(*this).set_at(pos, el);
15741 }
15742 
set_pw_aff(int pos,const isl::pw_aff & el)15743 isl::multi_pw_aff pw_aff::set_pw_aff(int pos, const isl::pw_aff &el) const
15744 {
15745   return isl::pw_multi_aff(*this).set_pw_aff(pos, el);
15746 }
15747 
set_pw_aff(unsigned int pos,const isl::pw_aff & pa)15748 isl::pw_multi_aff pw_aff::set_pw_aff(unsigned int pos, const isl::pw_aff &pa) const
15749 {
15750   return isl::pw_multi_aff(*this).set_pw_aff(pos, pa);
15751 }
15752 
set_range_tuple(const isl::id & id)15753 isl::pw_multi_aff pw_aff::set_range_tuple(const isl::id &id) const
15754 {
15755   return isl::pw_multi_aff(*this).set_range_tuple(id);
15756 }
15757 
set_range_tuple(const std::string & id)15758 isl::pw_multi_aff pw_aff::set_range_tuple(const std::string &id) const
15759 {
15760   return this->set_range_tuple(isl::id(ctx(), id));
15761 }
15762 
set_tuple_id(isl::dim type,isl::id id)15763 isl::pw_aff pw_aff::set_tuple_id(isl::dim type, isl::id id) const
15764 {
15765   auto res = isl_pw_aff_set_tuple_id(copy(), static_cast<enum isl_dim_type>(type), id.release());
15766   return manage(res);
15767 }
15768 
set_tuple_id(isl::dim type,const std::string & id)15769 isl::pw_aff pw_aff::set_tuple_id(isl::dim type, const std::string &id) const
15770 {
15771   return this->set_tuple_id(type, isl::id(ctx(), id));
15772 }
15773 
set_union_pw_aff(int pos,const isl::union_pw_aff & el)15774 isl::multi_union_pw_aff pw_aff::set_union_pw_aff(int pos, const isl::union_pw_aff &el) const
15775 {
15776   return isl::union_pw_aff(*this).set_union_pw_aff(pos, el);
15777 }
15778 
size()15779 class size pw_aff::size() const
15780 {
15781   return isl::multi_pw_aff(*this).size();
15782 }
15783 
space()15784 isl::space pw_aff::space() const
15785 {
15786   auto res = isl_pw_aff_get_space(get());
15787   return manage(res);
15788 }
15789 
get_space()15790 isl::space pw_aff::get_space() const
15791 {
15792   return space();
15793 }
15794 
sub(const isl::multi_pw_aff & multi2)15795 isl::multi_pw_aff pw_aff::sub(const isl::multi_pw_aff &multi2) const
15796 {
15797   return isl::pw_multi_aff(*this).sub(multi2);
15798 }
15799 
sub(const isl::multi_union_pw_aff & multi2)15800 isl::multi_union_pw_aff pw_aff::sub(const isl::multi_union_pw_aff &multi2) const
15801 {
15802   return isl::union_pw_aff(*this).sub(multi2);
15803 }
15804 
sub(isl::pw_aff pwaff2)15805 isl::pw_aff pw_aff::sub(isl::pw_aff pwaff2) const
15806 {
15807   auto res = isl_pw_aff_sub(copy(), pwaff2.release());
15808   return manage(res);
15809 }
15810 
sub(const isl::pw_multi_aff & pma2)15811 isl::pw_multi_aff pw_aff::sub(const isl::pw_multi_aff &pma2) const
15812 {
15813   return isl::pw_multi_aff(*this).sub(pma2);
15814 }
15815 
sub(const isl::union_pw_aff & upa2)15816 isl::union_pw_aff pw_aff::sub(const isl::union_pw_aff &upa2) const
15817 {
15818   return isl::union_pw_aff(*this).sub(upa2);
15819 }
15820 
sub(const isl::union_pw_multi_aff & upma2)15821 isl::union_pw_multi_aff pw_aff::sub(const isl::union_pw_multi_aff &upma2) const
15822 {
15823   return isl::union_pw_aff(*this).sub(upma2);
15824 }
15825 
sub(const isl::aff & pwaff2)15826 isl::pw_aff pw_aff::sub(const isl::aff &pwaff2) const
15827 {
15828   return this->sub(isl::pw_aff(pwaff2));
15829 }
15830 
subtract_domain(isl::set set)15831 isl::pw_aff pw_aff::subtract_domain(isl::set set) const
15832 {
15833   auto res = isl_pw_aff_subtract_domain(copy(), set.release());
15834   return manage(res);
15835 }
15836 
subtract_domain(const isl::space & space)15837 isl::union_pw_aff pw_aff::subtract_domain(const isl::space &space) const
15838 {
15839   return isl::union_pw_aff(*this).subtract_domain(space);
15840 }
15841 
subtract_domain(const isl::union_set & uset)15842 isl::union_pw_aff pw_aff::subtract_domain(const isl::union_set &uset) const
15843 {
15844   return isl::union_pw_aff(*this).subtract_domain(uset);
15845 }
15846 
subtract_domain(const isl::basic_set & set)15847 isl::pw_aff pw_aff::subtract_domain(const isl::basic_set &set) const
15848 {
15849   return this->subtract_domain(isl::set(set));
15850 }
15851 
subtract_domain(const isl::point & set)15852 isl::pw_aff pw_aff::subtract_domain(const isl::point &set) const
15853 {
15854   return this->subtract_domain(isl::set(set));
15855 }
15856 
tdiv_q(isl::pw_aff pa2)15857 isl::pw_aff pw_aff::tdiv_q(isl::pw_aff pa2) const
15858 {
15859   auto res = isl_pw_aff_tdiv_q(copy(), pa2.release());
15860   return manage(res);
15861 }
15862 
tdiv_r(isl::pw_aff pa2)15863 isl::pw_aff pw_aff::tdiv_r(isl::pw_aff pa2) const
15864 {
15865   auto res = isl_pw_aff_tdiv_r(copy(), pa2.release());
15866   return manage(res);
15867 }
15868 
to_list()15869 isl::pw_aff_list pw_aff::to_list() const
15870 {
15871   auto res = isl_pw_aff_to_list(copy());
15872   return manage(res);
15873 }
15874 
to_multi_pw_aff()15875 isl::multi_pw_aff pw_aff::to_multi_pw_aff() const
15876 {
15877   return isl::pw_multi_aff(*this).to_multi_pw_aff();
15878 }
15879 
to_union_pw_aff()15880 isl::union_pw_aff pw_aff::to_union_pw_aff() const
15881 {
15882   auto res = isl_pw_aff_to_union_pw_aff(copy());
15883   return manage(res);
15884 }
15885 
to_union_pw_multi_aff()15886 isl::union_pw_multi_aff pw_aff::to_union_pw_multi_aff() const
15887 {
15888   return isl::pw_multi_aff(*this).to_union_pw_multi_aff();
15889 }
15890 
tuple_id(isl::dim type)15891 isl::id pw_aff::tuple_id(isl::dim type) const
15892 {
15893   auto res = isl_pw_aff_get_tuple_id(get(), static_cast<enum isl_dim_type>(type));
15894   return manage(res);
15895 }
15896 
get_tuple_id(isl::dim type)15897 isl::id pw_aff::get_tuple_id(isl::dim type) const
15898 {
15899   return tuple_id(type);
15900 }
15901 
unbind_params_insert_domain(const isl::multi_id & domain)15902 isl::multi_pw_aff pw_aff::unbind_params_insert_domain(const isl::multi_id &domain) const
15903 {
15904   return isl::pw_multi_aff(*this).unbind_params_insert_domain(domain);
15905 }
15906 
union_add(const isl::multi_pw_aff & mpa2)15907 isl::multi_pw_aff pw_aff::union_add(const isl::multi_pw_aff &mpa2) const
15908 {
15909   return isl::pw_multi_aff(*this).union_add(mpa2);
15910 }
15911 
union_add(const isl::multi_union_pw_aff & mupa2)15912 isl::multi_union_pw_aff pw_aff::union_add(const isl::multi_union_pw_aff &mupa2) const
15913 {
15914   return isl::union_pw_aff(*this).union_add(mupa2);
15915 }
15916 
union_add(isl::pw_aff pwaff2)15917 isl::pw_aff pw_aff::union_add(isl::pw_aff pwaff2) const
15918 {
15919   auto res = isl_pw_aff_union_add(copy(), pwaff2.release());
15920   return manage(res);
15921 }
15922 
union_add(const isl::pw_multi_aff & pma2)15923 isl::pw_multi_aff pw_aff::union_add(const isl::pw_multi_aff &pma2) const
15924 {
15925   return isl::pw_multi_aff(*this).union_add(pma2);
15926 }
15927 
union_add(const isl::union_pw_aff & upa2)15928 isl::union_pw_aff pw_aff::union_add(const isl::union_pw_aff &upa2) const
15929 {
15930   return isl::union_pw_aff(*this).union_add(upa2);
15931 }
15932 
union_add(const isl::union_pw_multi_aff & upma2)15933 isl::union_pw_multi_aff pw_aff::union_add(const isl::union_pw_multi_aff &upma2) const
15934 {
15935   return isl::union_pw_aff(*this).union_add(upma2);
15936 }
15937 
union_add(const isl::aff & pwaff2)15938 isl::pw_aff pw_aff::union_add(const isl::aff &pwaff2) const
15939 {
15940   return this->union_add(isl::pw_aff(pwaff2));
15941 }
15942 
var_on_domain(isl::local_space ls,isl::dim type,unsigned int pos)15943 isl::pw_aff pw_aff::var_on_domain(isl::local_space ls, isl::dim type, unsigned int pos)
15944 {
15945   auto res = isl_pw_aff_var_on_domain(ls.release(), static_cast<enum isl_dim_type>(type), pos);
15946   return manage(res);
15947 }
15948 
15949 inline std::ostream &operator<<(std::ostream &os, const pw_aff &obj)
15950 {
15951   char *str = isl_pw_aff_to_str(obj.get());
15952   if (!str) {
15953     os.setstate(std::ios_base::badbit);
15954     return os;
15955   }
15956   os << str;
15957   free(str);
15958   return os;
15959 }
15960 
15961 // implementations for isl::pw_aff_list
manage(__isl_take isl_pw_aff_list * ptr)15962 pw_aff_list manage(__isl_take isl_pw_aff_list *ptr) {
15963   return pw_aff_list(ptr);
15964 }
manage_copy(__isl_keep isl_pw_aff_list * ptr)15965 pw_aff_list manage_copy(__isl_keep isl_pw_aff_list *ptr) {
15966   ptr = isl_pw_aff_list_copy(ptr);
15967   return pw_aff_list(ptr);
15968 }
15969 
pw_aff_list()15970 pw_aff_list::pw_aff_list()
15971     : ptr(nullptr) {}
15972 
pw_aff_list(const pw_aff_list & obj)15973 pw_aff_list::pw_aff_list(const pw_aff_list &obj)
15974     : ptr(nullptr)
15975 {
15976   ptr = obj.copy();
15977 }
15978 
pw_aff_list(__isl_take isl_pw_aff_list * ptr)15979 pw_aff_list::pw_aff_list(__isl_take isl_pw_aff_list *ptr)
15980     : ptr(ptr) {}
15981 
pw_aff_list(isl::ctx ctx,int n)15982 pw_aff_list::pw_aff_list(isl::ctx ctx, int n)
15983 {
15984   auto res = isl_pw_aff_list_alloc(ctx.release(), n);
15985   ptr = res;
15986 }
15987 
pw_aff_list(isl::pw_aff el)15988 pw_aff_list::pw_aff_list(isl::pw_aff el)
15989 {
15990   auto res = isl_pw_aff_list_from_pw_aff(el.release());
15991   ptr = res;
15992 }
15993 
pw_aff_list(isl::ctx ctx,const std::string & str)15994 pw_aff_list::pw_aff_list(isl::ctx ctx, const std::string &str)
15995 {
15996   auto res = isl_pw_aff_list_read_from_str(ctx.release(), str.c_str());
15997   ptr = res;
15998 }
15999 
16000 pw_aff_list &pw_aff_list::operator=(pw_aff_list obj) {
16001   std::swap(this->ptr, obj.ptr);
16002   return *this;
16003 }
16004 
~pw_aff_list()16005 pw_aff_list::~pw_aff_list() {
16006   if (ptr)
16007     isl_pw_aff_list_free(ptr);
16008 }
16009 
copy()16010 __isl_give isl_pw_aff_list *pw_aff_list::copy() const & {
16011   return isl_pw_aff_list_copy(ptr);
16012 }
16013 
get()16014 __isl_keep isl_pw_aff_list *pw_aff_list::get() const {
16015   return ptr;
16016 }
16017 
release()16018 __isl_give isl_pw_aff_list *pw_aff_list::release() {
16019   isl_pw_aff_list *tmp = ptr;
16020   ptr = nullptr;
16021   return tmp;
16022 }
16023 
is_null()16024 bool pw_aff_list::is_null() const {
16025   return ptr == nullptr;
16026 }
16027 
ctx()16028 isl::ctx pw_aff_list::ctx() const {
16029   return isl::ctx(isl_pw_aff_list_get_ctx(ptr));
16030 }
16031 
add(isl::pw_aff el)16032 isl::pw_aff_list pw_aff_list::add(isl::pw_aff el) const
16033 {
16034   auto res = isl_pw_aff_list_add(copy(), el.release());
16035   return manage(res);
16036 }
16037 
at(int index)16038 isl::pw_aff pw_aff_list::at(int index) const
16039 {
16040   auto res = isl_pw_aff_list_get_at(get(), index);
16041   return manage(res);
16042 }
16043 
get_at(int index)16044 isl::pw_aff pw_aff_list::get_at(int index) const
16045 {
16046   return at(index);
16047 }
16048 
clear()16049 isl::pw_aff_list pw_aff_list::clear() const
16050 {
16051   auto res = isl_pw_aff_list_clear(copy());
16052   return manage(res);
16053 }
16054 
concat(isl::pw_aff_list list2)16055 isl::pw_aff_list pw_aff_list::concat(isl::pw_aff_list list2) const
16056 {
16057   auto res = isl_pw_aff_list_concat(copy(), list2.release());
16058   return manage(res);
16059 }
16060 
drop(unsigned int first,unsigned int n)16061 isl::pw_aff_list pw_aff_list::drop(unsigned int first, unsigned int n) const
16062 {
16063   auto res = isl_pw_aff_list_drop(copy(), first, n);
16064   return manage(res);
16065 }
16066 
foreach(const std::function<stat (isl::pw_aff)> & fn)16067 stat pw_aff_list::foreach(const std::function<stat(isl::pw_aff)> &fn) const
16068 {
16069   struct fn_data {
16070     std::function<stat(isl::pw_aff)> func;
16071   } fn_data = { fn };
16072   auto fn_lambda = [](isl_pw_aff *arg_0, void *arg_1) -> isl_stat {
16073     auto *data = static_cast<struct fn_data *>(arg_1);
16074     auto ret = (data->func)(manage(arg_0));
16075     return ret.release();
16076   };
16077   auto res = isl_pw_aff_list_foreach(get(), fn_lambda, &fn_data);
16078   return manage(res);
16079 }
16080 
insert(unsigned int pos,isl::pw_aff el)16081 isl::pw_aff_list pw_aff_list::insert(unsigned int pos, isl::pw_aff el) const
16082 {
16083   auto res = isl_pw_aff_list_insert(copy(), pos, el.release());
16084   return manage(res);
16085 }
16086 
size()16087 class size pw_aff_list::size() const
16088 {
16089   auto res = isl_pw_aff_list_size(get());
16090   return manage(res);
16091 }
16092 
16093 inline std::ostream &operator<<(std::ostream &os, const pw_aff_list &obj)
16094 {
16095   char *str = isl_pw_aff_list_to_str(obj.get());
16096   if (!str) {
16097     os.setstate(std::ios_base::badbit);
16098     return os;
16099   }
16100   os << str;
16101   free(str);
16102   return os;
16103 }
16104 
16105 // implementations for isl::pw_multi_aff
manage(__isl_take isl_pw_multi_aff * ptr)16106 pw_multi_aff manage(__isl_take isl_pw_multi_aff *ptr) {
16107   return pw_multi_aff(ptr);
16108 }
manage_copy(__isl_keep isl_pw_multi_aff * ptr)16109 pw_multi_aff manage_copy(__isl_keep isl_pw_multi_aff *ptr) {
16110   ptr = isl_pw_multi_aff_copy(ptr);
16111   return pw_multi_aff(ptr);
16112 }
16113 
pw_multi_aff()16114 pw_multi_aff::pw_multi_aff()
16115     : ptr(nullptr) {}
16116 
pw_multi_aff(const pw_multi_aff & obj)16117 pw_multi_aff::pw_multi_aff(const pw_multi_aff &obj)
16118     : ptr(nullptr)
16119 {
16120   ptr = obj.copy();
16121 }
16122 
pw_multi_aff(__isl_take isl_pw_multi_aff * ptr)16123 pw_multi_aff::pw_multi_aff(__isl_take isl_pw_multi_aff *ptr)
16124     : ptr(ptr) {}
16125 
pw_multi_aff(isl::multi_aff ma)16126 pw_multi_aff::pw_multi_aff(isl::multi_aff ma)
16127 {
16128   auto res = isl_pw_multi_aff_from_multi_aff(ma.release());
16129   ptr = res;
16130 }
16131 
pw_multi_aff(isl::pw_aff pa)16132 pw_multi_aff::pw_multi_aff(isl::pw_aff pa)
16133 {
16134   auto res = isl_pw_multi_aff_from_pw_aff(pa.release());
16135   ptr = res;
16136 }
16137 
pw_multi_aff(isl::ctx ctx,const std::string & str)16138 pw_multi_aff::pw_multi_aff(isl::ctx ctx, const std::string &str)
16139 {
16140   auto res = isl_pw_multi_aff_read_from_str(ctx.release(), str.c_str());
16141   ptr = res;
16142 }
16143 
16144 pw_multi_aff &pw_multi_aff::operator=(pw_multi_aff obj) {
16145   std::swap(this->ptr, obj.ptr);
16146   return *this;
16147 }
16148 
~pw_multi_aff()16149 pw_multi_aff::~pw_multi_aff() {
16150   if (ptr)
16151     isl_pw_multi_aff_free(ptr);
16152 }
16153 
copy()16154 __isl_give isl_pw_multi_aff *pw_multi_aff::copy() const & {
16155   return isl_pw_multi_aff_copy(ptr);
16156 }
16157 
get()16158 __isl_keep isl_pw_multi_aff *pw_multi_aff::get() const {
16159   return ptr;
16160 }
16161 
release()16162 __isl_give isl_pw_multi_aff *pw_multi_aff::release() {
16163   isl_pw_multi_aff *tmp = ptr;
16164   ptr = nullptr;
16165   return tmp;
16166 }
16167 
is_null()16168 bool pw_multi_aff::is_null() const {
16169   return ptr == nullptr;
16170 }
16171 
ctx()16172 isl::ctx pw_multi_aff::ctx() const {
16173   return isl::ctx(isl_pw_multi_aff_get_ctx(ptr));
16174 }
16175 
add(const isl::multi_pw_aff & multi2)16176 isl::multi_pw_aff pw_multi_aff::add(const isl::multi_pw_aff &multi2) const
16177 {
16178   return isl::multi_pw_aff(*this).add(multi2);
16179 }
16180 
add(const isl::multi_union_pw_aff & multi2)16181 isl::multi_union_pw_aff pw_multi_aff::add(const isl::multi_union_pw_aff &multi2) const
16182 {
16183   return isl::multi_pw_aff(*this).add(multi2);
16184 }
16185 
add(isl::pw_multi_aff pma2)16186 isl::pw_multi_aff pw_multi_aff::add(isl::pw_multi_aff pma2) const
16187 {
16188   auto res = isl_pw_multi_aff_add(copy(), pma2.release());
16189   return manage(res);
16190 }
16191 
add(const isl::union_pw_multi_aff & upma2)16192 isl::union_pw_multi_aff pw_multi_aff::add(const isl::union_pw_multi_aff &upma2) const
16193 {
16194   return isl::union_pw_multi_aff(*this).add(upma2);
16195 }
16196 
add(const isl::multi_aff & pma2)16197 isl::pw_multi_aff pw_multi_aff::add(const isl::multi_aff &pma2) const
16198 {
16199   return this->add(isl::pw_multi_aff(pma2));
16200 }
16201 
add(const isl::pw_aff & pma2)16202 isl::pw_multi_aff pw_multi_aff::add(const isl::pw_aff &pma2) const
16203 {
16204   return this->add(isl::pw_multi_aff(pma2));
16205 }
16206 
add_constant(isl::multi_val mv)16207 isl::pw_multi_aff pw_multi_aff::add_constant(isl::multi_val mv) const
16208 {
16209   auto res = isl_pw_multi_aff_add_constant_multi_val(copy(), mv.release());
16210   return manage(res);
16211 }
16212 
add_constant(isl::val v)16213 isl::pw_multi_aff pw_multi_aff::add_constant(isl::val v) const
16214 {
16215   auto res = isl_pw_multi_aff_add_constant_val(copy(), v.release());
16216   return manage(res);
16217 }
16218 
add_constant(long v)16219 isl::pw_multi_aff pw_multi_aff::add_constant(long v) const
16220 {
16221   return this->add_constant(isl::val(ctx(), v));
16222 }
16223 
add_pw_multi_aff(const isl::pw_multi_aff & pma)16224 isl::union_pw_multi_aff pw_multi_aff::add_pw_multi_aff(const isl::pw_multi_aff &pma) const
16225 {
16226   return isl::union_pw_multi_aff(*this).add_pw_multi_aff(pma);
16227 }
16228 
apply(const isl::union_pw_multi_aff & upma2)16229 isl::union_pw_multi_aff pw_multi_aff::apply(const isl::union_pw_multi_aff &upma2) const
16230 {
16231   return isl::union_pw_multi_aff(*this).apply(upma2);
16232 }
16233 
as_map()16234 isl::map pw_multi_aff::as_map() const
16235 {
16236   auto res = isl_pw_multi_aff_as_map(copy());
16237   return manage(res);
16238 }
16239 
as_multi_aff()16240 isl::multi_aff pw_multi_aff::as_multi_aff() const
16241 {
16242   auto res = isl_pw_multi_aff_as_multi_aff(copy());
16243   return manage(res);
16244 }
16245 
as_multi_union_pw_aff()16246 isl::multi_union_pw_aff pw_multi_aff::as_multi_union_pw_aff() const
16247 {
16248   return isl::union_pw_multi_aff(*this).as_multi_union_pw_aff();
16249 }
16250 
as_pw_multi_aff()16251 isl::pw_multi_aff pw_multi_aff::as_pw_multi_aff() const
16252 {
16253   return isl::union_pw_multi_aff(*this).as_pw_multi_aff();
16254 }
16255 
as_set()16256 isl::set pw_multi_aff::as_set() const
16257 {
16258   auto res = isl_pw_multi_aff_as_set(copy());
16259   return manage(res);
16260 }
16261 
as_union_map()16262 isl::union_map pw_multi_aff::as_union_map() const
16263 {
16264   return isl::union_pw_multi_aff(*this).as_union_map();
16265 }
16266 
at(int pos)16267 isl::pw_aff pw_multi_aff::at(int pos) const
16268 {
16269   auto res = isl_pw_multi_aff_get_at(get(), pos);
16270   return manage(res);
16271 }
16272 
get_at(int pos)16273 isl::pw_aff pw_multi_aff::get_at(int pos) const
16274 {
16275   return at(pos);
16276 }
16277 
bind(const isl::multi_id & tuple)16278 isl::set pw_multi_aff::bind(const isl::multi_id &tuple) const
16279 {
16280   return isl::multi_pw_aff(*this).bind(tuple);
16281 }
16282 
bind_domain(isl::multi_id tuple)16283 isl::pw_multi_aff pw_multi_aff::bind_domain(isl::multi_id tuple) const
16284 {
16285   auto res = isl_pw_multi_aff_bind_domain(copy(), tuple.release());
16286   return manage(res);
16287 }
16288 
bind_domain_wrapped_domain(isl::multi_id tuple)16289 isl::pw_multi_aff pw_multi_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const
16290 {
16291   auto res = isl_pw_multi_aff_bind_domain_wrapped_domain(copy(), tuple.release());
16292   return manage(res);
16293 }
16294 
coalesce()16295 isl::pw_multi_aff pw_multi_aff::coalesce() const
16296 {
16297   auto res = isl_pw_multi_aff_coalesce(copy());
16298   return manage(res);
16299 }
16300 
dim(isl::dim type)16301 class size pw_multi_aff::dim(isl::dim type) const
16302 {
16303   auto res = isl_pw_multi_aff_dim(get(), static_cast<enum isl_dim_type>(type));
16304   return manage(res);
16305 }
16306 
domain()16307 isl::set pw_multi_aff::domain() const
16308 {
16309   auto res = isl_pw_multi_aff_domain(copy());
16310   return manage(res);
16311 }
16312 
domain_map(isl::space space)16313 isl::pw_multi_aff pw_multi_aff::domain_map(isl::space space)
16314 {
16315   auto res = isl_pw_multi_aff_domain_map(space.release());
16316   return manage(res);
16317 }
16318 
drop_dims(isl::dim type,unsigned int first,unsigned int n)16319 isl::pw_multi_aff pw_multi_aff::drop_dims(isl::dim type, unsigned int first, unsigned int n) const
16320 {
16321   auto res = isl_pw_multi_aff_drop_dims(copy(), static_cast<enum isl_dim_type>(type), first, n);
16322   return manage(res);
16323 }
16324 
extract_pw_multi_aff(const isl::space & space)16325 isl::pw_multi_aff pw_multi_aff::extract_pw_multi_aff(const isl::space &space) const
16326 {
16327   return isl::union_pw_multi_aff(*this).extract_pw_multi_aff(space);
16328 }
16329 
flat_range_product(const isl::multi_pw_aff & multi2)16330 isl::multi_pw_aff pw_multi_aff::flat_range_product(const isl::multi_pw_aff &multi2) const
16331 {
16332   return isl::multi_pw_aff(*this).flat_range_product(multi2);
16333 }
16334 
flat_range_product(const isl::multi_union_pw_aff & multi2)16335 isl::multi_union_pw_aff pw_multi_aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const
16336 {
16337   return isl::multi_pw_aff(*this).flat_range_product(multi2);
16338 }
16339 
flat_range_product(isl::pw_multi_aff pma2)16340 isl::pw_multi_aff pw_multi_aff::flat_range_product(isl::pw_multi_aff pma2) const
16341 {
16342   auto res = isl_pw_multi_aff_flat_range_product(copy(), pma2.release());
16343   return manage(res);
16344 }
16345 
flat_range_product(const isl::union_pw_multi_aff & upma2)16346 isl::union_pw_multi_aff pw_multi_aff::flat_range_product(const isl::union_pw_multi_aff &upma2) const
16347 {
16348   return isl::union_pw_multi_aff(*this).flat_range_product(upma2);
16349 }
16350 
flat_range_product(const isl::multi_aff & pma2)16351 isl::pw_multi_aff pw_multi_aff::flat_range_product(const isl::multi_aff &pma2) const
16352 {
16353   return this->flat_range_product(isl::pw_multi_aff(pma2));
16354 }
16355 
flat_range_product(const isl::pw_aff & pma2)16356 isl::pw_multi_aff pw_multi_aff::flat_range_product(const isl::pw_aff &pma2) const
16357 {
16358   return this->flat_range_product(isl::pw_multi_aff(pma2));
16359 }
16360 
foreach_piece(const std::function<stat (isl::set,isl::multi_aff)> & fn)16361 stat pw_multi_aff::foreach_piece(const std::function<stat(isl::set, isl::multi_aff)> &fn) const
16362 {
16363   struct fn_data {
16364     std::function<stat(isl::set, isl::multi_aff)> func;
16365   } fn_data = { fn };
16366   auto fn_lambda = [](isl_set *arg_0, isl_multi_aff *arg_1, void *arg_2) -> isl_stat {
16367     auto *data = static_cast<struct fn_data *>(arg_2);
16368     auto ret = (data->func)(manage(arg_0), manage(arg_1));
16369     return ret.release();
16370   };
16371   auto res = isl_pw_multi_aff_foreach_piece(get(), fn_lambda, &fn_data);
16372   return manage(res);
16373 }
16374 
from_map(isl::map map)16375 isl::pw_multi_aff pw_multi_aff::from_map(isl::map map)
16376 {
16377   auto res = isl_pw_multi_aff_from_map(map.release());
16378   return manage(res);
16379 }
16380 
gist(isl::set set)16381 isl::pw_multi_aff pw_multi_aff::gist(isl::set set) const
16382 {
16383   auto res = isl_pw_multi_aff_gist(copy(), set.release());
16384   return manage(res);
16385 }
16386 
gist(const isl::union_set & context)16387 isl::union_pw_multi_aff pw_multi_aff::gist(const isl::union_set &context) const
16388 {
16389   return isl::union_pw_multi_aff(*this).gist(context);
16390 }
16391 
gist(const isl::basic_set & set)16392 isl::pw_multi_aff pw_multi_aff::gist(const isl::basic_set &set) const
16393 {
16394   return this->gist(isl::set(set));
16395 }
16396 
gist(const isl::point & set)16397 isl::pw_multi_aff pw_multi_aff::gist(const isl::point &set) const
16398 {
16399   return this->gist(isl::set(set));
16400 }
16401 
has_range_tuple_id()16402 boolean pw_multi_aff::has_range_tuple_id() const
16403 {
16404   auto res = isl_pw_multi_aff_has_range_tuple_id(get());
16405   return manage(res);
16406 }
16407 
identity()16408 isl::multi_pw_aff pw_multi_aff::identity() const
16409 {
16410   return isl::multi_pw_aff(*this).identity();
16411 }
16412 
identity_on_domain(isl::space space)16413 isl::pw_multi_aff pw_multi_aff::identity_on_domain(isl::space space)
16414 {
16415   auto res = isl_pw_multi_aff_identity_on_domain_space(space.release());
16416   return manage(res);
16417 }
16418 
insert_domain(isl::space domain)16419 isl::pw_multi_aff pw_multi_aff::insert_domain(isl::space domain) const
16420 {
16421   auto res = isl_pw_multi_aff_insert_domain(copy(), domain.release());
16422   return manage(res);
16423 }
16424 
intersect_domain(isl::set set)16425 isl::pw_multi_aff pw_multi_aff::intersect_domain(isl::set set) const
16426 {
16427   auto res = isl_pw_multi_aff_intersect_domain(copy(), set.release());
16428   return manage(res);
16429 }
16430 
intersect_domain(const isl::space & space)16431 isl::union_pw_multi_aff pw_multi_aff::intersect_domain(const isl::space &space) const
16432 {
16433   return isl::union_pw_multi_aff(*this).intersect_domain(space);
16434 }
16435 
intersect_domain(const isl::union_set & uset)16436 isl::union_pw_multi_aff pw_multi_aff::intersect_domain(const isl::union_set &uset) const
16437 {
16438   return isl::union_pw_multi_aff(*this).intersect_domain(uset);
16439 }
16440 
intersect_domain(const isl::basic_set & set)16441 isl::pw_multi_aff pw_multi_aff::intersect_domain(const isl::basic_set &set) const
16442 {
16443   return this->intersect_domain(isl::set(set));
16444 }
16445 
intersect_domain(const isl::point & set)16446 isl::pw_multi_aff pw_multi_aff::intersect_domain(const isl::point &set) const
16447 {
16448   return this->intersect_domain(isl::set(set));
16449 }
16450 
intersect_domain_wrapped_domain(const isl::union_set & uset)16451 isl::union_pw_multi_aff pw_multi_aff::intersect_domain_wrapped_domain(const isl::union_set &uset) const
16452 {
16453   return isl::union_pw_multi_aff(*this).intersect_domain_wrapped_domain(uset);
16454 }
16455 
intersect_domain_wrapped_range(const isl::union_set & uset)16456 isl::union_pw_multi_aff pw_multi_aff::intersect_domain_wrapped_range(const isl::union_set &uset) const
16457 {
16458   return isl::union_pw_multi_aff(*this).intersect_domain_wrapped_range(uset);
16459 }
16460 
intersect_params(isl::set set)16461 isl::pw_multi_aff pw_multi_aff::intersect_params(isl::set set) const
16462 {
16463   auto res = isl_pw_multi_aff_intersect_params(copy(), set.release());
16464   return manage(res);
16465 }
16466 
involves_locals()16467 boolean pw_multi_aff::involves_locals() const
16468 {
16469   auto res = isl_pw_multi_aff_involves_locals(get());
16470   return manage(res);
16471 }
16472 
involves_nan()16473 boolean pw_multi_aff::involves_nan() const
16474 {
16475   return isl::multi_pw_aff(*this).involves_nan();
16476 }
16477 
involves_param(const isl::id & id)16478 boolean pw_multi_aff::involves_param(const isl::id &id) const
16479 {
16480   return isl::multi_pw_aff(*this).involves_param(id);
16481 }
16482 
involves_param(const std::string & id)16483 boolean pw_multi_aff::involves_param(const std::string &id) const
16484 {
16485   return this->involves_param(isl::id(ctx(), id));
16486 }
16487 
involves_param(const isl::id_list & list)16488 boolean pw_multi_aff::involves_param(const isl::id_list &list) const
16489 {
16490   return isl::multi_pw_aff(*this).involves_param(list);
16491 }
16492 
isa_multi_aff()16493 boolean pw_multi_aff::isa_multi_aff() const
16494 {
16495   auto res = isl_pw_multi_aff_isa_multi_aff(get());
16496   return manage(res);
16497 }
16498 
isa_pw_multi_aff()16499 boolean pw_multi_aff::isa_pw_multi_aff() const
16500 {
16501   return isl::union_pw_multi_aff(*this).isa_pw_multi_aff();
16502 }
16503 
list()16504 isl::pw_aff_list pw_multi_aff::list() const
16505 {
16506   return isl::multi_pw_aff(*this).list();
16507 }
16508 
max(const isl::multi_pw_aff & multi2)16509 isl::multi_pw_aff pw_multi_aff::max(const isl::multi_pw_aff &multi2) const
16510 {
16511   return isl::multi_pw_aff(*this).max(multi2);
16512 }
16513 
max_multi_val()16514 isl::multi_val pw_multi_aff::max_multi_val() const
16515 {
16516   auto res = isl_pw_multi_aff_max_multi_val(copy());
16517   return manage(res);
16518 }
16519 
min(const isl::multi_pw_aff & multi2)16520 isl::multi_pw_aff pw_multi_aff::min(const isl::multi_pw_aff &multi2) const
16521 {
16522   return isl::multi_pw_aff(*this).min(multi2);
16523 }
16524 
min_multi_val()16525 isl::multi_val pw_multi_aff::min_multi_val() const
16526 {
16527   auto res = isl_pw_multi_aff_min_multi_val(copy());
16528   return manage(res);
16529 }
16530 
multi_val_on_domain(isl::set domain,isl::multi_val mv)16531 isl::pw_multi_aff pw_multi_aff::multi_val_on_domain(isl::set domain, isl::multi_val mv)
16532 {
16533   auto res = isl_pw_multi_aff_multi_val_on_domain(domain.release(), mv.release());
16534   return manage(res);
16535 }
16536 
n_piece()16537 class size pw_multi_aff::n_piece() const
16538 {
16539   auto res = isl_pw_multi_aff_n_piece(get());
16540   return manage(res);
16541 }
16542 
neg()16543 isl::multi_pw_aff pw_multi_aff::neg() const
16544 {
16545   return isl::multi_pw_aff(*this).neg();
16546 }
16547 
plain_is_empty()16548 boolean pw_multi_aff::plain_is_empty() const
16549 {
16550   return isl::union_pw_multi_aff(*this).plain_is_empty();
16551 }
16552 
plain_is_equal(const isl::multi_pw_aff & multi2)16553 boolean pw_multi_aff::plain_is_equal(const isl::multi_pw_aff &multi2) const
16554 {
16555   return isl::multi_pw_aff(*this).plain_is_equal(multi2);
16556 }
16557 
plain_is_equal(const isl::multi_union_pw_aff & multi2)16558 boolean pw_multi_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
16559 {
16560   return isl::multi_pw_aff(*this).plain_is_equal(multi2);
16561 }
16562 
preimage_domain_wrapped_domain(isl::pw_multi_aff pma2)16563 isl::pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(isl::pw_multi_aff pma2) const
16564 {
16565   auto res = isl_pw_multi_aff_preimage_domain_wrapped_domain_pw_multi_aff(copy(), pma2.release());
16566   return manage(res);
16567 }
16568 
preimage_domain_wrapped_domain(const isl::union_pw_multi_aff & upma2)16569 isl::union_pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const
16570 {
16571   return isl::union_pw_multi_aff(*this).preimage_domain_wrapped_domain(upma2);
16572 }
16573 
preimage_domain_wrapped_domain(const isl::multi_aff & pma2)16574 isl::pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(const isl::multi_aff &pma2) const
16575 {
16576   return this->preimage_domain_wrapped_domain(isl::pw_multi_aff(pma2));
16577 }
16578 
preimage_domain_wrapped_domain(const isl::pw_aff & pma2)16579 isl::pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(const isl::pw_aff &pma2) const
16580 {
16581   return this->preimage_domain_wrapped_domain(isl::pw_multi_aff(pma2));
16582 }
16583 
product(const isl::multi_pw_aff & multi2)16584 isl::multi_pw_aff pw_multi_aff::product(const isl::multi_pw_aff &multi2) const
16585 {
16586   return isl::multi_pw_aff(*this).product(multi2);
16587 }
16588 
product(isl::pw_multi_aff pma2)16589 isl::pw_multi_aff pw_multi_aff::product(isl::pw_multi_aff pma2) const
16590 {
16591   auto res = isl_pw_multi_aff_product(copy(), pma2.release());
16592   return manage(res);
16593 }
16594 
product(const isl::multi_aff & pma2)16595 isl::pw_multi_aff pw_multi_aff::product(const isl::multi_aff &pma2) const
16596 {
16597   return this->product(isl::pw_multi_aff(pma2));
16598 }
16599 
product(const isl::pw_aff & pma2)16600 isl::pw_multi_aff pw_multi_aff::product(const isl::pw_aff &pma2) const
16601 {
16602   return this->product(isl::pw_multi_aff(pma2));
16603 }
16604 
project_out_map(isl::space space,isl::dim type,unsigned int first,unsigned int n)16605 isl::pw_multi_aff pw_multi_aff::project_out_map(isl::space space, isl::dim type, unsigned int first, unsigned int n)
16606 {
16607   auto res = isl_pw_multi_aff_project_out_map(space.release(), static_cast<enum isl_dim_type>(type), first, n);
16608   return manage(res);
16609 }
16610 
pullback(const isl::multi_pw_aff & mpa2)16611 isl::multi_pw_aff pw_multi_aff::pullback(const isl::multi_pw_aff &mpa2) const
16612 {
16613   return isl::multi_pw_aff(*this).pullback(mpa2);
16614 }
16615 
pullback(isl::multi_aff ma)16616 isl::pw_multi_aff pw_multi_aff::pullback(isl::multi_aff ma) const
16617 {
16618   auto res = isl_pw_multi_aff_pullback_multi_aff(copy(), ma.release());
16619   return manage(res);
16620 }
16621 
pullback(isl::pw_multi_aff pma2)16622 isl::pw_multi_aff pw_multi_aff::pullback(isl::pw_multi_aff pma2) const
16623 {
16624   auto res = isl_pw_multi_aff_pullback_pw_multi_aff(copy(), pma2.release());
16625   return manage(res);
16626 }
16627 
pullback(const isl::union_pw_multi_aff & upma2)16628 isl::union_pw_multi_aff pw_multi_aff::pullback(const isl::union_pw_multi_aff &upma2) const
16629 {
16630   return isl::union_pw_multi_aff(*this).pullback(upma2);
16631 }
16632 
pw_multi_aff_list()16633 isl::pw_multi_aff_list pw_multi_aff::pw_multi_aff_list() const
16634 {
16635   return isl::union_pw_multi_aff(*this).pw_multi_aff_list();
16636 }
16637 
range_factor_domain()16638 isl::pw_multi_aff pw_multi_aff::range_factor_domain() const
16639 {
16640   auto res = isl_pw_multi_aff_range_factor_domain(copy());
16641   return manage(res);
16642 }
16643 
range_factor_range()16644 isl::pw_multi_aff pw_multi_aff::range_factor_range() const
16645 {
16646   auto res = isl_pw_multi_aff_range_factor_range(copy());
16647   return manage(res);
16648 }
16649 
range_map(isl::space space)16650 isl::pw_multi_aff pw_multi_aff::range_map(isl::space space)
16651 {
16652   auto res = isl_pw_multi_aff_range_map(space.release());
16653   return manage(res);
16654 }
16655 
range_product(const isl::multi_pw_aff & multi2)16656 isl::multi_pw_aff pw_multi_aff::range_product(const isl::multi_pw_aff &multi2) const
16657 {
16658   return isl::multi_pw_aff(*this).range_product(multi2);
16659 }
16660 
range_product(const isl::multi_union_pw_aff & multi2)16661 isl::multi_union_pw_aff pw_multi_aff::range_product(const isl::multi_union_pw_aff &multi2) const
16662 {
16663   return isl::multi_pw_aff(*this).range_product(multi2);
16664 }
16665 
range_product(isl::pw_multi_aff pma2)16666 isl::pw_multi_aff pw_multi_aff::range_product(isl::pw_multi_aff pma2) const
16667 {
16668   auto res = isl_pw_multi_aff_range_product(copy(), pma2.release());
16669   return manage(res);
16670 }
16671 
range_product(const isl::union_pw_multi_aff & upma2)16672 isl::union_pw_multi_aff pw_multi_aff::range_product(const isl::union_pw_multi_aff &upma2) const
16673 {
16674   return isl::union_pw_multi_aff(*this).range_product(upma2);
16675 }
16676 
range_product(const isl::multi_aff & pma2)16677 isl::pw_multi_aff pw_multi_aff::range_product(const isl::multi_aff &pma2) const
16678 {
16679   return this->range_product(isl::pw_multi_aff(pma2));
16680 }
16681 
range_product(const isl::pw_aff & pma2)16682 isl::pw_multi_aff pw_multi_aff::range_product(const isl::pw_aff &pma2) const
16683 {
16684   return this->range_product(isl::pw_multi_aff(pma2));
16685 }
16686 
range_tuple_id()16687 isl::id pw_multi_aff::range_tuple_id() const
16688 {
16689   auto res = isl_pw_multi_aff_get_range_tuple_id(get());
16690   return manage(res);
16691 }
16692 
get_range_tuple_id()16693 isl::id pw_multi_aff::get_range_tuple_id() const
16694 {
16695   return range_tuple_id();
16696 }
16697 
reset_range_tuple_id()16698 isl::multi_pw_aff pw_multi_aff::reset_range_tuple_id() const
16699 {
16700   return isl::multi_pw_aff(*this).reset_range_tuple_id();
16701 }
16702 
reset_tuple_id(isl::dim type)16703 isl::multi_pw_aff pw_multi_aff::reset_tuple_id(isl::dim type) const
16704 {
16705   return isl::multi_pw_aff(*this).reset_tuple_id(type);
16706 }
16707 
scale(const isl::multi_val & mv)16708 isl::multi_pw_aff pw_multi_aff::scale(const isl::multi_val &mv) const
16709 {
16710   return isl::multi_pw_aff(*this).scale(mv);
16711 }
16712 
scale(isl::val v)16713 isl::pw_multi_aff pw_multi_aff::scale(isl::val v) const
16714 {
16715   auto res = isl_pw_multi_aff_scale_val(copy(), v.release());
16716   return manage(res);
16717 }
16718 
scale(long v)16719 isl::pw_multi_aff pw_multi_aff::scale(long v) const
16720 {
16721   return this->scale(isl::val(ctx(), v));
16722 }
16723 
scale_down(const isl::multi_val & mv)16724 isl::multi_pw_aff pw_multi_aff::scale_down(const isl::multi_val &mv) const
16725 {
16726   return isl::multi_pw_aff(*this).scale_down(mv);
16727 }
16728 
scale_down(isl::val v)16729 isl::pw_multi_aff pw_multi_aff::scale_down(isl::val v) const
16730 {
16731   auto res = isl_pw_multi_aff_scale_down_val(copy(), v.release());
16732   return manage(res);
16733 }
16734 
scale_down(long v)16735 isl::pw_multi_aff pw_multi_aff::scale_down(long v) const
16736 {
16737   return this->scale_down(isl::val(ctx(), v));
16738 }
16739 
set_at(int pos,const isl::pw_aff & el)16740 isl::multi_pw_aff pw_multi_aff::set_at(int pos, const isl::pw_aff &el) const
16741 {
16742   return isl::multi_pw_aff(*this).set_at(pos, el);
16743 }
16744 
set_at(int pos,const isl::union_pw_aff & el)16745 isl::multi_union_pw_aff pw_multi_aff::set_at(int pos, const isl::union_pw_aff &el) const
16746 {
16747   return isl::multi_pw_aff(*this).set_at(pos, el);
16748 }
16749 
set_pw_aff(int pos,const isl::pw_aff & el)16750 isl::multi_pw_aff pw_multi_aff::set_pw_aff(int pos, const isl::pw_aff &el) const
16751 {
16752   return isl::multi_pw_aff(*this).set_pw_aff(pos, el);
16753 }
16754 
set_pw_aff(unsigned int pos,isl::pw_aff pa)16755 isl::pw_multi_aff pw_multi_aff::set_pw_aff(unsigned int pos, isl::pw_aff pa) const
16756 {
16757   auto res = isl_pw_multi_aff_set_pw_aff(copy(), pos, pa.release());
16758   return manage(res);
16759 }
16760 
set_range_tuple(isl::id id)16761 isl::pw_multi_aff pw_multi_aff::set_range_tuple(isl::id id) const
16762 {
16763   auto res = isl_pw_multi_aff_set_range_tuple_id(copy(), id.release());
16764   return manage(res);
16765 }
16766 
set_range_tuple(const std::string & id)16767 isl::pw_multi_aff pw_multi_aff::set_range_tuple(const std::string &id) const
16768 {
16769   return this->set_range_tuple(isl::id(ctx(), id));
16770 }
16771 
set_union_pw_aff(int pos,const isl::union_pw_aff & el)16772 isl::multi_union_pw_aff pw_multi_aff::set_union_pw_aff(int pos, const isl::union_pw_aff &el) const
16773 {
16774   return isl::multi_pw_aff(*this).set_union_pw_aff(pos, el);
16775 }
16776 
size()16777 class size pw_multi_aff::size() const
16778 {
16779   return isl::multi_pw_aff(*this).size();
16780 }
16781 
space()16782 isl::space pw_multi_aff::space() const
16783 {
16784   auto res = isl_pw_multi_aff_get_space(get());
16785   return manage(res);
16786 }
16787 
get_space()16788 isl::space pw_multi_aff::get_space() const
16789 {
16790   return space();
16791 }
16792 
sub(const isl::multi_pw_aff & multi2)16793 isl::multi_pw_aff pw_multi_aff::sub(const isl::multi_pw_aff &multi2) const
16794 {
16795   return isl::multi_pw_aff(*this).sub(multi2);
16796 }
16797 
sub(const isl::multi_union_pw_aff & multi2)16798 isl::multi_union_pw_aff pw_multi_aff::sub(const isl::multi_union_pw_aff &multi2) const
16799 {
16800   return isl::multi_pw_aff(*this).sub(multi2);
16801 }
16802 
sub(isl::pw_multi_aff pma2)16803 isl::pw_multi_aff pw_multi_aff::sub(isl::pw_multi_aff pma2) const
16804 {
16805   auto res = isl_pw_multi_aff_sub(copy(), pma2.release());
16806   return manage(res);
16807 }
16808 
sub(const isl::union_pw_multi_aff & upma2)16809 isl::union_pw_multi_aff pw_multi_aff::sub(const isl::union_pw_multi_aff &upma2) const
16810 {
16811   return isl::union_pw_multi_aff(*this).sub(upma2);
16812 }
16813 
sub(const isl::multi_aff & pma2)16814 isl::pw_multi_aff pw_multi_aff::sub(const isl::multi_aff &pma2) const
16815 {
16816   return this->sub(isl::pw_multi_aff(pma2));
16817 }
16818 
sub(const isl::pw_aff & pma2)16819 isl::pw_multi_aff pw_multi_aff::sub(const isl::pw_aff &pma2) const
16820 {
16821   return this->sub(isl::pw_multi_aff(pma2));
16822 }
16823 
subtract_domain(isl::set set)16824 isl::pw_multi_aff pw_multi_aff::subtract_domain(isl::set set) const
16825 {
16826   auto res = isl_pw_multi_aff_subtract_domain(copy(), set.release());
16827   return manage(res);
16828 }
16829 
subtract_domain(const isl::space & space)16830 isl::union_pw_multi_aff pw_multi_aff::subtract_domain(const isl::space &space) const
16831 {
16832   return isl::union_pw_multi_aff(*this).subtract_domain(space);
16833 }
16834 
subtract_domain(const isl::union_set & uset)16835 isl::union_pw_multi_aff pw_multi_aff::subtract_domain(const isl::union_set &uset) const
16836 {
16837   return isl::union_pw_multi_aff(*this).subtract_domain(uset);
16838 }
16839 
subtract_domain(const isl::basic_set & set)16840 isl::pw_multi_aff pw_multi_aff::subtract_domain(const isl::basic_set &set) const
16841 {
16842   return this->subtract_domain(isl::set(set));
16843 }
16844 
subtract_domain(const isl::point & set)16845 isl::pw_multi_aff pw_multi_aff::subtract_domain(const isl::point &set) const
16846 {
16847   return this->subtract_domain(isl::set(set));
16848 }
16849 
to_list()16850 isl::pw_multi_aff_list pw_multi_aff::to_list() const
16851 {
16852   auto res = isl_pw_multi_aff_to_list(copy());
16853   return manage(res);
16854 }
16855 
to_multi_pw_aff()16856 isl::multi_pw_aff pw_multi_aff::to_multi_pw_aff() const
16857 {
16858   auto res = isl_pw_multi_aff_to_multi_pw_aff(copy());
16859   return manage(res);
16860 }
16861 
to_union_pw_multi_aff()16862 isl::union_pw_multi_aff pw_multi_aff::to_union_pw_multi_aff() const
16863 {
16864   auto res = isl_pw_multi_aff_to_union_pw_multi_aff(copy());
16865   return manage(res);
16866 }
16867 
tuple_id(isl::dim type)16868 isl::id pw_multi_aff::tuple_id(isl::dim type) const
16869 {
16870   auto res = isl_pw_multi_aff_get_tuple_id(get(), static_cast<enum isl_dim_type>(type));
16871   return manage(res);
16872 }
16873 
get_tuple_id(isl::dim type)16874 isl::id pw_multi_aff::get_tuple_id(isl::dim type) const
16875 {
16876   return tuple_id(type);
16877 }
16878 
unbind_params_insert_domain(const isl::multi_id & domain)16879 isl::multi_pw_aff pw_multi_aff::unbind_params_insert_domain(const isl::multi_id &domain) const
16880 {
16881   return isl::multi_pw_aff(*this).unbind_params_insert_domain(domain);
16882 }
16883 
union_add(const isl::multi_pw_aff & mpa2)16884 isl::multi_pw_aff pw_multi_aff::union_add(const isl::multi_pw_aff &mpa2) const
16885 {
16886   return isl::multi_pw_aff(*this).union_add(mpa2);
16887 }
16888 
union_add(const isl::multi_union_pw_aff & mupa2)16889 isl::multi_union_pw_aff pw_multi_aff::union_add(const isl::multi_union_pw_aff &mupa2) const
16890 {
16891   return isl::multi_pw_aff(*this).union_add(mupa2);
16892 }
16893 
union_add(isl::pw_multi_aff pma2)16894 isl::pw_multi_aff pw_multi_aff::union_add(isl::pw_multi_aff pma2) const
16895 {
16896   auto res = isl_pw_multi_aff_union_add(copy(), pma2.release());
16897   return manage(res);
16898 }
16899 
union_add(const isl::union_pw_multi_aff & upma2)16900 isl::union_pw_multi_aff pw_multi_aff::union_add(const isl::union_pw_multi_aff &upma2) const
16901 {
16902   return isl::union_pw_multi_aff(*this).union_add(upma2);
16903 }
16904 
union_add(const isl::multi_aff & pma2)16905 isl::pw_multi_aff pw_multi_aff::union_add(const isl::multi_aff &pma2) const
16906 {
16907   return this->union_add(isl::pw_multi_aff(pma2));
16908 }
16909 
union_add(const isl::pw_aff & pma2)16910 isl::pw_multi_aff pw_multi_aff::union_add(const isl::pw_aff &pma2) const
16911 {
16912   return this->union_add(isl::pw_multi_aff(pma2));
16913 }
16914 
zero(isl::space space)16915 isl::pw_multi_aff pw_multi_aff::zero(isl::space space)
16916 {
16917   auto res = isl_pw_multi_aff_zero(space.release());
16918   return manage(res);
16919 }
16920 
16921 inline std::ostream &operator<<(std::ostream &os, const pw_multi_aff &obj)
16922 {
16923   char *str = isl_pw_multi_aff_to_str(obj.get());
16924   if (!str) {
16925     os.setstate(std::ios_base::badbit);
16926     return os;
16927   }
16928   os << str;
16929   free(str);
16930   return os;
16931 }
16932 
16933 // implementations for isl::pw_multi_aff_list
manage(__isl_take isl_pw_multi_aff_list * ptr)16934 pw_multi_aff_list manage(__isl_take isl_pw_multi_aff_list *ptr) {
16935   return pw_multi_aff_list(ptr);
16936 }
manage_copy(__isl_keep isl_pw_multi_aff_list * ptr)16937 pw_multi_aff_list manage_copy(__isl_keep isl_pw_multi_aff_list *ptr) {
16938   ptr = isl_pw_multi_aff_list_copy(ptr);
16939   return pw_multi_aff_list(ptr);
16940 }
16941 
pw_multi_aff_list()16942 pw_multi_aff_list::pw_multi_aff_list()
16943     : ptr(nullptr) {}
16944 
pw_multi_aff_list(const pw_multi_aff_list & obj)16945 pw_multi_aff_list::pw_multi_aff_list(const pw_multi_aff_list &obj)
16946     : ptr(nullptr)
16947 {
16948   ptr = obj.copy();
16949 }
16950 
pw_multi_aff_list(__isl_take isl_pw_multi_aff_list * ptr)16951 pw_multi_aff_list::pw_multi_aff_list(__isl_take isl_pw_multi_aff_list *ptr)
16952     : ptr(ptr) {}
16953 
pw_multi_aff_list(isl::ctx ctx,int n)16954 pw_multi_aff_list::pw_multi_aff_list(isl::ctx ctx, int n)
16955 {
16956   auto res = isl_pw_multi_aff_list_alloc(ctx.release(), n);
16957   ptr = res;
16958 }
16959 
pw_multi_aff_list(isl::pw_multi_aff el)16960 pw_multi_aff_list::pw_multi_aff_list(isl::pw_multi_aff el)
16961 {
16962   auto res = isl_pw_multi_aff_list_from_pw_multi_aff(el.release());
16963   ptr = res;
16964 }
16965 
pw_multi_aff_list(isl::ctx ctx,const std::string & str)16966 pw_multi_aff_list::pw_multi_aff_list(isl::ctx ctx, const std::string &str)
16967 {
16968   auto res = isl_pw_multi_aff_list_read_from_str(ctx.release(), str.c_str());
16969   ptr = res;
16970 }
16971 
16972 pw_multi_aff_list &pw_multi_aff_list::operator=(pw_multi_aff_list obj) {
16973   std::swap(this->ptr, obj.ptr);
16974   return *this;
16975 }
16976 
~pw_multi_aff_list()16977 pw_multi_aff_list::~pw_multi_aff_list() {
16978   if (ptr)
16979     isl_pw_multi_aff_list_free(ptr);
16980 }
16981 
copy()16982 __isl_give isl_pw_multi_aff_list *pw_multi_aff_list::copy() const & {
16983   return isl_pw_multi_aff_list_copy(ptr);
16984 }
16985 
get()16986 __isl_keep isl_pw_multi_aff_list *pw_multi_aff_list::get() const {
16987   return ptr;
16988 }
16989 
release()16990 __isl_give isl_pw_multi_aff_list *pw_multi_aff_list::release() {
16991   isl_pw_multi_aff_list *tmp = ptr;
16992   ptr = nullptr;
16993   return tmp;
16994 }
16995 
is_null()16996 bool pw_multi_aff_list::is_null() const {
16997   return ptr == nullptr;
16998 }
16999 
ctx()17000 isl::ctx pw_multi_aff_list::ctx() const {
17001   return isl::ctx(isl_pw_multi_aff_list_get_ctx(ptr));
17002 }
17003 
add(isl::pw_multi_aff el)17004 isl::pw_multi_aff_list pw_multi_aff_list::add(isl::pw_multi_aff el) const
17005 {
17006   auto res = isl_pw_multi_aff_list_add(copy(), el.release());
17007   return manage(res);
17008 }
17009 
at(int index)17010 isl::pw_multi_aff pw_multi_aff_list::at(int index) const
17011 {
17012   auto res = isl_pw_multi_aff_list_get_at(get(), index);
17013   return manage(res);
17014 }
17015 
get_at(int index)17016 isl::pw_multi_aff pw_multi_aff_list::get_at(int index) const
17017 {
17018   return at(index);
17019 }
17020 
clear()17021 isl::pw_multi_aff_list pw_multi_aff_list::clear() const
17022 {
17023   auto res = isl_pw_multi_aff_list_clear(copy());
17024   return manage(res);
17025 }
17026 
concat(isl::pw_multi_aff_list list2)17027 isl::pw_multi_aff_list pw_multi_aff_list::concat(isl::pw_multi_aff_list list2) const
17028 {
17029   auto res = isl_pw_multi_aff_list_concat(copy(), list2.release());
17030   return manage(res);
17031 }
17032 
drop(unsigned int first,unsigned int n)17033 isl::pw_multi_aff_list pw_multi_aff_list::drop(unsigned int first, unsigned int n) const
17034 {
17035   auto res = isl_pw_multi_aff_list_drop(copy(), first, n);
17036   return manage(res);
17037 }
17038 
foreach(const std::function<stat (isl::pw_multi_aff)> & fn)17039 stat pw_multi_aff_list::foreach(const std::function<stat(isl::pw_multi_aff)> &fn) const
17040 {
17041   struct fn_data {
17042     std::function<stat(isl::pw_multi_aff)> func;
17043   } fn_data = { fn };
17044   auto fn_lambda = [](isl_pw_multi_aff *arg_0, void *arg_1) -> isl_stat {
17045     auto *data = static_cast<struct fn_data *>(arg_1);
17046     auto ret = (data->func)(manage(arg_0));
17047     return ret.release();
17048   };
17049   auto res = isl_pw_multi_aff_list_foreach(get(), fn_lambda, &fn_data);
17050   return manage(res);
17051 }
17052 
insert(unsigned int pos,isl::pw_multi_aff el)17053 isl::pw_multi_aff_list pw_multi_aff_list::insert(unsigned int pos, isl::pw_multi_aff el) const
17054 {
17055   auto res = isl_pw_multi_aff_list_insert(copy(), pos, el.release());
17056   return manage(res);
17057 }
17058 
size()17059 class size pw_multi_aff_list::size() const
17060 {
17061   auto res = isl_pw_multi_aff_list_size(get());
17062   return manage(res);
17063 }
17064 
17065 inline std::ostream &operator<<(std::ostream &os, const pw_multi_aff_list &obj)
17066 {
17067   char *str = isl_pw_multi_aff_list_to_str(obj.get());
17068   if (!str) {
17069     os.setstate(std::ios_base::badbit);
17070     return os;
17071   }
17072   os << str;
17073   free(str);
17074   return os;
17075 }
17076 
17077 // implementations for isl::schedule
manage(__isl_take isl_schedule * ptr)17078 schedule manage(__isl_take isl_schedule *ptr) {
17079   return schedule(ptr);
17080 }
manage_copy(__isl_keep isl_schedule * ptr)17081 schedule manage_copy(__isl_keep isl_schedule *ptr) {
17082   ptr = isl_schedule_copy(ptr);
17083   return schedule(ptr);
17084 }
17085 
schedule()17086 schedule::schedule()
17087     : ptr(nullptr) {}
17088 
schedule(const schedule & obj)17089 schedule::schedule(const schedule &obj)
17090     : ptr(nullptr)
17091 {
17092   ptr = obj.copy();
17093 }
17094 
schedule(__isl_take isl_schedule * ptr)17095 schedule::schedule(__isl_take isl_schedule *ptr)
17096     : ptr(ptr) {}
17097 
schedule(isl::ctx ctx,const std::string & str)17098 schedule::schedule(isl::ctx ctx, const std::string &str)
17099 {
17100   auto res = isl_schedule_read_from_str(ctx.release(), str.c_str());
17101   ptr = res;
17102 }
17103 
17104 schedule &schedule::operator=(schedule obj) {
17105   std::swap(this->ptr, obj.ptr);
17106   return *this;
17107 }
17108 
~schedule()17109 schedule::~schedule() {
17110   if (ptr)
17111     isl_schedule_free(ptr);
17112 }
17113 
copy()17114 __isl_give isl_schedule *schedule::copy() const & {
17115   return isl_schedule_copy(ptr);
17116 }
17117 
get()17118 __isl_keep isl_schedule *schedule::get() const {
17119   return ptr;
17120 }
17121 
release()17122 __isl_give isl_schedule *schedule::release() {
17123   isl_schedule *tmp = ptr;
17124   ptr = nullptr;
17125   return tmp;
17126 }
17127 
is_null()17128 bool schedule::is_null() const {
17129   return ptr == nullptr;
17130 }
17131 
ctx()17132 isl::ctx schedule::ctx() const {
17133   return isl::ctx(isl_schedule_get_ctx(ptr));
17134 }
17135 
align_params(isl::space space)17136 isl::schedule schedule::align_params(isl::space space) const
17137 {
17138   auto res = isl_schedule_align_params(copy(), space.release());
17139   return manage(res);
17140 }
17141 
domain()17142 isl::union_set schedule::domain() const
17143 {
17144   auto res = isl_schedule_get_domain(get());
17145   return manage(res);
17146 }
17147 
get_domain()17148 isl::union_set schedule::get_domain() const
17149 {
17150   return domain();
17151 }
17152 
from_domain(isl::union_set domain)17153 isl::schedule schedule::from_domain(isl::union_set domain)
17154 {
17155   auto res = isl_schedule_from_domain(domain.release());
17156   return manage(res);
17157 }
17158 
gist_domain_params(isl::set context)17159 isl::schedule schedule::gist_domain_params(isl::set context) const
17160 {
17161   auto res = isl_schedule_gist_domain_params(copy(), context.release());
17162   return manage(res);
17163 }
17164 
insert_partial_schedule(isl::multi_union_pw_aff partial)17165 isl::schedule schedule::insert_partial_schedule(isl::multi_union_pw_aff partial) const
17166 {
17167   auto res = isl_schedule_insert_partial_schedule(copy(), partial.release());
17168   return manage(res);
17169 }
17170 
intersect_domain(isl::union_set domain)17171 isl::schedule schedule::intersect_domain(isl::union_set domain) const
17172 {
17173   auto res = isl_schedule_intersect_domain(copy(), domain.release());
17174   return manage(res);
17175 }
17176 
map()17177 isl::union_map schedule::map() const
17178 {
17179   auto res = isl_schedule_get_map(get());
17180   return manage(res);
17181 }
17182 
get_map()17183 isl::union_map schedule::get_map() const
17184 {
17185   return map();
17186 }
17187 
pullback(isl::union_pw_multi_aff upma)17188 isl::schedule schedule::pullback(isl::union_pw_multi_aff upma) const
17189 {
17190   auto res = isl_schedule_pullback_union_pw_multi_aff(copy(), upma.release());
17191   return manage(res);
17192 }
17193 
root()17194 isl::schedule_node schedule::root() const
17195 {
17196   auto res = isl_schedule_get_root(get());
17197   return manage(res);
17198 }
17199 
get_root()17200 isl::schedule_node schedule::get_root() const
17201 {
17202   return root();
17203 }
17204 
sequence(isl::schedule schedule2)17205 isl::schedule schedule::sequence(isl::schedule schedule2) const
17206 {
17207   auto res = isl_schedule_sequence(copy(), schedule2.release());
17208   return manage(res);
17209 }
17210 
17211 inline std::ostream &operator<<(std::ostream &os, const schedule &obj)
17212 {
17213   char *str = isl_schedule_to_str(obj.get());
17214   if (!str) {
17215     os.setstate(std::ios_base::badbit);
17216     return os;
17217   }
17218   os << str;
17219   free(str);
17220   return os;
17221 }
17222 
17223 // implementations for isl::schedule_constraints
manage(__isl_take isl_schedule_constraints * ptr)17224 schedule_constraints manage(__isl_take isl_schedule_constraints *ptr) {
17225   return schedule_constraints(ptr);
17226 }
manage_copy(__isl_keep isl_schedule_constraints * ptr)17227 schedule_constraints manage_copy(__isl_keep isl_schedule_constraints *ptr) {
17228   ptr = isl_schedule_constraints_copy(ptr);
17229   return schedule_constraints(ptr);
17230 }
17231 
schedule_constraints()17232 schedule_constraints::schedule_constraints()
17233     : ptr(nullptr) {}
17234 
schedule_constraints(const schedule_constraints & obj)17235 schedule_constraints::schedule_constraints(const schedule_constraints &obj)
17236     : ptr(nullptr)
17237 {
17238   ptr = obj.copy();
17239 }
17240 
schedule_constraints(__isl_take isl_schedule_constraints * ptr)17241 schedule_constraints::schedule_constraints(__isl_take isl_schedule_constraints *ptr)
17242     : ptr(ptr) {}
17243 
schedule_constraints(isl::ctx ctx,const std::string & str)17244 schedule_constraints::schedule_constraints(isl::ctx ctx, const std::string &str)
17245 {
17246   auto res = isl_schedule_constraints_read_from_str(ctx.release(), str.c_str());
17247   ptr = res;
17248 }
17249 
17250 schedule_constraints &schedule_constraints::operator=(schedule_constraints obj) {
17251   std::swap(this->ptr, obj.ptr);
17252   return *this;
17253 }
17254 
~schedule_constraints()17255 schedule_constraints::~schedule_constraints() {
17256   if (ptr)
17257     isl_schedule_constraints_free(ptr);
17258 }
17259 
copy()17260 __isl_give isl_schedule_constraints *schedule_constraints::copy() const & {
17261   return isl_schedule_constraints_copy(ptr);
17262 }
17263 
get()17264 __isl_keep isl_schedule_constraints *schedule_constraints::get() const {
17265   return ptr;
17266 }
17267 
release()17268 __isl_give isl_schedule_constraints *schedule_constraints::release() {
17269   isl_schedule_constraints *tmp = ptr;
17270   ptr = nullptr;
17271   return tmp;
17272 }
17273 
is_null()17274 bool schedule_constraints::is_null() const {
17275   return ptr == nullptr;
17276 }
17277 
ctx()17278 isl::ctx schedule_constraints::ctx() const {
17279   return isl::ctx(isl_schedule_constraints_get_ctx(ptr));
17280 }
17281 
coincidence()17282 isl::union_map schedule_constraints::coincidence() const
17283 {
17284   auto res = isl_schedule_constraints_get_coincidence(get());
17285   return manage(res);
17286 }
17287 
get_coincidence()17288 isl::union_map schedule_constraints::get_coincidence() const
17289 {
17290   return coincidence();
17291 }
17292 
compute_schedule()17293 isl::schedule schedule_constraints::compute_schedule() const
17294 {
17295   auto res = isl_schedule_constraints_compute_schedule(copy());
17296   return manage(res);
17297 }
17298 
conditional_validity()17299 isl::union_map schedule_constraints::conditional_validity() const
17300 {
17301   auto res = isl_schedule_constraints_get_conditional_validity(get());
17302   return manage(res);
17303 }
17304 
get_conditional_validity()17305 isl::union_map schedule_constraints::get_conditional_validity() const
17306 {
17307   return conditional_validity();
17308 }
17309 
conditional_validity_condition()17310 isl::union_map schedule_constraints::conditional_validity_condition() const
17311 {
17312   auto res = isl_schedule_constraints_get_conditional_validity_condition(get());
17313   return manage(res);
17314 }
17315 
get_conditional_validity_condition()17316 isl::union_map schedule_constraints::get_conditional_validity_condition() const
17317 {
17318   return conditional_validity_condition();
17319 }
17320 
context()17321 isl::set schedule_constraints::context() const
17322 {
17323   auto res = isl_schedule_constraints_get_context(get());
17324   return manage(res);
17325 }
17326 
get_context()17327 isl::set schedule_constraints::get_context() const
17328 {
17329   return context();
17330 }
17331 
domain()17332 isl::union_set schedule_constraints::domain() const
17333 {
17334   auto res = isl_schedule_constraints_get_domain(get());
17335   return manage(res);
17336 }
17337 
get_domain()17338 isl::union_set schedule_constraints::get_domain() const
17339 {
17340   return domain();
17341 }
17342 
on_domain(isl::union_set domain)17343 isl::schedule_constraints schedule_constraints::on_domain(isl::union_set domain)
17344 {
17345   auto res = isl_schedule_constraints_on_domain(domain.release());
17346   return manage(res);
17347 }
17348 
proximity()17349 isl::union_map schedule_constraints::proximity() const
17350 {
17351   auto res = isl_schedule_constraints_get_proximity(get());
17352   return manage(res);
17353 }
17354 
get_proximity()17355 isl::union_map schedule_constraints::get_proximity() const
17356 {
17357   return proximity();
17358 }
17359 
set_coincidence(isl::union_map coincidence)17360 isl::schedule_constraints schedule_constraints::set_coincidence(isl::union_map coincidence) const
17361 {
17362   auto res = isl_schedule_constraints_set_coincidence(copy(), coincidence.release());
17363   return manage(res);
17364 }
17365 
set_conditional_validity(isl::union_map condition,isl::union_map validity)17366 isl::schedule_constraints schedule_constraints::set_conditional_validity(isl::union_map condition, isl::union_map validity) const
17367 {
17368   auto res = isl_schedule_constraints_set_conditional_validity(copy(), condition.release(), validity.release());
17369   return manage(res);
17370 }
17371 
set_context(isl::set context)17372 isl::schedule_constraints schedule_constraints::set_context(isl::set context) const
17373 {
17374   auto res = isl_schedule_constraints_set_context(copy(), context.release());
17375   return manage(res);
17376 }
17377 
set_proximity(isl::union_map proximity)17378 isl::schedule_constraints schedule_constraints::set_proximity(isl::union_map proximity) const
17379 {
17380   auto res = isl_schedule_constraints_set_proximity(copy(), proximity.release());
17381   return manage(res);
17382 }
17383 
set_validity(isl::union_map validity)17384 isl::schedule_constraints schedule_constraints::set_validity(isl::union_map validity) const
17385 {
17386   auto res = isl_schedule_constraints_set_validity(copy(), validity.release());
17387   return manage(res);
17388 }
17389 
validity()17390 isl::union_map schedule_constraints::validity() const
17391 {
17392   auto res = isl_schedule_constraints_get_validity(get());
17393   return manage(res);
17394 }
17395 
get_validity()17396 isl::union_map schedule_constraints::get_validity() const
17397 {
17398   return validity();
17399 }
17400 
17401 inline std::ostream &operator<<(std::ostream &os, const schedule_constraints &obj)
17402 {
17403   char *str = isl_schedule_constraints_to_str(obj.get());
17404   if (!str) {
17405     os.setstate(std::ios_base::badbit);
17406     return os;
17407   }
17408   os << str;
17409   free(str);
17410   return os;
17411 }
17412 
17413 // implementations for isl::schedule_node
manage(__isl_take isl_schedule_node * ptr)17414 schedule_node manage(__isl_take isl_schedule_node *ptr) {
17415   return schedule_node(ptr);
17416 }
manage_copy(__isl_keep isl_schedule_node * ptr)17417 schedule_node manage_copy(__isl_keep isl_schedule_node *ptr) {
17418   ptr = isl_schedule_node_copy(ptr);
17419   return schedule_node(ptr);
17420 }
17421 
schedule_node()17422 schedule_node::schedule_node()
17423     : ptr(nullptr) {}
17424 
schedule_node(const schedule_node & obj)17425 schedule_node::schedule_node(const schedule_node &obj)
17426     : ptr(nullptr)
17427 {
17428   ptr = obj.copy();
17429 }
17430 
schedule_node(__isl_take isl_schedule_node * ptr)17431 schedule_node::schedule_node(__isl_take isl_schedule_node *ptr)
17432     : ptr(ptr) {}
17433 
17434 schedule_node &schedule_node::operator=(schedule_node obj) {
17435   std::swap(this->ptr, obj.ptr);
17436   return *this;
17437 }
17438 
~schedule_node()17439 schedule_node::~schedule_node() {
17440   if (ptr)
17441     isl_schedule_node_free(ptr);
17442 }
17443 
copy()17444 __isl_give isl_schedule_node *schedule_node::copy() const & {
17445   return isl_schedule_node_copy(ptr);
17446 }
17447 
get()17448 __isl_keep isl_schedule_node *schedule_node::get() const {
17449   return ptr;
17450 }
17451 
release()17452 __isl_give isl_schedule_node *schedule_node::release() {
17453   isl_schedule_node *tmp = ptr;
17454   ptr = nullptr;
17455   return tmp;
17456 }
17457 
is_null()17458 bool schedule_node::is_null() const {
17459   return ptr == nullptr;
17460 }
17461 
17462 template <typename T, typename>
isa_type(T subtype)17463 boolean schedule_node::isa_type(T subtype) const
17464 {
17465   if (is_null())
17466     return boolean();
17467   return isl_schedule_node_get_type(get()) == subtype;
17468 }
17469 template <class T>
isa()17470 boolean schedule_node::isa() const
17471 {
17472   return isa_type<decltype(T::type)>(T::type);
17473 }
17474 template <class T>
as()17475 T schedule_node::as() const
17476 {
17477  if (isa<T>().is_false())
17478     isl_die(ctx().get(), isl_error_invalid, "not an object of the requested subtype", return T());
17479   return T(copy());
17480 }
17481 
ctx()17482 isl::ctx schedule_node::ctx() const {
17483   return isl::ctx(isl_schedule_node_get_ctx(ptr));
17484 }
17485 
ancestor(int generation)17486 isl::schedule_node schedule_node::ancestor(int generation) const
17487 {
17488   auto res = isl_schedule_node_ancestor(copy(), generation);
17489   return manage(res);
17490 }
17491 
ancestor_child_position(const isl::schedule_node & ancestor)17492 class size schedule_node::ancestor_child_position(const isl::schedule_node &ancestor) const
17493 {
17494   auto res = isl_schedule_node_get_ancestor_child_position(get(), ancestor.get());
17495   return manage(res);
17496 }
17497 
get_ancestor_child_position(const isl::schedule_node & ancestor)17498 class size schedule_node::get_ancestor_child_position(const isl::schedule_node &ancestor) const
17499 {
17500   return ancestor_child_position(ancestor);
17501 }
17502 
child(int pos)17503 isl::schedule_node schedule_node::child(int pos) const
17504 {
17505   auto res = isl_schedule_node_child(copy(), pos);
17506   return manage(res);
17507 }
17508 
child_position()17509 class size schedule_node::child_position() const
17510 {
17511   auto res = isl_schedule_node_get_child_position(get());
17512   return manage(res);
17513 }
17514 
get_child_position()17515 class size schedule_node::get_child_position() const
17516 {
17517   return child_position();
17518 }
17519 
domain()17520 isl::union_set schedule_node::domain() const
17521 {
17522   auto res = isl_schedule_node_get_domain(get());
17523   return manage(res);
17524 }
17525 
get_domain()17526 isl::union_set schedule_node::get_domain() const
17527 {
17528   return domain();
17529 }
17530 
every_descendant(const std::function<boolean (isl::schedule_node)> & test)17531 boolean schedule_node::every_descendant(const std::function<boolean(isl::schedule_node)> &test) const
17532 {
17533   struct test_data {
17534     std::function<boolean(isl::schedule_node)> func;
17535   } test_data = { test };
17536   auto test_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_bool {
17537     auto *data = static_cast<struct test_data *>(arg_1);
17538     auto ret = (data->func)(manage_copy(arg_0));
17539     return ret.release();
17540   };
17541   auto res = isl_schedule_node_every_descendant(get(), test_lambda, &test_data);
17542   return manage(res);
17543 }
17544 
first_child()17545 isl::schedule_node schedule_node::first_child() const
17546 {
17547   auto res = isl_schedule_node_first_child(copy());
17548   return manage(res);
17549 }
17550 
foreach_ancestor_top_down(const std::function<stat (isl::schedule_node)> & fn)17551 stat schedule_node::foreach_ancestor_top_down(const std::function<stat(isl::schedule_node)> &fn) const
17552 {
17553   struct fn_data {
17554     std::function<stat(isl::schedule_node)> func;
17555   } fn_data = { fn };
17556   auto fn_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_stat {
17557     auto *data = static_cast<struct fn_data *>(arg_1);
17558     auto ret = (data->func)(manage_copy(arg_0));
17559     return ret.release();
17560   };
17561   auto res = isl_schedule_node_foreach_ancestor_top_down(get(), fn_lambda, &fn_data);
17562   return manage(res);
17563 }
17564 
foreach_descendant_top_down(const std::function<boolean (isl::schedule_node)> & fn)17565 stat schedule_node::foreach_descendant_top_down(const std::function<boolean(isl::schedule_node)> &fn) const
17566 {
17567   struct fn_data {
17568     std::function<boolean(isl::schedule_node)> func;
17569   } fn_data = { fn };
17570   auto fn_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_bool {
17571     auto *data = static_cast<struct fn_data *>(arg_1);
17572     auto ret = (data->func)(manage_copy(arg_0));
17573     return ret.release();
17574   };
17575   auto res = isl_schedule_node_foreach_descendant_top_down(get(), fn_lambda, &fn_data);
17576   return manage(res);
17577 }
17578 
from_domain(isl::union_set domain)17579 isl::schedule_node schedule_node::from_domain(isl::union_set domain)
17580 {
17581   auto res = isl_schedule_node_from_domain(domain.release());
17582   return manage(res);
17583 }
17584 
from_extension(isl::union_map extension)17585 isl::schedule_node schedule_node::from_extension(isl::union_map extension)
17586 {
17587   auto res = isl_schedule_node_from_extension(extension.release());
17588   return manage(res);
17589 }
17590 
graft_after(isl::schedule_node graft)17591 isl::schedule_node schedule_node::graft_after(isl::schedule_node graft) const
17592 {
17593   auto res = isl_schedule_node_graft_after(copy(), graft.release());
17594   return manage(res);
17595 }
17596 
graft_before(isl::schedule_node graft)17597 isl::schedule_node schedule_node::graft_before(isl::schedule_node graft) const
17598 {
17599   auto res = isl_schedule_node_graft_before(copy(), graft.release());
17600   return manage(res);
17601 }
17602 
has_children()17603 boolean schedule_node::has_children() const
17604 {
17605   auto res = isl_schedule_node_has_children(get());
17606   return manage(res);
17607 }
17608 
has_next_sibling()17609 boolean schedule_node::has_next_sibling() const
17610 {
17611   auto res = isl_schedule_node_has_next_sibling(get());
17612   return manage(res);
17613 }
17614 
has_parent()17615 boolean schedule_node::has_parent() const
17616 {
17617   auto res = isl_schedule_node_has_parent(get());
17618   return manage(res);
17619 }
17620 
has_previous_sibling()17621 boolean schedule_node::has_previous_sibling() const
17622 {
17623   auto res = isl_schedule_node_has_previous_sibling(get());
17624   return manage(res);
17625 }
17626 
insert_context(isl::set context)17627 isl::schedule_node schedule_node::insert_context(isl::set context) const
17628 {
17629   auto res = isl_schedule_node_insert_context(copy(), context.release());
17630   return manage(res);
17631 }
17632 
insert_filter(isl::union_set filter)17633 isl::schedule_node schedule_node::insert_filter(isl::union_set filter) const
17634 {
17635   auto res = isl_schedule_node_insert_filter(copy(), filter.release());
17636   return manage(res);
17637 }
17638 
insert_guard(isl::set context)17639 isl::schedule_node schedule_node::insert_guard(isl::set context) const
17640 {
17641   auto res = isl_schedule_node_insert_guard(copy(), context.release());
17642   return manage(res);
17643 }
17644 
insert_mark(isl::id mark)17645 isl::schedule_node schedule_node::insert_mark(isl::id mark) const
17646 {
17647   auto res = isl_schedule_node_insert_mark(copy(), mark.release());
17648   return manage(res);
17649 }
17650 
insert_mark(const std::string & mark)17651 isl::schedule_node schedule_node::insert_mark(const std::string &mark) const
17652 {
17653   return this->insert_mark(isl::id(ctx(), mark));
17654 }
17655 
insert_partial_schedule(isl::multi_union_pw_aff schedule)17656 isl::schedule_node schedule_node::insert_partial_schedule(isl::multi_union_pw_aff schedule) const
17657 {
17658   auto res = isl_schedule_node_insert_partial_schedule(copy(), schedule.release());
17659   return manage(res);
17660 }
17661 
insert_sequence(isl::union_set_list filters)17662 isl::schedule_node schedule_node::insert_sequence(isl::union_set_list filters) const
17663 {
17664   auto res = isl_schedule_node_insert_sequence(copy(), filters.release());
17665   return manage(res);
17666 }
17667 
insert_set(isl::union_set_list filters)17668 isl::schedule_node schedule_node::insert_set(isl::union_set_list filters) const
17669 {
17670   auto res = isl_schedule_node_insert_set(copy(), filters.release());
17671   return manage(res);
17672 }
17673 
is_equal(const isl::schedule_node & node2)17674 boolean schedule_node::is_equal(const isl::schedule_node &node2) const
17675 {
17676   auto res = isl_schedule_node_is_equal(get(), node2.get());
17677   return manage(res);
17678 }
17679 
is_subtree_anchored()17680 boolean schedule_node::is_subtree_anchored() const
17681 {
17682   auto res = isl_schedule_node_is_subtree_anchored(get());
17683   return manage(res);
17684 }
17685 
map_descendant_bottom_up(const std::function<isl::schedule_node (isl::schedule_node)> & fn)17686 isl::schedule_node schedule_node::map_descendant_bottom_up(const std::function<isl::schedule_node(isl::schedule_node)> &fn) const
17687 {
17688   struct fn_data {
17689     std::function<isl::schedule_node(isl::schedule_node)> func;
17690   } fn_data = { fn };
17691   auto fn_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_schedule_node * {
17692     auto *data = static_cast<struct fn_data *>(arg_1);
17693     auto ret = (data->func)(manage(arg_0));
17694     return ret.release();
17695   };
17696   auto res = isl_schedule_node_map_descendant_bottom_up(copy(), fn_lambda, &fn_data);
17697   return manage(res);
17698 }
17699 
n_children()17700 class size schedule_node::n_children() const
17701 {
17702   auto res = isl_schedule_node_n_children(get());
17703   return manage(res);
17704 }
17705 
next_sibling()17706 isl::schedule_node schedule_node::next_sibling() const
17707 {
17708   auto res = isl_schedule_node_next_sibling(copy());
17709   return manage(res);
17710 }
17711 
order_after(isl::union_set filter)17712 isl::schedule_node schedule_node::order_after(isl::union_set filter) const
17713 {
17714   auto res = isl_schedule_node_order_after(copy(), filter.release());
17715   return manage(res);
17716 }
17717 
order_before(isl::union_set filter)17718 isl::schedule_node schedule_node::order_before(isl::union_set filter) const
17719 {
17720   auto res = isl_schedule_node_order_before(copy(), filter.release());
17721   return manage(res);
17722 }
17723 
parent()17724 isl::schedule_node schedule_node::parent() const
17725 {
17726   auto res = isl_schedule_node_parent(copy());
17727   return manage(res);
17728 }
17729 
prefix_schedule_multi_union_pw_aff()17730 isl::multi_union_pw_aff schedule_node::prefix_schedule_multi_union_pw_aff() const
17731 {
17732   auto res = isl_schedule_node_get_prefix_schedule_multi_union_pw_aff(get());
17733   return manage(res);
17734 }
17735 
get_prefix_schedule_multi_union_pw_aff()17736 isl::multi_union_pw_aff schedule_node::get_prefix_schedule_multi_union_pw_aff() const
17737 {
17738   return prefix_schedule_multi_union_pw_aff();
17739 }
17740 
prefix_schedule_relation()17741 isl::union_map schedule_node::prefix_schedule_relation() const
17742 {
17743   auto res = isl_schedule_node_get_prefix_schedule_relation(get());
17744   return manage(res);
17745 }
17746 
get_prefix_schedule_relation()17747 isl::union_map schedule_node::get_prefix_schedule_relation() const
17748 {
17749   return prefix_schedule_relation();
17750 }
17751 
prefix_schedule_union_map()17752 isl::union_map schedule_node::prefix_schedule_union_map() const
17753 {
17754   auto res = isl_schedule_node_get_prefix_schedule_union_map(get());
17755   return manage(res);
17756 }
17757 
get_prefix_schedule_union_map()17758 isl::union_map schedule_node::get_prefix_schedule_union_map() const
17759 {
17760   return prefix_schedule_union_map();
17761 }
17762 
prefix_schedule_union_pw_multi_aff()17763 isl::union_pw_multi_aff schedule_node::prefix_schedule_union_pw_multi_aff() const
17764 {
17765   auto res = isl_schedule_node_get_prefix_schedule_union_pw_multi_aff(get());
17766   return manage(res);
17767 }
17768 
get_prefix_schedule_union_pw_multi_aff()17769 isl::union_pw_multi_aff schedule_node::get_prefix_schedule_union_pw_multi_aff() const
17770 {
17771   return prefix_schedule_union_pw_multi_aff();
17772 }
17773 
previous_sibling()17774 isl::schedule_node schedule_node::previous_sibling() const
17775 {
17776   auto res = isl_schedule_node_previous_sibling(copy());
17777   return manage(res);
17778 }
17779 
root()17780 isl::schedule_node schedule_node::root() const
17781 {
17782   auto res = isl_schedule_node_root(copy());
17783   return manage(res);
17784 }
17785 
schedule()17786 isl::schedule schedule_node::schedule() const
17787 {
17788   auto res = isl_schedule_node_get_schedule(get());
17789   return manage(res);
17790 }
17791 
get_schedule()17792 isl::schedule schedule_node::get_schedule() const
17793 {
17794   return schedule();
17795 }
17796 
schedule_depth()17797 class size schedule_node::schedule_depth() const
17798 {
17799   auto res = isl_schedule_node_get_schedule_depth(get());
17800   return manage(res);
17801 }
17802 
get_schedule_depth()17803 class size schedule_node::get_schedule_depth() const
17804 {
17805   return schedule_depth();
17806 }
17807 
shared_ancestor(const isl::schedule_node & node2)17808 isl::schedule_node schedule_node::shared_ancestor(const isl::schedule_node &node2) const
17809 {
17810   auto res = isl_schedule_node_get_shared_ancestor(get(), node2.get());
17811   return manage(res);
17812 }
17813 
get_shared_ancestor(const isl::schedule_node & node2)17814 isl::schedule_node schedule_node::get_shared_ancestor(const isl::schedule_node &node2) const
17815 {
17816   return shared_ancestor(node2);
17817 }
17818 
tree_depth()17819 class size schedule_node::tree_depth() const
17820 {
17821   auto res = isl_schedule_node_get_tree_depth(get());
17822   return manage(res);
17823 }
17824 
get_tree_depth()17825 class size schedule_node::get_tree_depth() const
17826 {
17827   return tree_depth();
17828 }
17829 
universe_domain()17830 isl::union_set schedule_node::universe_domain() const
17831 {
17832   auto res = isl_schedule_node_get_universe_domain(get());
17833   return manage(res);
17834 }
17835 
get_universe_domain()17836 isl::union_set schedule_node::get_universe_domain() const
17837 {
17838   return universe_domain();
17839 }
17840 
17841 inline std::ostream &operator<<(std::ostream &os, const schedule_node &obj)
17842 {
17843   char *str = isl_schedule_node_to_str(obj.get());
17844   if (!str) {
17845     os.setstate(std::ios_base::badbit);
17846     return os;
17847   }
17848   os << str;
17849   free(str);
17850   return os;
17851 }
17852 
17853 // implementations for isl::schedule_node_band
schedule_node_band()17854 schedule_node_band::schedule_node_band()
17855     : schedule_node() {}
17856 
schedule_node_band(const schedule_node_band & obj)17857 schedule_node_band::schedule_node_band(const schedule_node_band &obj)
17858     : schedule_node(obj)
17859 {
17860 }
17861 
schedule_node_band(__isl_take isl_schedule_node * ptr)17862 schedule_node_band::schedule_node_band(__isl_take isl_schedule_node *ptr)
17863     : schedule_node(ptr) {}
17864 
17865 schedule_node_band &schedule_node_band::operator=(schedule_node_band obj) {
17866   std::swap(this->ptr, obj.ptr);
17867   return *this;
17868 }
17869 
ctx()17870 isl::ctx schedule_node_band::ctx() const {
17871   return isl::ctx(isl_schedule_node_get_ctx(ptr));
17872 }
17873 
ast_build_options()17874 isl::union_set schedule_node_band::ast_build_options() const
17875 {
17876   auto res = isl_schedule_node_band_get_ast_build_options(get());
17877   return manage(res);
17878 }
17879 
get_ast_build_options()17880 isl::union_set schedule_node_band::get_ast_build_options() const
17881 {
17882   return ast_build_options();
17883 }
17884 
ast_isolate_option()17885 isl::set schedule_node_band::ast_isolate_option() const
17886 {
17887   auto res = isl_schedule_node_band_get_ast_isolate_option(get());
17888   return manage(res);
17889 }
17890 
get_ast_isolate_option()17891 isl::set schedule_node_band::get_ast_isolate_option() const
17892 {
17893   return ast_isolate_option();
17894 }
17895 
member_get_coincident(int pos)17896 boolean schedule_node_band::member_get_coincident(int pos) const
17897 {
17898   auto res = isl_schedule_node_band_member_get_coincident(get(), pos);
17899   return manage(res);
17900 }
17901 
member_set_coincident(int pos,int coincident)17902 schedule_node_band schedule_node_band::member_set_coincident(int pos, int coincident) const
17903 {
17904   auto res = isl_schedule_node_band_member_set_coincident(copy(), pos, coincident);
17905   return manage(res).as<schedule_node_band>();
17906 }
17907 
mod(isl::multi_val mv)17908 schedule_node_band schedule_node_band::mod(isl::multi_val mv) const
17909 {
17910   auto res = isl_schedule_node_band_mod(copy(), mv.release());
17911   return manage(res).as<schedule_node_band>();
17912 }
17913 
n_member()17914 class size schedule_node_band::n_member() const
17915 {
17916   auto res = isl_schedule_node_band_n_member(get());
17917   return manage(res);
17918 }
17919 
partial_schedule()17920 isl::multi_union_pw_aff schedule_node_band::partial_schedule() const
17921 {
17922   auto res = isl_schedule_node_band_get_partial_schedule(get());
17923   return manage(res);
17924 }
17925 
get_partial_schedule()17926 isl::multi_union_pw_aff schedule_node_band::get_partial_schedule() const
17927 {
17928   return partial_schedule();
17929 }
17930 
permutable()17931 boolean schedule_node_band::permutable() const
17932 {
17933   auto res = isl_schedule_node_band_get_permutable(get());
17934   return manage(res);
17935 }
17936 
get_permutable()17937 boolean schedule_node_band::get_permutable() const
17938 {
17939   return permutable();
17940 }
17941 
scale(isl::multi_val mv)17942 schedule_node_band schedule_node_band::scale(isl::multi_val mv) const
17943 {
17944   auto res = isl_schedule_node_band_scale(copy(), mv.release());
17945   return manage(res).as<schedule_node_band>();
17946 }
17947 
scale_down(isl::multi_val mv)17948 schedule_node_band schedule_node_band::scale_down(isl::multi_val mv) const
17949 {
17950   auto res = isl_schedule_node_band_scale_down(copy(), mv.release());
17951   return manage(res).as<schedule_node_band>();
17952 }
17953 
set_ast_build_options(isl::union_set options)17954 schedule_node_band schedule_node_band::set_ast_build_options(isl::union_set options) const
17955 {
17956   auto res = isl_schedule_node_band_set_ast_build_options(copy(), options.release());
17957   return manage(res).as<schedule_node_band>();
17958 }
17959 
set_permutable(int permutable)17960 schedule_node_band schedule_node_band::set_permutable(int permutable) const
17961 {
17962   auto res = isl_schedule_node_band_set_permutable(copy(), permutable);
17963   return manage(res).as<schedule_node_band>();
17964 }
17965 
shift(isl::multi_union_pw_aff shift)17966 schedule_node_band schedule_node_band::shift(isl::multi_union_pw_aff shift) const
17967 {
17968   auto res = isl_schedule_node_band_shift(copy(), shift.release());
17969   return manage(res).as<schedule_node_band>();
17970 }
17971 
split(int pos)17972 schedule_node_band schedule_node_band::split(int pos) const
17973 {
17974   auto res = isl_schedule_node_band_split(copy(), pos);
17975   return manage(res).as<schedule_node_band>();
17976 }
17977 
tile(isl::multi_val sizes)17978 schedule_node_band schedule_node_band::tile(isl::multi_val sizes) const
17979 {
17980   auto res = isl_schedule_node_band_tile(copy(), sizes.release());
17981   return manage(res).as<schedule_node_band>();
17982 }
17983 
member_set_ast_loop_default(int pos)17984 schedule_node_band schedule_node_band::member_set_ast_loop_default(int pos) const
17985 {
17986   auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_default);
17987   return manage(res).as<schedule_node_band>();
17988 }
17989 
member_set_ast_loop_atomic(int pos)17990 schedule_node_band schedule_node_band::member_set_ast_loop_atomic(int pos) const
17991 {
17992   auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_atomic);
17993   return manage(res).as<schedule_node_band>();
17994 }
17995 
member_set_ast_loop_unroll(int pos)17996 schedule_node_band schedule_node_band::member_set_ast_loop_unroll(int pos) const
17997 {
17998   auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_unroll);
17999   return manage(res).as<schedule_node_band>();
18000 }
18001 
member_set_ast_loop_separate(int pos)18002 schedule_node_band schedule_node_band::member_set_ast_loop_separate(int pos) const
18003 {
18004   auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_separate);
18005   return manage(res).as<schedule_node_band>();
18006 }
18007 
18008 inline std::ostream &operator<<(std::ostream &os, const schedule_node_band &obj)
18009 {
18010   char *str = isl_schedule_node_to_str(obj.get());
18011   if (!str) {
18012     os.setstate(std::ios_base::badbit);
18013     return os;
18014   }
18015   os << str;
18016   free(str);
18017   return os;
18018 }
18019 
18020 // implementations for isl::schedule_node_context
schedule_node_context()18021 schedule_node_context::schedule_node_context()
18022     : schedule_node() {}
18023 
schedule_node_context(const schedule_node_context & obj)18024 schedule_node_context::schedule_node_context(const schedule_node_context &obj)
18025     : schedule_node(obj)
18026 {
18027 }
18028 
schedule_node_context(__isl_take isl_schedule_node * ptr)18029 schedule_node_context::schedule_node_context(__isl_take isl_schedule_node *ptr)
18030     : schedule_node(ptr) {}
18031 
18032 schedule_node_context &schedule_node_context::operator=(schedule_node_context obj) {
18033   std::swap(this->ptr, obj.ptr);
18034   return *this;
18035 }
18036 
ctx()18037 isl::ctx schedule_node_context::ctx() const {
18038   return isl::ctx(isl_schedule_node_get_ctx(ptr));
18039 }
18040 
context()18041 isl::set schedule_node_context::context() const
18042 {
18043   auto res = isl_schedule_node_context_get_context(get());
18044   return manage(res);
18045 }
18046 
get_context()18047 isl::set schedule_node_context::get_context() const
18048 {
18049   return context();
18050 }
18051 
18052 inline std::ostream &operator<<(std::ostream &os, const schedule_node_context &obj)
18053 {
18054   char *str = isl_schedule_node_to_str(obj.get());
18055   if (!str) {
18056     os.setstate(std::ios_base::badbit);
18057     return os;
18058   }
18059   os << str;
18060   free(str);
18061   return os;
18062 }
18063 
18064 // implementations for isl::schedule_node_domain
schedule_node_domain()18065 schedule_node_domain::schedule_node_domain()
18066     : schedule_node() {}
18067 
schedule_node_domain(const schedule_node_domain & obj)18068 schedule_node_domain::schedule_node_domain(const schedule_node_domain &obj)
18069     : schedule_node(obj)
18070 {
18071 }
18072 
schedule_node_domain(__isl_take isl_schedule_node * ptr)18073 schedule_node_domain::schedule_node_domain(__isl_take isl_schedule_node *ptr)
18074     : schedule_node(ptr) {}
18075 
18076 schedule_node_domain &schedule_node_domain::operator=(schedule_node_domain obj) {
18077   std::swap(this->ptr, obj.ptr);
18078   return *this;
18079 }
18080 
ctx()18081 isl::ctx schedule_node_domain::ctx() const {
18082   return isl::ctx(isl_schedule_node_get_ctx(ptr));
18083 }
18084 
domain()18085 isl::union_set schedule_node_domain::domain() const
18086 {
18087   auto res = isl_schedule_node_domain_get_domain(get());
18088   return manage(res);
18089 }
18090 
get_domain()18091 isl::union_set schedule_node_domain::get_domain() const
18092 {
18093   return domain();
18094 }
18095 
18096 inline std::ostream &operator<<(std::ostream &os, const schedule_node_domain &obj)
18097 {
18098   char *str = isl_schedule_node_to_str(obj.get());
18099   if (!str) {
18100     os.setstate(std::ios_base::badbit);
18101     return os;
18102   }
18103   os << str;
18104   free(str);
18105   return os;
18106 }
18107 
18108 // implementations for isl::schedule_node_expansion
schedule_node_expansion()18109 schedule_node_expansion::schedule_node_expansion()
18110     : schedule_node() {}
18111 
schedule_node_expansion(const schedule_node_expansion & obj)18112 schedule_node_expansion::schedule_node_expansion(const schedule_node_expansion &obj)
18113     : schedule_node(obj)
18114 {
18115 }
18116 
schedule_node_expansion(__isl_take isl_schedule_node * ptr)18117 schedule_node_expansion::schedule_node_expansion(__isl_take isl_schedule_node *ptr)
18118     : schedule_node(ptr) {}
18119 
18120 schedule_node_expansion &schedule_node_expansion::operator=(schedule_node_expansion obj) {
18121   std::swap(this->ptr, obj.ptr);
18122   return *this;
18123 }
18124 
ctx()18125 isl::ctx schedule_node_expansion::ctx() const {
18126   return isl::ctx(isl_schedule_node_get_ctx(ptr));
18127 }
18128 
contraction()18129 isl::union_pw_multi_aff schedule_node_expansion::contraction() const
18130 {
18131   auto res = isl_schedule_node_expansion_get_contraction(get());
18132   return manage(res);
18133 }
18134 
get_contraction()18135 isl::union_pw_multi_aff schedule_node_expansion::get_contraction() const
18136 {
18137   return contraction();
18138 }
18139 
expansion()18140 isl::union_map schedule_node_expansion::expansion() const
18141 {
18142   auto res = isl_schedule_node_expansion_get_expansion(get());
18143   return manage(res);
18144 }
18145 
get_expansion()18146 isl::union_map schedule_node_expansion::get_expansion() const
18147 {
18148   return expansion();
18149 }
18150 
18151 inline std::ostream &operator<<(std::ostream &os, const schedule_node_expansion &obj)
18152 {
18153   char *str = isl_schedule_node_to_str(obj.get());
18154   if (!str) {
18155     os.setstate(std::ios_base::badbit);
18156     return os;
18157   }
18158   os << str;
18159   free(str);
18160   return os;
18161 }
18162 
18163 // implementations for isl::schedule_node_extension
schedule_node_extension()18164 schedule_node_extension::schedule_node_extension()
18165     : schedule_node() {}
18166 
schedule_node_extension(const schedule_node_extension & obj)18167 schedule_node_extension::schedule_node_extension(const schedule_node_extension &obj)
18168     : schedule_node(obj)
18169 {
18170 }
18171 
schedule_node_extension(__isl_take isl_schedule_node * ptr)18172 schedule_node_extension::schedule_node_extension(__isl_take isl_schedule_node *ptr)
18173     : schedule_node(ptr) {}
18174 
18175 schedule_node_extension &schedule_node_extension::operator=(schedule_node_extension obj) {
18176   std::swap(this->ptr, obj.ptr);
18177   return *this;
18178 }
18179 
ctx()18180 isl::ctx schedule_node_extension::ctx() const {
18181   return isl::ctx(isl_schedule_node_get_ctx(ptr));
18182 }
18183 
extension()18184 isl::union_map schedule_node_extension::extension() const
18185 {
18186   auto res = isl_schedule_node_extension_get_extension(get());
18187   return manage(res);
18188 }
18189 
get_extension()18190 isl::union_map schedule_node_extension::get_extension() const
18191 {
18192   return extension();
18193 }
18194 
18195 inline std::ostream &operator<<(std::ostream &os, const schedule_node_extension &obj)
18196 {
18197   char *str = isl_schedule_node_to_str(obj.get());
18198   if (!str) {
18199     os.setstate(std::ios_base::badbit);
18200     return os;
18201   }
18202   os << str;
18203   free(str);
18204   return os;
18205 }
18206 
18207 // implementations for isl::schedule_node_filter
schedule_node_filter()18208 schedule_node_filter::schedule_node_filter()
18209     : schedule_node() {}
18210 
schedule_node_filter(const schedule_node_filter & obj)18211 schedule_node_filter::schedule_node_filter(const schedule_node_filter &obj)
18212     : schedule_node(obj)
18213 {
18214 }
18215 
schedule_node_filter(__isl_take isl_schedule_node * ptr)18216 schedule_node_filter::schedule_node_filter(__isl_take isl_schedule_node *ptr)
18217     : schedule_node(ptr) {}
18218 
18219 schedule_node_filter &schedule_node_filter::operator=(schedule_node_filter obj) {
18220   std::swap(this->ptr, obj.ptr);
18221   return *this;
18222 }
18223 
ctx()18224 isl::ctx schedule_node_filter::ctx() const {
18225   return isl::ctx(isl_schedule_node_get_ctx(ptr));
18226 }
18227 
filter()18228 isl::union_set schedule_node_filter::filter() const
18229 {
18230   auto res = isl_schedule_node_filter_get_filter(get());
18231   return manage(res);
18232 }
18233 
get_filter()18234 isl::union_set schedule_node_filter::get_filter() const
18235 {
18236   return filter();
18237 }
18238 
18239 inline std::ostream &operator<<(std::ostream &os, const schedule_node_filter &obj)
18240 {
18241   char *str = isl_schedule_node_to_str(obj.get());
18242   if (!str) {
18243     os.setstate(std::ios_base::badbit);
18244     return os;
18245   }
18246   os << str;
18247   free(str);
18248   return os;
18249 }
18250 
18251 // implementations for isl::schedule_node_guard
schedule_node_guard()18252 schedule_node_guard::schedule_node_guard()
18253     : schedule_node() {}
18254 
schedule_node_guard(const schedule_node_guard & obj)18255 schedule_node_guard::schedule_node_guard(const schedule_node_guard &obj)
18256     : schedule_node(obj)
18257 {
18258 }
18259 
schedule_node_guard(__isl_take isl_schedule_node * ptr)18260 schedule_node_guard::schedule_node_guard(__isl_take isl_schedule_node *ptr)
18261     : schedule_node(ptr) {}
18262 
18263 schedule_node_guard &schedule_node_guard::operator=(schedule_node_guard obj) {
18264   std::swap(this->ptr, obj.ptr);
18265   return *this;
18266 }
18267 
ctx()18268 isl::ctx schedule_node_guard::ctx() const {
18269   return isl::ctx(isl_schedule_node_get_ctx(ptr));
18270 }
18271 
guard()18272 isl::set schedule_node_guard::guard() const
18273 {
18274   auto res = isl_schedule_node_guard_get_guard(get());
18275   return manage(res);
18276 }
18277 
get_guard()18278 isl::set schedule_node_guard::get_guard() const
18279 {
18280   return guard();
18281 }
18282 
18283 inline std::ostream &operator<<(std::ostream &os, const schedule_node_guard &obj)
18284 {
18285   char *str = isl_schedule_node_to_str(obj.get());
18286   if (!str) {
18287     os.setstate(std::ios_base::badbit);
18288     return os;
18289   }
18290   os << str;
18291   free(str);
18292   return os;
18293 }
18294 
18295 // implementations for isl::schedule_node_leaf
schedule_node_leaf()18296 schedule_node_leaf::schedule_node_leaf()
18297     : schedule_node() {}
18298 
schedule_node_leaf(const schedule_node_leaf & obj)18299 schedule_node_leaf::schedule_node_leaf(const schedule_node_leaf &obj)
18300     : schedule_node(obj)
18301 {
18302 }
18303 
schedule_node_leaf(__isl_take isl_schedule_node * ptr)18304 schedule_node_leaf::schedule_node_leaf(__isl_take isl_schedule_node *ptr)
18305     : schedule_node(ptr) {}
18306 
18307 schedule_node_leaf &schedule_node_leaf::operator=(schedule_node_leaf obj) {
18308   std::swap(this->ptr, obj.ptr);
18309   return *this;
18310 }
18311 
ctx()18312 isl::ctx schedule_node_leaf::ctx() const {
18313   return isl::ctx(isl_schedule_node_get_ctx(ptr));
18314 }
18315 
18316 inline std::ostream &operator<<(std::ostream &os, const schedule_node_leaf &obj)
18317 {
18318   char *str = isl_schedule_node_to_str(obj.get());
18319   if (!str) {
18320     os.setstate(std::ios_base::badbit);
18321     return os;
18322   }
18323   os << str;
18324   free(str);
18325   return os;
18326 }
18327 
18328 // implementations for isl::schedule_node_mark
schedule_node_mark()18329 schedule_node_mark::schedule_node_mark()
18330     : schedule_node() {}
18331 
schedule_node_mark(const schedule_node_mark & obj)18332 schedule_node_mark::schedule_node_mark(const schedule_node_mark &obj)
18333     : schedule_node(obj)
18334 {
18335 }
18336 
schedule_node_mark(__isl_take isl_schedule_node * ptr)18337 schedule_node_mark::schedule_node_mark(__isl_take isl_schedule_node *ptr)
18338     : schedule_node(ptr) {}
18339 
18340 schedule_node_mark &schedule_node_mark::operator=(schedule_node_mark obj) {
18341   std::swap(this->ptr, obj.ptr);
18342   return *this;
18343 }
18344 
ctx()18345 isl::ctx schedule_node_mark::ctx() const {
18346   return isl::ctx(isl_schedule_node_get_ctx(ptr));
18347 }
18348 
id()18349 isl::id schedule_node_mark::id() const
18350 {
18351   auto res = isl_schedule_node_mark_get_id(get());
18352   return manage(res);
18353 }
18354 
get_id()18355 isl::id schedule_node_mark::get_id() const
18356 {
18357   return id();
18358 }
18359 
18360 inline std::ostream &operator<<(std::ostream &os, const schedule_node_mark &obj)
18361 {
18362   char *str = isl_schedule_node_to_str(obj.get());
18363   if (!str) {
18364     os.setstate(std::ios_base::badbit);
18365     return os;
18366   }
18367   os << str;
18368   free(str);
18369   return os;
18370 }
18371 
18372 // implementations for isl::schedule_node_sequence
schedule_node_sequence()18373 schedule_node_sequence::schedule_node_sequence()
18374     : schedule_node() {}
18375 
schedule_node_sequence(const schedule_node_sequence & obj)18376 schedule_node_sequence::schedule_node_sequence(const schedule_node_sequence &obj)
18377     : schedule_node(obj)
18378 {
18379 }
18380 
schedule_node_sequence(__isl_take isl_schedule_node * ptr)18381 schedule_node_sequence::schedule_node_sequence(__isl_take isl_schedule_node *ptr)
18382     : schedule_node(ptr) {}
18383 
18384 schedule_node_sequence &schedule_node_sequence::operator=(schedule_node_sequence obj) {
18385   std::swap(this->ptr, obj.ptr);
18386   return *this;
18387 }
18388 
ctx()18389 isl::ctx schedule_node_sequence::ctx() const {
18390   return isl::ctx(isl_schedule_node_get_ctx(ptr));
18391 }
18392 
18393 inline std::ostream &operator<<(std::ostream &os, const schedule_node_sequence &obj)
18394 {
18395   char *str = isl_schedule_node_to_str(obj.get());
18396   if (!str) {
18397     os.setstate(std::ios_base::badbit);
18398     return os;
18399   }
18400   os << str;
18401   free(str);
18402   return os;
18403 }
18404 
18405 // implementations for isl::schedule_node_set
schedule_node_set()18406 schedule_node_set::schedule_node_set()
18407     : schedule_node() {}
18408 
schedule_node_set(const schedule_node_set & obj)18409 schedule_node_set::schedule_node_set(const schedule_node_set &obj)
18410     : schedule_node(obj)
18411 {
18412 }
18413 
schedule_node_set(__isl_take isl_schedule_node * ptr)18414 schedule_node_set::schedule_node_set(__isl_take isl_schedule_node *ptr)
18415     : schedule_node(ptr) {}
18416 
18417 schedule_node_set &schedule_node_set::operator=(schedule_node_set obj) {
18418   std::swap(this->ptr, obj.ptr);
18419   return *this;
18420 }
18421 
ctx()18422 isl::ctx schedule_node_set::ctx() const {
18423   return isl::ctx(isl_schedule_node_get_ctx(ptr));
18424 }
18425 
18426 inline std::ostream &operator<<(std::ostream &os, const schedule_node_set &obj)
18427 {
18428   char *str = isl_schedule_node_to_str(obj.get());
18429   if (!str) {
18430     os.setstate(std::ios_base::badbit);
18431     return os;
18432   }
18433   os << str;
18434   free(str);
18435   return os;
18436 }
18437 
18438 // implementations for isl::set
manage(__isl_take isl_set * ptr)18439 set manage(__isl_take isl_set *ptr) {
18440   return set(ptr);
18441 }
manage_copy(__isl_keep isl_set * ptr)18442 set manage_copy(__isl_keep isl_set *ptr) {
18443   ptr = isl_set_copy(ptr);
18444   return set(ptr);
18445 }
18446 
set()18447 set::set()
18448     : ptr(nullptr) {}
18449 
set(const set & obj)18450 set::set(const set &obj)
18451     : ptr(nullptr)
18452 {
18453   ptr = obj.copy();
18454 }
18455 
set(__isl_take isl_set * ptr)18456 set::set(__isl_take isl_set *ptr)
18457     : ptr(ptr) {}
18458 
set(isl::basic_set bset)18459 set::set(isl::basic_set bset)
18460 {
18461   auto res = isl_set_from_basic_set(bset.release());
18462   ptr = res;
18463 }
18464 
set(isl::point pnt)18465 set::set(isl::point pnt)
18466 {
18467   auto res = isl_set_from_point(pnt.release());
18468   ptr = res;
18469 }
18470 
set(isl::union_set uset)18471 set::set(isl::union_set uset)
18472 {
18473   auto res = isl_set_from_union_set(uset.release());
18474   ptr = res;
18475 }
18476 
set(isl::ctx ctx,const std::string & str)18477 set::set(isl::ctx ctx, const std::string &str)
18478 {
18479   auto res = isl_set_read_from_str(ctx.release(), str.c_str());
18480   ptr = res;
18481 }
18482 
18483 set &set::operator=(set obj) {
18484   std::swap(this->ptr, obj.ptr);
18485   return *this;
18486 }
18487 
~set()18488 set::~set() {
18489   if (ptr)
18490     isl_set_free(ptr);
18491 }
18492 
copy()18493 __isl_give isl_set *set::copy() const & {
18494   return isl_set_copy(ptr);
18495 }
18496 
get()18497 __isl_keep isl_set *set::get() const {
18498   return ptr;
18499 }
18500 
release()18501 __isl_give isl_set *set::release() {
18502   isl_set *tmp = ptr;
18503   ptr = nullptr;
18504   return tmp;
18505 }
18506 
is_null()18507 bool set::is_null() const {
18508   return ptr == nullptr;
18509 }
18510 
ctx()18511 isl::ctx set::ctx() const {
18512   return isl::ctx(isl_set_get_ctx(ptr));
18513 }
18514 
add_constraint(isl::constraint constraint)18515 isl::set set::add_constraint(isl::constraint constraint) const
18516 {
18517   auto res = isl_set_add_constraint(copy(), constraint.release());
18518   return manage(res);
18519 }
18520 
add_dims(isl::dim type,unsigned int n)18521 isl::set set::add_dims(isl::dim type, unsigned int n) const
18522 {
18523   auto res = isl_set_add_dims(copy(), static_cast<enum isl_dim_type>(type), n);
18524   return manage(res);
18525 }
18526 
affine_hull()18527 isl::basic_set set::affine_hull() const
18528 {
18529   auto res = isl_set_affine_hull(copy());
18530   return manage(res);
18531 }
18532 
align_params(isl::space model)18533 isl::set set::align_params(isl::space model) const
18534 {
18535   auto res = isl_set_align_params(copy(), model.release());
18536   return manage(res);
18537 }
18538 
apply(isl::map map)18539 isl::set set::apply(isl::map map) const
18540 {
18541   auto res = isl_set_apply(copy(), map.release());
18542   return manage(res);
18543 }
18544 
apply(const isl::union_map & umap)18545 isl::union_set set::apply(const isl::union_map &umap) const
18546 {
18547   return isl::union_set(*this).apply(umap);
18548 }
18549 
apply(const isl::basic_map & map)18550 isl::set set::apply(const isl::basic_map &map) const
18551 {
18552   return this->apply(isl::map(map));
18553 }
18554 
as_pw_multi_aff()18555 isl::pw_multi_aff set::as_pw_multi_aff() const
18556 {
18557   auto res = isl_set_as_pw_multi_aff(copy());
18558   return manage(res);
18559 }
18560 
as_set()18561 isl::set set::as_set() const
18562 {
18563   return isl::union_set(*this).as_set();
18564 }
18565 
basic_set_list()18566 isl::basic_set_list set::basic_set_list() const
18567 {
18568   auto res = isl_set_get_basic_set_list(get());
18569   return manage(res);
18570 }
18571 
get_basic_set_list()18572 isl::basic_set_list set::get_basic_set_list() const
18573 {
18574   return basic_set_list();
18575 }
18576 
bind(isl::multi_id tuple)18577 isl::set set::bind(isl::multi_id tuple) const
18578 {
18579   auto res = isl_set_bind(copy(), tuple.release());
18580   return manage(res);
18581 }
18582 
coalesce()18583 isl::set set::coalesce() const
18584 {
18585   auto res = isl_set_coalesce(copy());
18586   return manage(res);
18587 }
18588 
complement()18589 isl::set set::complement() const
18590 {
18591   auto res = isl_set_complement(copy());
18592   return manage(res);
18593 }
18594 
compute_divs()18595 isl::union_set set::compute_divs() const
18596 {
18597   return isl::union_set(*this).compute_divs();
18598 }
18599 
contains(const isl::space & space)18600 boolean set::contains(const isl::space &space) const
18601 {
18602   return isl::union_set(*this).contains(space);
18603 }
18604 
convex_hull()18605 isl::basic_set set::convex_hull() const
18606 {
18607   auto res = isl_set_convex_hull(copy());
18608   return manage(res);
18609 }
18610 
detect_equalities()18611 isl::set set::detect_equalities() const
18612 {
18613   auto res = isl_set_detect_equalities(copy());
18614   return manage(res);
18615 }
18616 
dim(isl::dim type)18617 class size set::dim(isl::dim type) const
18618 {
18619   auto res = isl_set_dim(get(), static_cast<enum isl_dim_type>(type));
18620   return manage(res);
18621 }
18622 
dim_has_any_lower_bound(isl::dim type,unsigned int pos)18623 boolean set::dim_has_any_lower_bound(isl::dim type, unsigned int pos) const
18624 {
18625   auto res = isl_set_dim_has_any_lower_bound(get(), static_cast<enum isl_dim_type>(type), pos);
18626   return manage(res);
18627 }
18628 
dim_id(isl::dim type,unsigned int pos)18629 isl::id set::dim_id(isl::dim type, unsigned int pos) const
18630 {
18631   auto res = isl_set_get_dim_id(get(), static_cast<enum isl_dim_type>(type), pos);
18632   return manage(res);
18633 }
18634 
get_dim_id(isl::dim type,unsigned int pos)18635 isl::id set::get_dim_id(isl::dim type, unsigned int pos) const
18636 {
18637   return dim_id(type, pos);
18638 }
18639 
dim_max(int pos)18640 isl::pw_aff set::dim_max(int pos) const
18641 {
18642   auto res = isl_set_dim_max(copy(), pos);
18643   return manage(res);
18644 }
18645 
dim_max_val(int pos)18646 isl::val set::dim_max_val(int pos) const
18647 {
18648   auto res = isl_set_dim_max_val(copy(), pos);
18649   return manage(res);
18650 }
18651 
dim_min(int pos)18652 isl::pw_aff set::dim_min(int pos) const
18653 {
18654   auto res = isl_set_dim_min(copy(), pos);
18655   return manage(res);
18656 }
18657 
dim_min_val(int pos)18658 isl::val set::dim_min_val(int pos) const
18659 {
18660   auto res = isl_set_dim_min_val(copy(), pos);
18661   return manage(res);
18662 }
18663 
dim_name(isl::dim type,unsigned int pos)18664 std::string set::dim_name(isl::dim type, unsigned int pos) const
18665 {
18666   auto res = isl_set_get_dim_name(get(), static_cast<enum isl_dim_type>(type), pos);
18667   std::string tmp(res);
18668   return tmp;
18669 }
18670 
get_dim_name(isl::dim type,unsigned int pos)18671 std::string set::get_dim_name(isl::dim type, unsigned int pos) const
18672 {
18673   return dim_name(type, pos);
18674 }
18675 
drop_constraints_involving_dims(isl::dim type,unsigned int first,unsigned int n)18676 isl::set set::drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const
18677 {
18678   auto res = isl_set_drop_constraints_involving_dims(copy(), static_cast<enum isl_dim_type>(type), first, n);
18679   return manage(res);
18680 }
18681 
eliminate(isl::dim type,unsigned int first,unsigned int n)18682 isl::set set::eliminate(isl::dim type, unsigned int first, unsigned int n) const
18683 {
18684   auto res = isl_set_eliminate(copy(), static_cast<enum isl_dim_type>(type), first, n);
18685   return manage(res);
18686 }
18687 
empty(isl::space space)18688 isl::set set::empty(isl::space space)
18689 {
18690   auto res = isl_set_empty(space.release());
18691   return manage(res);
18692 }
18693 
every_set(const std::function<boolean (isl::set)> & test)18694 boolean set::every_set(const std::function<boolean(isl::set)> &test) const
18695 {
18696   return isl::union_set(*this).every_set(test);
18697 }
18698 
extract_set(const isl::space & space)18699 isl::set set::extract_set(const isl::space &space) const
18700 {
18701   return isl::union_set(*this).extract_set(space);
18702 }
18703 
find_dim_by_id(isl::dim type,const isl::id & id)18704 int set::find_dim_by_id(isl::dim type, const isl::id &id) const
18705 {
18706   auto res = isl_set_find_dim_by_id(get(), static_cast<enum isl_dim_type>(type), id.get());
18707   return res;
18708 }
18709 
find_dim_by_id(isl::dim type,const std::string & id)18710 int set::find_dim_by_id(isl::dim type, const std::string &id) const
18711 {
18712   return this->find_dim_by_id(type, isl::id(ctx(), id));
18713 }
18714 
fix_si(isl::dim type,unsigned int pos,int value)18715 isl::set set::fix_si(isl::dim type, unsigned int pos, int value) const
18716 {
18717   auto res = isl_set_fix_si(copy(), static_cast<enum isl_dim_type>(type), pos, value);
18718   return manage(res);
18719 }
18720 
flatten()18721 isl::set set::flatten() const
18722 {
18723   auto res = isl_set_flatten(copy());
18724   return manage(res);
18725 }
18726 
foreach_basic_set(const std::function<stat (isl::basic_set)> & fn)18727 stat set::foreach_basic_set(const std::function<stat(isl::basic_set)> &fn) const
18728 {
18729   struct fn_data {
18730     std::function<stat(isl::basic_set)> func;
18731   } fn_data = { fn };
18732   auto fn_lambda = [](isl_basic_set *arg_0, void *arg_1) -> isl_stat {
18733     auto *data = static_cast<struct fn_data *>(arg_1);
18734     auto ret = (data->func)(manage(arg_0));
18735     return ret.release();
18736   };
18737   auto res = isl_set_foreach_basic_set(get(), fn_lambda, &fn_data);
18738   return manage(res);
18739 }
18740 
foreach_point(const std::function<stat (isl::point)> & fn)18741 stat set::foreach_point(const std::function<stat(isl::point)> &fn) const
18742 {
18743   struct fn_data {
18744     std::function<stat(isl::point)> func;
18745   } fn_data = { fn };
18746   auto fn_lambda = [](isl_point *arg_0, void *arg_1) -> isl_stat {
18747     auto *data = static_cast<struct fn_data *>(arg_1);
18748     auto ret = (data->func)(manage(arg_0));
18749     return ret.release();
18750   };
18751   auto res = isl_set_foreach_point(get(), fn_lambda, &fn_data);
18752   return manage(res);
18753 }
18754 
foreach_set(const std::function<stat (isl::set)> & fn)18755 stat set::foreach_set(const std::function<stat(isl::set)> &fn) const
18756 {
18757   return isl::union_set(*this).foreach_set(fn);
18758 }
18759 
gist(isl::set context)18760 isl::set set::gist(isl::set context) const
18761 {
18762   auto res = isl_set_gist(copy(), context.release());
18763   return manage(res);
18764 }
18765 
gist(const isl::union_set & context)18766 isl::union_set set::gist(const isl::union_set &context) const
18767 {
18768   return isl::union_set(*this).gist(context);
18769 }
18770 
gist(const isl::basic_set & context)18771 isl::set set::gist(const isl::basic_set &context) const
18772 {
18773   return this->gist(isl::set(context));
18774 }
18775 
gist(const isl::point & context)18776 isl::set set::gist(const isl::point &context) const
18777 {
18778   return this->gist(isl::set(context));
18779 }
18780 
gist_params(isl::set context)18781 isl::set set::gist_params(isl::set context) const
18782 {
18783   auto res = isl_set_gist_params(copy(), context.release());
18784   return manage(res);
18785 }
18786 
has_equal_space(const isl::set & set2)18787 boolean set::has_equal_space(const isl::set &set2) const
18788 {
18789   auto res = isl_set_has_equal_space(get(), set2.get());
18790   return manage(res);
18791 }
18792 
identity()18793 isl::map set::identity() const
18794 {
18795   auto res = isl_set_identity(copy());
18796   return manage(res);
18797 }
18798 
identity_union_pw_multi_aff()18799 isl::union_pw_multi_aff set::identity_union_pw_multi_aff() const
18800 {
18801   return isl::union_set(*this).identity_union_pw_multi_aff();
18802 }
18803 
indicator_function()18804 isl::pw_aff set::indicator_function() const
18805 {
18806   auto res = isl_set_indicator_function(copy());
18807   return manage(res);
18808 }
18809 
insert_dims(isl::dim type,unsigned int pos,unsigned int n)18810 isl::set set::insert_dims(isl::dim type, unsigned int pos, unsigned int n) const
18811 {
18812   auto res = isl_set_insert_dims(copy(), static_cast<enum isl_dim_type>(type), pos, n);
18813   return manage(res);
18814 }
18815 
insert_domain(isl::space domain)18816 isl::map set::insert_domain(isl::space domain) const
18817 {
18818   auto res = isl_set_insert_domain(copy(), domain.release());
18819   return manage(res);
18820 }
18821 
intersect(isl::set set2)18822 isl::set set::intersect(isl::set set2) const
18823 {
18824   auto res = isl_set_intersect(copy(), set2.release());
18825   return manage(res);
18826 }
18827 
intersect(const isl::union_set & uset2)18828 isl::union_set set::intersect(const isl::union_set &uset2) const
18829 {
18830   return isl::union_set(*this).intersect(uset2);
18831 }
18832 
intersect(const isl::basic_set & set2)18833 isl::set set::intersect(const isl::basic_set &set2) const
18834 {
18835   return this->intersect(isl::set(set2));
18836 }
18837 
intersect(const isl::point & set2)18838 isl::set set::intersect(const isl::point &set2) const
18839 {
18840   return this->intersect(isl::set(set2));
18841 }
18842 
intersect_params(isl::set params)18843 isl::set set::intersect_params(isl::set params) const
18844 {
18845   auto res = isl_set_intersect_params(copy(), params.release());
18846   return manage(res);
18847 }
18848 
involves_dims(isl::dim type,unsigned int first,unsigned int n)18849 boolean set::involves_dims(isl::dim type, unsigned int first, unsigned int n) const
18850 {
18851   auto res = isl_set_involves_dims(get(), static_cast<enum isl_dim_type>(type), first, n);
18852   return manage(res);
18853 }
18854 
involves_locals()18855 boolean set::involves_locals() const
18856 {
18857   auto res = isl_set_involves_locals(get());
18858   return manage(res);
18859 }
18860 
is_bounded()18861 boolean set::is_bounded() const
18862 {
18863   auto res = isl_set_is_bounded(get());
18864   return manage(res);
18865 }
18866 
is_disjoint(const isl::set & set2)18867 boolean set::is_disjoint(const isl::set &set2) const
18868 {
18869   auto res = isl_set_is_disjoint(get(), set2.get());
18870   return manage(res);
18871 }
18872 
is_disjoint(const isl::union_set & uset2)18873 boolean set::is_disjoint(const isl::union_set &uset2) const
18874 {
18875   return isl::union_set(*this).is_disjoint(uset2);
18876 }
18877 
is_disjoint(const isl::basic_set & set2)18878 boolean set::is_disjoint(const isl::basic_set &set2) const
18879 {
18880   return this->is_disjoint(isl::set(set2));
18881 }
18882 
is_disjoint(const isl::point & set2)18883 boolean set::is_disjoint(const isl::point &set2) const
18884 {
18885   return this->is_disjoint(isl::set(set2));
18886 }
18887 
is_empty()18888 boolean set::is_empty() const
18889 {
18890   auto res = isl_set_is_empty(get());
18891   return manage(res);
18892 }
18893 
is_equal(const isl::set & set2)18894 boolean set::is_equal(const isl::set &set2) const
18895 {
18896   auto res = isl_set_is_equal(get(), set2.get());
18897   return manage(res);
18898 }
18899 
is_equal(const isl::union_set & uset2)18900 boolean set::is_equal(const isl::union_set &uset2) const
18901 {
18902   return isl::union_set(*this).is_equal(uset2);
18903 }
18904 
is_equal(const isl::basic_set & set2)18905 boolean set::is_equal(const isl::basic_set &set2) const
18906 {
18907   return this->is_equal(isl::set(set2));
18908 }
18909 
is_equal(const isl::point & set2)18910 boolean set::is_equal(const isl::point &set2) const
18911 {
18912   return this->is_equal(isl::set(set2));
18913 }
18914 
is_params()18915 boolean set::is_params() const
18916 {
18917   auto res = isl_set_is_params(get());
18918   return manage(res);
18919 }
18920 
is_singleton()18921 boolean set::is_singleton() const
18922 {
18923   auto res = isl_set_is_singleton(get());
18924   return manage(res);
18925 }
18926 
is_strict_subset(const isl::set & set2)18927 boolean set::is_strict_subset(const isl::set &set2) const
18928 {
18929   auto res = isl_set_is_strict_subset(get(), set2.get());
18930   return manage(res);
18931 }
18932 
is_strict_subset(const isl::union_set & uset2)18933 boolean set::is_strict_subset(const isl::union_set &uset2) const
18934 {
18935   return isl::union_set(*this).is_strict_subset(uset2);
18936 }
18937 
is_strict_subset(const isl::basic_set & set2)18938 boolean set::is_strict_subset(const isl::basic_set &set2) const
18939 {
18940   return this->is_strict_subset(isl::set(set2));
18941 }
18942 
is_strict_subset(const isl::point & set2)18943 boolean set::is_strict_subset(const isl::point &set2) const
18944 {
18945   return this->is_strict_subset(isl::set(set2));
18946 }
18947 
is_subset(const isl::set & set2)18948 boolean set::is_subset(const isl::set &set2) const
18949 {
18950   auto res = isl_set_is_subset(get(), set2.get());
18951   return manage(res);
18952 }
18953 
is_subset(const isl::union_set & uset2)18954 boolean set::is_subset(const isl::union_set &uset2) const
18955 {
18956   return isl::union_set(*this).is_subset(uset2);
18957 }
18958 
is_subset(const isl::basic_set & set2)18959 boolean set::is_subset(const isl::basic_set &set2) const
18960 {
18961   return this->is_subset(isl::set(set2));
18962 }
18963 
is_subset(const isl::point & set2)18964 boolean set::is_subset(const isl::point &set2) const
18965 {
18966   return this->is_subset(isl::set(set2));
18967 }
18968 
is_wrapping()18969 boolean set::is_wrapping() const
18970 {
18971   auto res = isl_set_is_wrapping(get());
18972   return manage(res);
18973 }
18974 
isa_set()18975 boolean set::isa_set() const
18976 {
18977   return isl::union_set(*this).isa_set();
18978 }
18979 
lexmax()18980 isl::set set::lexmax() const
18981 {
18982   auto res = isl_set_lexmax(copy());
18983   return manage(res);
18984 }
18985 
lexmax_pw_multi_aff()18986 isl::pw_multi_aff set::lexmax_pw_multi_aff() const
18987 {
18988   auto res = isl_set_lexmax_pw_multi_aff(copy());
18989   return manage(res);
18990 }
18991 
lexmin()18992 isl::set set::lexmin() const
18993 {
18994   auto res = isl_set_lexmin(copy());
18995   return manage(res);
18996 }
18997 
lexmin_pw_multi_aff()18998 isl::pw_multi_aff set::lexmin_pw_multi_aff() const
18999 {
19000   auto res = isl_set_lexmin_pw_multi_aff(copy());
19001   return manage(res);
19002 }
19003 
lower_bound(isl::multi_pw_aff lower)19004 isl::set set::lower_bound(isl::multi_pw_aff lower) const
19005 {
19006   auto res = isl_set_lower_bound_multi_pw_aff(copy(), lower.release());
19007   return manage(res);
19008 }
19009 
lower_bound(isl::multi_val lower)19010 isl::set set::lower_bound(isl::multi_val lower) const
19011 {
19012   auto res = isl_set_lower_bound_multi_val(copy(), lower.release());
19013   return manage(res);
19014 }
19015 
lower_bound_si(isl::dim type,unsigned int pos,int value)19016 isl::set set::lower_bound_si(isl::dim type, unsigned int pos, int value) const
19017 {
19018   auto res = isl_set_lower_bound_si(copy(), static_cast<enum isl_dim_type>(type), pos, value);
19019   return manage(res);
19020 }
19021 
lower_bound_val(isl::dim type,unsigned int pos,isl::val value)19022 isl::set set::lower_bound_val(isl::dim type, unsigned int pos, isl::val value) const
19023 {
19024   auto res = isl_set_lower_bound_val(copy(), static_cast<enum isl_dim_type>(type), pos, value.release());
19025   return manage(res);
19026 }
19027 
lower_bound_val(isl::dim type,unsigned int pos,long value)19028 isl::set set::lower_bound_val(isl::dim type, unsigned int pos, long value) const
19029 {
19030   return this->lower_bound_val(type, pos, isl::val(ctx(), value));
19031 }
19032 
max_multi_pw_aff()19033 isl::multi_pw_aff set::max_multi_pw_aff() const
19034 {
19035   auto res = isl_set_max_multi_pw_aff(copy());
19036   return manage(res);
19037 }
19038 
max_val(const isl::aff & obj)19039 isl::val set::max_val(const isl::aff &obj) const
19040 {
19041   auto res = isl_set_max_val(get(), obj.get());
19042   return manage(res);
19043 }
19044 
min_multi_pw_aff()19045 isl::multi_pw_aff set::min_multi_pw_aff() const
19046 {
19047   auto res = isl_set_min_multi_pw_aff(copy());
19048   return manage(res);
19049 }
19050 
min_val(const isl::aff & obj)19051 isl::val set::min_val(const isl::aff &obj) const
19052 {
19053   auto res = isl_set_min_val(get(), obj.get());
19054   return manage(res);
19055 }
19056 
n_basic_set()19057 class size set::n_basic_set() const
19058 {
19059   auto res = isl_set_n_basic_set(get());
19060   return manage(res);
19061 }
19062 
params()19063 isl::set set::params() const
19064 {
19065   auto res = isl_set_params(copy());
19066   return manage(res);
19067 }
19068 
plain_get_val_if_fixed(isl::dim type,unsigned int pos)19069 isl::val set::plain_get_val_if_fixed(isl::dim type, unsigned int pos) const
19070 {
19071   auto res = isl_set_plain_get_val_if_fixed(get(), static_cast<enum isl_dim_type>(type), pos);
19072   return manage(res);
19073 }
19074 
plain_multi_val_if_fixed()19075 isl::multi_val set::plain_multi_val_if_fixed() const
19076 {
19077   auto res = isl_set_get_plain_multi_val_if_fixed(get());
19078   return manage(res);
19079 }
19080 
get_plain_multi_val_if_fixed()19081 isl::multi_val set::get_plain_multi_val_if_fixed() const
19082 {
19083   return plain_multi_val_if_fixed();
19084 }
19085 
polyhedral_hull()19086 isl::basic_set set::polyhedral_hull() const
19087 {
19088   auto res = isl_set_polyhedral_hull(copy());
19089   return manage(res);
19090 }
19091 
preimage(isl::multi_aff ma)19092 isl::set set::preimage(isl::multi_aff ma) const
19093 {
19094   auto res = isl_set_preimage_multi_aff(copy(), ma.release());
19095   return manage(res);
19096 }
19097 
preimage(isl::multi_pw_aff mpa)19098 isl::set set::preimage(isl::multi_pw_aff mpa) const
19099 {
19100   auto res = isl_set_preimage_multi_pw_aff(copy(), mpa.release());
19101   return manage(res);
19102 }
19103 
preimage(isl::pw_multi_aff pma)19104 isl::set set::preimage(isl::pw_multi_aff pma) const
19105 {
19106   auto res = isl_set_preimage_pw_multi_aff(copy(), pma.release());
19107   return manage(res);
19108 }
19109 
preimage(const isl::union_pw_multi_aff & upma)19110 isl::union_set set::preimage(const isl::union_pw_multi_aff &upma) const
19111 {
19112   return isl::union_set(*this).preimage(upma);
19113 }
19114 
product(isl::set set2)19115 isl::set set::product(isl::set set2) const
19116 {
19117   auto res = isl_set_product(copy(), set2.release());
19118   return manage(res);
19119 }
19120 
project_out(isl::dim type,unsigned int first,unsigned int n)19121 isl::set set::project_out(isl::dim type, unsigned int first, unsigned int n) const
19122 {
19123   auto res = isl_set_project_out(copy(), static_cast<enum isl_dim_type>(type), first, n);
19124   return manage(res);
19125 }
19126 
project_out_all_params()19127 isl::set set::project_out_all_params() const
19128 {
19129   auto res = isl_set_project_out_all_params(copy());
19130   return manage(res);
19131 }
19132 
project_out_param(isl::id id)19133 isl::set set::project_out_param(isl::id id) const
19134 {
19135   auto res = isl_set_project_out_param_id(copy(), id.release());
19136   return manage(res);
19137 }
19138 
project_out_param(const std::string & id)19139 isl::set set::project_out_param(const std::string &id) const
19140 {
19141   return this->project_out_param(isl::id(ctx(), id));
19142 }
19143 
project_out_param(isl::id_list list)19144 isl::set set::project_out_param(isl::id_list list) const
19145 {
19146   auto res = isl_set_project_out_param_id_list(copy(), list.release());
19147   return manage(res);
19148 }
19149 
pw_multi_aff_on_domain(isl::multi_val mv)19150 isl::pw_multi_aff set::pw_multi_aff_on_domain(isl::multi_val mv) const
19151 {
19152   auto res = isl_set_pw_multi_aff_on_domain_multi_val(copy(), mv.release());
19153   return manage(res);
19154 }
19155 
remove_dims(isl::dim type,unsigned int first,unsigned int n)19156 isl::set set::remove_dims(isl::dim type, unsigned int first, unsigned int n) const
19157 {
19158   auto res = isl_set_remove_dims(copy(), static_cast<enum isl_dim_type>(type), first, n);
19159   return manage(res);
19160 }
19161 
remove_divs()19162 isl::set set::remove_divs() const
19163 {
19164   auto res = isl_set_remove_divs(copy());
19165   return manage(res);
19166 }
19167 
remove_redundancies()19168 isl::set set::remove_redundancies() const
19169 {
19170   auto res = isl_set_remove_redundancies(copy());
19171   return manage(res);
19172 }
19173 
reset_tuple_id()19174 isl::set set::reset_tuple_id() const
19175 {
19176   auto res = isl_set_reset_tuple_id(copy());
19177   return manage(res);
19178 }
19179 
sample()19180 isl::basic_set set::sample() const
19181 {
19182   auto res = isl_set_sample(copy());
19183   return manage(res);
19184 }
19185 
sample_point()19186 isl::point set::sample_point() const
19187 {
19188   auto res = isl_set_sample_point(copy());
19189   return manage(res);
19190 }
19191 
set_dim_id(isl::dim type,unsigned int pos,isl::id id)19192 isl::set set::set_dim_id(isl::dim type, unsigned int pos, isl::id id) const
19193 {
19194   auto res = isl_set_set_dim_id(copy(), static_cast<enum isl_dim_type>(type), pos, id.release());
19195   return manage(res);
19196 }
19197 
set_dim_id(isl::dim type,unsigned int pos,const std::string & id)19198 isl::set set::set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const
19199 {
19200   return this->set_dim_id(type, pos, isl::id(ctx(), id));
19201 }
19202 
set_list()19203 isl::set_list set::set_list() const
19204 {
19205   return isl::union_set(*this).set_list();
19206 }
19207 
set_tuple_id(isl::id id)19208 isl::set set::set_tuple_id(isl::id id) const
19209 {
19210   auto res = isl_set_set_tuple_id(copy(), id.release());
19211   return manage(res);
19212 }
19213 
set_tuple_id(const std::string & id)19214 isl::set set::set_tuple_id(const std::string &id) const
19215 {
19216   return this->set_tuple_id(isl::id(ctx(), id));
19217 }
19218 
simple_fixed_box_hull()19219 isl::fixed_box set::simple_fixed_box_hull() const
19220 {
19221   auto res = isl_set_get_simple_fixed_box_hull(get());
19222   return manage(res);
19223 }
19224 
get_simple_fixed_box_hull()19225 isl::fixed_box set::get_simple_fixed_box_hull() const
19226 {
19227   return simple_fixed_box_hull();
19228 }
19229 
simple_hull()19230 isl::basic_set set::simple_hull() const
19231 {
19232   auto res = isl_set_simple_hull(copy());
19233   return manage(res);
19234 }
19235 
space()19236 isl::space set::space() const
19237 {
19238   auto res = isl_set_get_space(get());
19239   return manage(res);
19240 }
19241 
get_space()19242 isl::space set::get_space() const
19243 {
19244   return space();
19245 }
19246 
stride(int pos)19247 isl::val set::stride(int pos) const
19248 {
19249   auto res = isl_set_get_stride(get(), pos);
19250   return manage(res);
19251 }
19252 
get_stride(int pos)19253 isl::val set::get_stride(int pos) const
19254 {
19255   return stride(pos);
19256 }
19257 
subtract(isl::set set2)19258 isl::set set::subtract(isl::set set2) const
19259 {
19260   auto res = isl_set_subtract(copy(), set2.release());
19261   return manage(res);
19262 }
19263 
subtract(const isl::union_set & uset2)19264 isl::union_set set::subtract(const isl::union_set &uset2) const
19265 {
19266   return isl::union_set(*this).subtract(uset2);
19267 }
19268 
subtract(const isl::basic_set & set2)19269 isl::set set::subtract(const isl::basic_set &set2) const
19270 {
19271   return this->subtract(isl::set(set2));
19272 }
19273 
subtract(const isl::point & set2)19274 isl::set set::subtract(const isl::point &set2) const
19275 {
19276   return this->subtract(isl::set(set2));
19277 }
19278 
to_list()19279 isl::set_list set::to_list() const
19280 {
19281   auto res = isl_set_to_list(copy());
19282   return manage(res);
19283 }
19284 
to_union_set()19285 isl::union_set set::to_union_set() const
19286 {
19287   auto res = isl_set_to_union_set(copy());
19288   return manage(res);
19289 }
19290 
translation()19291 isl::map set::translation() const
19292 {
19293   auto res = isl_set_translation(copy());
19294   return manage(res);
19295 }
19296 
tuple_dim()19297 class size set::tuple_dim() const
19298 {
19299   auto res = isl_set_tuple_dim(get());
19300   return manage(res);
19301 }
19302 
tuple_id()19303 isl::id set::tuple_id() const
19304 {
19305   auto res = isl_set_get_tuple_id(get());
19306   return manage(res);
19307 }
19308 
get_tuple_id()19309 isl::id set::get_tuple_id() const
19310 {
19311   return tuple_id();
19312 }
19313 
tuple_name()19314 std::string set::tuple_name() const
19315 {
19316   auto res = isl_set_get_tuple_name(get());
19317   std::string tmp(res);
19318   return tmp;
19319 }
19320 
get_tuple_name()19321 std::string set::get_tuple_name() const
19322 {
19323   return tuple_name();
19324 }
19325 
unbind_params(isl::multi_id tuple)19326 isl::set set::unbind_params(isl::multi_id tuple) const
19327 {
19328   auto res = isl_set_unbind_params(copy(), tuple.release());
19329   return manage(res);
19330 }
19331 
unbind_params_insert_domain(isl::multi_id domain)19332 isl::map set::unbind_params_insert_domain(isl::multi_id domain) const
19333 {
19334   auto res = isl_set_unbind_params_insert_domain(copy(), domain.release());
19335   return manage(res);
19336 }
19337 
unite(isl::set set2)19338 isl::set set::unite(isl::set set2) const
19339 {
19340   auto res = isl_set_union(copy(), set2.release());
19341   return manage(res);
19342 }
19343 
unite(const isl::union_set & uset2)19344 isl::union_set set::unite(const isl::union_set &uset2) const
19345 {
19346   return isl::union_set(*this).unite(uset2);
19347 }
19348 
unite(const isl::basic_set & set2)19349 isl::set set::unite(const isl::basic_set &set2) const
19350 {
19351   return this->unite(isl::set(set2));
19352 }
19353 
unite(const isl::point & set2)19354 isl::set set::unite(const isl::point &set2) const
19355 {
19356   return this->unite(isl::set(set2));
19357 }
19358 
universe(isl::space space)19359 isl::set set::universe(isl::space space)
19360 {
19361   auto res = isl_set_universe(space.release());
19362   return manage(res);
19363 }
19364 
unshifted_simple_hull()19365 isl::basic_set set::unshifted_simple_hull() const
19366 {
19367   auto res = isl_set_unshifted_simple_hull(copy());
19368   return manage(res);
19369 }
19370 
unwrap()19371 isl::map set::unwrap() const
19372 {
19373   auto res = isl_set_unwrap(copy());
19374   return manage(res);
19375 }
19376 
upper_bound(isl::multi_pw_aff upper)19377 isl::set set::upper_bound(isl::multi_pw_aff upper) const
19378 {
19379   auto res = isl_set_upper_bound_multi_pw_aff(copy(), upper.release());
19380   return manage(res);
19381 }
19382 
upper_bound(isl::multi_val upper)19383 isl::set set::upper_bound(isl::multi_val upper) const
19384 {
19385   auto res = isl_set_upper_bound_multi_val(copy(), upper.release());
19386   return manage(res);
19387 }
19388 
upper_bound_val(isl::dim type,unsigned int pos,isl::val value)19389 isl::set set::upper_bound_val(isl::dim type, unsigned int pos, isl::val value) const
19390 {
19391   auto res = isl_set_upper_bound_val(copy(), static_cast<enum isl_dim_type>(type), pos, value.release());
19392   return manage(res);
19393 }
19394 
upper_bound_val(isl::dim type,unsigned int pos,long value)19395 isl::set set::upper_bound_val(isl::dim type, unsigned int pos, long value) const
19396 {
19397   return this->upper_bound_val(type, pos, isl::val(ctx(), value));
19398 }
19399 
19400 inline std::ostream &operator<<(std::ostream &os, const set &obj)
19401 {
19402   char *str = isl_set_to_str(obj.get());
19403   if (!str) {
19404     os.setstate(std::ios_base::badbit);
19405     return os;
19406   }
19407   os << str;
19408   free(str);
19409   return os;
19410 }
19411 
19412 // implementations for isl::set_list
manage(__isl_take isl_set_list * ptr)19413 set_list manage(__isl_take isl_set_list *ptr) {
19414   return set_list(ptr);
19415 }
manage_copy(__isl_keep isl_set_list * ptr)19416 set_list manage_copy(__isl_keep isl_set_list *ptr) {
19417   ptr = isl_set_list_copy(ptr);
19418   return set_list(ptr);
19419 }
19420 
set_list()19421 set_list::set_list()
19422     : ptr(nullptr) {}
19423 
set_list(const set_list & obj)19424 set_list::set_list(const set_list &obj)
19425     : ptr(nullptr)
19426 {
19427   ptr = obj.copy();
19428 }
19429 
set_list(__isl_take isl_set_list * ptr)19430 set_list::set_list(__isl_take isl_set_list *ptr)
19431     : ptr(ptr) {}
19432 
set_list(isl::ctx ctx,int n)19433 set_list::set_list(isl::ctx ctx, int n)
19434 {
19435   auto res = isl_set_list_alloc(ctx.release(), n);
19436   ptr = res;
19437 }
19438 
set_list(isl::set el)19439 set_list::set_list(isl::set el)
19440 {
19441   auto res = isl_set_list_from_set(el.release());
19442   ptr = res;
19443 }
19444 
set_list(isl::ctx ctx,const std::string & str)19445 set_list::set_list(isl::ctx ctx, const std::string &str)
19446 {
19447   auto res = isl_set_list_read_from_str(ctx.release(), str.c_str());
19448   ptr = res;
19449 }
19450 
19451 set_list &set_list::operator=(set_list obj) {
19452   std::swap(this->ptr, obj.ptr);
19453   return *this;
19454 }
19455 
~set_list()19456 set_list::~set_list() {
19457   if (ptr)
19458     isl_set_list_free(ptr);
19459 }
19460 
copy()19461 __isl_give isl_set_list *set_list::copy() const & {
19462   return isl_set_list_copy(ptr);
19463 }
19464 
get()19465 __isl_keep isl_set_list *set_list::get() const {
19466   return ptr;
19467 }
19468 
release()19469 __isl_give isl_set_list *set_list::release() {
19470   isl_set_list *tmp = ptr;
19471   ptr = nullptr;
19472   return tmp;
19473 }
19474 
is_null()19475 bool set_list::is_null() const {
19476   return ptr == nullptr;
19477 }
19478 
ctx()19479 isl::ctx set_list::ctx() const {
19480   return isl::ctx(isl_set_list_get_ctx(ptr));
19481 }
19482 
add(isl::set el)19483 isl::set_list set_list::add(isl::set el) const
19484 {
19485   auto res = isl_set_list_add(copy(), el.release());
19486   return manage(res);
19487 }
19488 
at(int index)19489 isl::set set_list::at(int index) const
19490 {
19491   auto res = isl_set_list_get_at(get(), index);
19492   return manage(res);
19493 }
19494 
get_at(int index)19495 isl::set set_list::get_at(int index) const
19496 {
19497   return at(index);
19498 }
19499 
clear()19500 isl::set_list set_list::clear() const
19501 {
19502   auto res = isl_set_list_clear(copy());
19503   return manage(res);
19504 }
19505 
concat(isl::set_list list2)19506 isl::set_list set_list::concat(isl::set_list list2) const
19507 {
19508   auto res = isl_set_list_concat(copy(), list2.release());
19509   return manage(res);
19510 }
19511 
drop(unsigned int first,unsigned int n)19512 isl::set_list set_list::drop(unsigned int first, unsigned int n) const
19513 {
19514   auto res = isl_set_list_drop(copy(), first, n);
19515   return manage(res);
19516 }
19517 
foreach(const std::function<stat (isl::set)> & fn)19518 stat set_list::foreach(const std::function<stat(isl::set)> &fn) const
19519 {
19520   struct fn_data {
19521     std::function<stat(isl::set)> func;
19522   } fn_data = { fn };
19523   auto fn_lambda = [](isl_set *arg_0, void *arg_1) -> isl_stat {
19524     auto *data = static_cast<struct fn_data *>(arg_1);
19525     auto ret = (data->func)(manage(arg_0));
19526     return ret.release();
19527   };
19528   auto res = isl_set_list_foreach(get(), fn_lambda, &fn_data);
19529   return manage(res);
19530 }
19531 
insert(unsigned int pos,isl::set el)19532 isl::set_list set_list::insert(unsigned int pos, isl::set el) const
19533 {
19534   auto res = isl_set_list_insert(copy(), pos, el.release());
19535   return manage(res);
19536 }
19537 
size()19538 class size set_list::size() const
19539 {
19540   auto res = isl_set_list_size(get());
19541   return manage(res);
19542 }
19543 
19544 inline std::ostream &operator<<(std::ostream &os, const set_list &obj)
19545 {
19546   char *str = isl_set_list_to_str(obj.get());
19547   if (!str) {
19548     os.setstate(std::ios_base::badbit);
19549     return os;
19550   }
19551   os << str;
19552   free(str);
19553   return os;
19554 }
19555 
19556 // implementations for isl::space
manage(__isl_take isl_space * ptr)19557 space manage(__isl_take isl_space *ptr) {
19558   return space(ptr);
19559 }
manage_copy(__isl_keep isl_space * ptr)19560 space manage_copy(__isl_keep isl_space *ptr) {
19561   ptr = isl_space_copy(ptr);
19562   return space(ptr);
19563 }
19564 
space()19565 space::space()
19566     : ptr(nullptr) {}
19567 
space(const space & obj)19568 space::space(const space &obj)
19569     : ptr(nullptr)
19570 {
19571   ptr = obj.copy();
19572 }
19573 
space(__isl_take isl_space * ptr)19574 space::space(__isl_take isl_space *ptr)
19575     : ptr(ptr) {}
19576 
space(isl::ctx ctx,unsigned int nparam,unsigned int n_in,unsigned int n_out)19577 space::space(isl::ctx ctx, unsigned int nparam, unsigned int n_in, unsigned int n_out)
19578 {
19579   auto res = isl_space_alloc(ctx.release(), nparam, n_in, n_out);
19580   ptr = res;
19581 }
19582 
space(isl::ctx ctx,unsigned int nparam,unsigned int dim)19583 space::space(isl::ctx ctx, unsigned int nparam, unsigned int dim)
19584 {
19585   auto res = isl_space_set_alloc(ctx.release(), nparam, dim);
19586   ptr = res;
19587 }
19588 
19589 space &space::operator=(space obj) {
19590   std::swap(this->ptr, obj.ptr);
19591   return *this;
19592 }
19593 
~space()19594 space::~space() {
19595   if (ptr)
19596     isl_space_free(ptr);
19597 }
19598 
copy()19599 __isl_give isl_space *space::copy() const & {
19600   return isl_space_copy(ptr);
19601 }
19602 
get()19603 __isl_keep isl_space *space::get() const {
19604   return ptr;
19605 }
19606 
release()19607 __isl_give isl_space *space::release() {
19608   isl_space *tmp = ptr;
19609   ptr = nullptr;
19610   return tmp;
19611 }
19612 
is_null()19613 bool space::is_null() const {
19614   return ptr == nullptr;
19615 }
19616 
ctx()19617 isl::ctx space::ctx() const {
19618   return isl::ctx(isl_space_get_ctx(ptr));
19619 }
19620 
add_dims(isl::dim type,unsigned int n)19621 isl::space space::add_dims(isl::dim type, unsigned int n) const
19622 {
19623   auto res = isl_space_add_dims(copy(), static_cast<enum isl_dim_type>(type), n);
19624   return manage(res);
19625 }
19626 
add_named_tuple(isl::id tuple_id,unsigned int dim)19627 isl::space space::add_named_tuple(isl::id tuple_id, unsigned int dim) const
19628 {
19629   auto res = isl_space_add_named_tuple_id_ui(copy(), tuple_id.release(), dim);
19630   return manage(res);
19631 }
19632 
add_named_tuple(const std::string & tuple_id,unsigned int dim)19633 isl::space space::add_named_tuple(const std::string &tuple_id, unsigned int dim) const
19634 {
19635   return this->add_named_tuple(isl::id(ctx(), tuple_id), dim);
19636 }
19637 
add_param(isl::id id)19638 isl::space space::add_param(isl::id id) const
19639 {
19640   auto res = isl_space_add_param_id(copy(), id.release());
19641   return manage(res);
19642 }
19643 
add_param(const std::string & id)19644 isl::space space::add_param(const std::string &id) const
19645 {
19646   return this->add_param(isl::id(ctx(), id));
19647 }
19648 
add_unnamed_tuple(unsigned int dim)19649 isl::space space::add_unnamed_tuple(unsigned int dim) const
19650 {
19651   auto res = isl_space_add_unnamed_tuple_ui(copy(), dim);
19652   return manage(res);
19653 }
19654 
align_params(isl::space space2)19655 isl::space space::align_params(isl::space space2) const
19656 {
19657   auto res = isl_space_align_params(copy(), space2.release());
19658   return manage(res);
19659 }
19660 
curry()19661 isl::space space::curry() const
19662 {
19663   auto res = isl_space_curry(copy());
19664   return manage(res);
19665 }
19666 
dim(isl::dim type)19667 class size space::dim(isl::dim type) const
19668 {
19669   auto res = isl_space_dim(get(), static_cast<enum isl_dim_type>(type));
19670   return manage(res);
19671 }
19672 
dim_id(isl::dim type,unsigned int pos)19673 isl::id space::dim_id(isl::dim type, unsigned int pos) const
19674 {
19675   auto res = isl_space_get_dim_id(get(), static_cast<enum isl_dim_type>(type), pos);
19676   return manage(res);
19677 }
19678 
get_dim_id(isl::dim type,unsigned int pos)19679 isl::id space::get_dim_id(isl::dim type, unsigned int pos) const
19680 {
19681   return dim_id(type, pos);
19682 }
19683 
domain()19684 isl::space space::domain() const
19685 {
19686   auto res = isl_space_domain(copy());
19687   return manage(res);
19688 }
19689 
domain_map_multi_aff()19690 isl::multi_aff space::domain_map_multi_aff() const
19691 {
19692   auto res = isl_space_domain_map_multi_aff(copy());
19693   return manage(res);
19694 }
19695 
domain_map_pw_multi_aff()19696 isl::pw_multi_aff space::domain_map_pw_multi_aff() const
19697 {
19698   auto res = isl_space_domain_map_pw_multi_aff(copy());
19699   return manage(res);
19700 }
19701 
domain_tuple_id()19702 isl::id space::domain_tuple_id() const
19703 {
19704   auto res = isl_space_get_domain_tuple_id(get());
19705   return manage(res);
19706 }
19707 
get_domain_tuple_id()19708 isl::id space::get_domain_tuple_id() const
19709 {
19710   return domain_tuple_id();
19711 }
19712 
drop_dims(isl::dim type,unsigned int first,unsigned int num)19713 isl::space space::drop_dims(isl::dim type, unsigned int first, unsigned int num) const
19714 {
19715   auto res = isl_space_drop_dims(copy(), static_cast<enum isl_dim_type>(type), first, num);
19716   return manage(res);
19717 }
19718 
find_dim_by_id(isl::dim type,const isl::id & id)19719 int space::find_dim_by_id(isl::dim type, const isl::id &id) const
19720 {
19721   auto res = isl_space_find_dim_by_id(get(), static_cast<enum isl_dim_type>(type), id.get());
19722   return res;
19723 }
19724 
find_dim_by_id(isl::dim type,const std::string & id)19725 int space::find_dim_by_id(isl::dim type, const std::string &id) const
19726 {
19727   return this->find_dim_by_id(type, isl::id(ctx(), id));
19728 }
19729 
flatten_domain()19730 isl::space space::flatten_domain() const
19731 {
19732   auto res = isl_space_flatten_domain(copy());
19733   return manage(res);
19734 }
19735 
flatten_range()19736 isl::space space::flatten_range() const
19737 {
19738   auto res = isl_space_flatten_range(copy());
19739   return manage(res);
19740 }
19741 
has_domain_tuple_id()19742 boolean space::has_domain_tuple_id() const
19743 {
19744   auto res = isl_space_has_domain_tuple_id(get());
19745   return manage(res);
19746 }
19747 
has_equal_tuples(const isl::space & space2)19748 boolean space::has_equal_tuples(const isl::space &space2) const
19749 {
19750   auto res = isl_space_has_equal_tuples(get(), space2.get());
19751   return manage(res);
19752 }
19753 
has_range_tuple_id()19754 boolean space::has_range_tuple_id() const
19755 {
19756   auto res = isl_space_has_range_tuple_id(get());
19757   return manage(res);
19758 }
19759 
has_tuple_id(isl::dim type)19760 boolean space::has_tuple_id(isl::dim type) const
19761 {
19762   auto res = isl_space_has_tuple_id(get(), static_cast<enum isl_dim_type>(type));
19763   return manage(res);
19764 }
19765 
has_tuple_name(isl::dim type)19766 boolean space::has_tuple_name(isl::dim type) const
19767 {
19768   auto res = isl_space_has_tuple_name(get(), static_cast<enum isl_dim_type>(type));
19769   return manage(res);
19770 }
19771 
identity_multi_aff_on_domain()19772 isl::multi_aff space::identity_multi_aff_on_domain() const
19773 {
19774   auto res = isl_space_identity_multi_aff_on_domain(copy());
19775   return manage(res);
19776 }
19777 
identity_multi_pw_aff_on_domain()19778 isl::multi_pw_aff space::identity_multi_pw_aff_on_domain() const
19779 {
19780   auto res = isl_space_identity_multi_pw_aff_on_domain(copy());
19781   return manage(res);
19782 }
19783 
identity_pw_multi_aff_on_domain()19784 isl::pw_multi_aff space::identity_pw_multi_aff_on_domain() const
19785 {
19786   auto res = isl_space_identity_pw_multi_aff_on_domain(copy());
19787   return manage(res);
19788 }
19789 
is_equal(const isl::space & space2)19790 boolean space::is_equal(const isl::space &space2) const
19791 {
19792   auto res = isl_space_is_equal(get(), space2.get());
19793   return manage(res);
19794 }
19795 
is_params()19796 boolean space::is_params() const
19797 {
19798   auto res = isl_space_is_params(get());
19799   return manage(res);
19800 }
19801 
is_set()19802 boolean space::is_set() const
19803 {
19804   auto res = isl_space_is_set(get());
19805   return manage(res);
19806 }
19807 
is_wrapping()19808 boolean space::is_wrapping() const
19809 {
19810   auto res = isl_space_is_wrapping(get());
19811   return manage(res);
19812 }
19813 
map_from_domain_and_range(isl::space range)19814 isl::space space::map_from_domain_and_range(isl::space range) const
19815 {
19816   auto res = isl_space_map_from_domain_and_range(copy(), range.release());
19817   return manage(res);
19818 }
19819 
map_from_set()19820 isl::space space::map_from_set() const
19821 {
19822   auto res = isl_space_map_from_set(copy());
19823   return manage(res);
19824 }
19825 
multi_aff(isl::aff_list list)19826 isl::multi_aff space::multi_aff(isl::aff_list list) const
19827 {
19828   auto res = isl_space_multi_aff(copy(), list.release());
19829   return manage(res);
19830 }
19831 
multi_aff_on_domain(isl::multi_val mv)19832 isl::multi_aff space::multi_aff_on_domain(isl::multi_val mv) const
19833 {
19834   auto res = isl_space_multi_aff_on_domain_multi_val(copy(), mv.release());
19835   return manage(res);
19836 }
19837 
multi_id(isl::id_list list)19838 isl::multi_id space::multi_id(isl::id_list list) const
19839 {
19840   auto res = isl_space_multi_id(copy(), list.release());
19841   return manage(res);
19842 }
19843 
multi_pw_aff(isl::pw_aff_list list)19844 isl::multi_pw_aff space::multi_pw_aff(isl::pw_aff_list list) const
19845 {
19846   auto res = isl_space_multi_pw_aff(copy(), list.release());
19847   return manage(res);
19848 }
19849 
multi_union_pw_aff(isl::union_pw_aff_list list)19850 isl::multi_union_pw_aff space::multi_union_pw_aff(isl::union_pw_aff_list list) const
19851 {
19852   auto res = isl_space_multi_union_pw_aff(copy(), list.release());
19853   return manage(res);
19854 }
19855 
multi_val(isl::val_list list)19856 isl::multi_val space::multi_val(isl::val_list list) const
19857 {
19858   auto res = isl_space_multi_val(copy(), list.release());
19859   return manage(res);
19860 }
19861 
param_aff_on_domain(isl::id id)19862 isl::aff space::param_aff_on_domain(isl::id id) const
19863 {
19864   auto res = isl_space_param_aff_on_domain_id(copy(), id.release());
19865   return manage(res);
19866 }
19867 
param_aff_on_domain(const std::string & id)19868 isl::aff space::param_aff_on_domain(const std::string &id) const
19869 {
19870   return this->param_aff_on_domain(isl::id(ctx(), id));
19871 }
19872 
params()19873 isl::space space::params() const
19874 {
19875   auto res = isl_space_params(copy());
19876   return manage(res);
19877 }
19878 
params_alloc(isl::ctx ctx,unsigned int nparam)19879 isl::space space::params_alloc(isl::ctx ctx, unsigned int nparam)
19880 {
19881   auto res = isl_space_params_alloc(ctx.release(), nparam);
19882   return manage(res);
19883 }
19884 
product(isl::space right)19885 isl::space space::product(isl::space right) const
19886 {
19887   auto res = isl_space_product(copy(), right.release());
19888   return manage(res);
19889 }
19890 
range()19891 isl::space space::range() const
19892 {
19893   auto res = isl_space_range(copy());
19894   return manage(res);
19895 }
19896 
range_map_multi_aff()19897 isl::multi_aff space::range_map_multi_aff() const
19898 {
19899   auto res = isl_space_range_map_multi_aff(copy());
19900   return manage(res);
19901 }
19902 
range_map_pw_multi_aff()19903 isl::pw_multi_aff space::range_map_pw_multi_aff() const
19904 {
19905   auto res = isl_space_range_map_pw_multi_aff(copy());
19906   return manage(res);
19907 }
19908 
range_reverse()19909 isl::space space::range_reverse() const
19910 {
19911   auto res = isl_space_range_reverse(copy());
19912   return manage(res);
19913 }
19914 
range_tuple_id()19915 isl::id space::range_tuple_id() const
19916 {
19917   auto res = isl_space_get_range_tuple_id(get());
19918   return manage(res);
19919 }
19920 
get_range_tuple_id()19921 isl::id space::get_range_tuple_id() const
19922 {
19923   return range_tuple_id();
19924 }
19925 
reverse()19926 isl::space space::reverse() const
19927 {
19928   auto res = isl_space_reverse(copy());
19929   return manage(res);
19930 }
19931 
set_dim_id(isl::dim type,unsigned int pos,isl::id id)19932 isl::space space::set_dim_id(isl::dim type, unsigned int pos, isl::id id) const
19933 {
19934   auto res = isl_space_set_dim_id(copy(), static_cast<enum isl_dim_type>(type), pos, id.release());
19935   return manage(res);
19936 }
19937 
set_dim_id(isl::dim type,unsigned int pos,const std::string & id)19938 isl::space space::set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const
19939 {
19940   return this->set_dim_id(type, pos, isl::id(ctx(), id));
19941 }
19942 
set_domain_tuple(isl::id id)19943 isl::space space::set_domain_tuple(isl::id id) const
19944 {
19945   auto res = isl_space_set_domain_tuple_id(copy(), id.release());
19946   return manage(res);
19947 }
19948 
set_domain_tuple(const std::string & id)19949 isl::space space::set_domain_tuple(const std::string &id) const
19950 {
19951   return this->set_domain_tuple(isl::id(ctx(), id));
19952 }
19953 
set_from_params()19954 isl::space space::set_from_params() const
19955 {
19956   auto res = isl_space_set_from_params(copy());
19957   return manage(res);
19958 }
19959 
set_range_tuple(isl::id id)19960 isl::space space::set_range_tuple(isl::id id) const
19961 {
19962   auto res = isl_space_set_range_tuple_id(copy(), id.release());
19963   return manage(res);
19964 }
19965 
set_range_tuple(const std::string & id)19966 isl::space space::set_range_tuple(const std::string &id) const
19967 {
19968   return this->set_range_tuple(isl::id(ctx(), id));
19969 }
19970 
set_tuple_id(isl::dim type,isl::id id)19971 isl::space space::set_tuple_id(isl::dim type, isl::id id) const
19972 {
19973   auto res = isl_space_set_tuple_id(copy(), static_cast<enum isl_dim_type>(type), id.release());
19974   return manage(res);
19975 }
19976 
set_tuple_id(isl::dim type,const std::string & id)19977 isl::space space::set_tuple_id(isl::dim type, const std::string &id) const
19978 {
19979   return this->set_tuple_id(type, isl::id(ctx(), id));
19980 }
19981 
tuple_id(isl::dim type)19982 isl::id space::tuple_id(isl::dim type) const
19983 {
19984   auto res = isl_space_get_tuple_id(get(), static_cast<enum isl_dim_type>(type));
19985   return manage(res);
19986 }
19987 
get_tuple_id(isl::dim type)19988 isl::id space::get_tuple_id(isl::dim type) const
19989 {
19990   return tuple_id(type);
19991 }
19992 
tuple_name(isl::dim type)19993 std::string space::tuple_name(isl::dim type) const
19994 {
19995   auto res = isl_space_get_tuple_name(get(), static_cast<enum isl_dim_type>(type));
19996   std::string tmp(res);
19997   return tmp;
19998 }
19999 
get_tuple_name(isl::dim type)20000 std::string space::get_tuple_name(isl::dim type) const
20001 {
20002   return tuple_name(type);
20003 }
20004 
uncurry()20005 isl::space space::uncurry() const
20006 {
20007   auto res = isl_space_uncurry(copy());
20008   return manage(res);
20009 }
20010 
unit(isl::ctx ctx)20011 isl::space space::unit(isl::ctx ctx)
20012 {
20013   auto res = isl_space_unit(ctx.release());
20014   return manage(res);
20015 }
20016 
universe_map()20017 isl::map space::universe_map() const
20018 {
20019   auto res = isl_space_universe_map(copy());
20020   return manage(res);
20021 }
20022 
universe_set()20023 isl::set space::universe_set() const
20024 {
20025   auto res = isl_space_universe_set(copy());
20026   return manage(res);
20027 }
20028 
unwrap()20029 isl::space space::unwrap() const
20030 {
20031   auto res = isl_space_unwrap(copy());
20032   return manage(res);
20033 }
20034 
wrap()20035 isl::space space::wrap() const
20036 {
20037   auto res = isl_space_wrap(copy());
20038   return manage(res);
20039 }
20040 
zero_aff_on_domain()20041 isl::aff space::zero_aff_on_domain() const
20042 {
20043   auto res = isl_space_zero_aff_on_domain(copy());
20044   return manage(res);
20045 }
20046 
zero_multi_aff()20047 isl::multi_aff space::zero_multi_aff() const
20048 {
20049   auto res = isl_space_zero_multi_aff(copy());
20050   return manage(res);
20051 }
20052 
zero_multi_pw_aff()20053 isl::multi_pw_aff space::zero_multi_pw_aff() const
20054 {
20055   auto res = isl_space_zero_multi_pw_aff(copy());
20056   return manage(res);
20057 }
20058 
zero_multi_union_pw_aff()20059 isl::multi_union_pw_aff space::zero_multi_union_pw_aff() const
20060 {
20061   auto res = isl_space_zero_multi_union_pw_aff(copy());
20062   return manage(res);
20063 }
20064 
zero_multi_val()20065 isl::multi_val space::zero_multi_val() const
20066 {
20067   auto res = isl_space_zero_multi_val(copy());
20068   return manage(res);
20069 }
20070 
20071 inline std::ostream &operator<<(std::ostream &os, const space &obj)
20072 {
20073   char *str = isl_space_to_str(obj.get());
20074   if (!str) {
20075     os.setstate(std::ios_base::badbit);
20076     return os;
20077   }
20078   os << str;
20079   free(str);
20080   return os;
20081 }
20082 
20083 // implementations for isl::union_access_info
manage(__isl_take isl_union_access_info * ptr)20084 union_access_info manage(__isl_take isl_union_access_info *ptr) {
20085   return union_access_info(ptr);
20086 }
manage_copy(__isl_keep isl_union_access_info * ptr)20087 union_access_info manage_copy(__isl_keep isl_union_access_info *ptr) {
20088   ptr = isl_union_access_info_copy(ptr);
20089   return union_access_info(ptr);
20090 }
20091 
union_access_info()20092 union_access_info::union_access_info()
20093     : ptr(nullptr) {}
20094 
union_access_info(const union_access_info & obj)20095 union_access_info::union_access_info(const union_access_info &obj)
20096     : ptr(nullptr)
20097 {
20098   ptr = obj.copy();
20099 }
20100 
union_access_info(__isl_take isl_union_access_info * ptr)20101 union_access_info::union_access_info(__isl_take isl_union_access_info *ptr)
20102     : ptr(ptr) {}
20103 
union_access_info(isl::union_map sink)20104 union_access_info::union_access_info(isl::union_map sink)
20105 {
20106   auto res = isl_union_access_info_from_sink(sink.release());
20107   ptr = res;
20108 }
20109 
20110 union_access_info &union_access_info::operator=(union_access_info obj) {
20111   std::swap(this->ptr, obj.ptr);
20112   return *this;
20113 }
20114 
~union_access_info()20115 union_access_info::~union_access_info() {
20116   if (ptr)
20117     isl_union_access_info_free(ptr);
20118 }
20119 
copy()20120 __isl_give isl_union_access_info *union_access_info::copy() const & {
20121   return isl_union_access_info_copy(ptr);
20122 }
20123 
get()20124 __isl_keep isl_union_access_info *union_access_info::get() const {
20125   return ptr;
20126 }
20127 
release()20128 __isl_give isl_union_access_info *union_access_info::release() {
20129   isl_union_access_info *tmp = ptr;
20130   ptr = nullptr;
20131   return tmp;
20132 }
20133 
is_null()20134 bool union_access_info::is_null() const {
20135   return ptr == nullptr;
20136 }
20137 
ctx()20138 isl::ctx union_access_info::ctx() const {
20139   return isl::ctx(isl_union_access_info_get_ctx(ptr));
20140 }
20141 
compute_flow()20142 isl::union_flow union_access_info::compute_flow() const
20143 {
20144   auto res = isl_union_access_info_compute_flow(copy());
20145   return manage(res);
20146 }
20147 
set_kill(isl::union_map kill)20148 isl::union_access_info union_access_info::set_kill(isl::union_map kill) const
20149 {
20150   auto res = isl_union_access_info_set_kill(copy(), kill.release());
20151   return manage(res);
20152 }
20153 
set_may_source(isl::union_map may_source)20154 isl::union_access_info union_access_info::set_may_source(isl::union_map may_source) const
20155 {
20156   auto res = isl_union_access_info_set_may_source(copy(), may_source.release());
20157   return manage(res);
20158 }
20159 
set_must_source(isl::union_map must_source)20160 isl::union_access_info union_access_info::set_must_source(isl::union_map must_source) const
20161 {
20162   auto res = isl_union_access_info_set_must_source(copy(), must_source.release());
20163   return manage(res);
20164 }
20165 
set_schedule(isl::schedule schedule)20166 isl::union_access_info union_access_info::set_schedule(isl::schedule schedule) const
20167 {
20168   auto res = isl_union_access_info_set_schedule(copy(), schedule.release());
20169   return manage(res);
20170 }
20171 
set_schedule_map(isl::union_map schedule_map)20172 isl::union_access_info union_access_info::set_schedule_map(isl::union_map schedule_map) const
20173 {
20174   auto res = isl_union_access_info_set_schedule_map(copy(), schedule_map.release());
20175   return manage(res);
20176 }
20177 
20178 inline std::ostream &operator<<(std::ostream &os, const union_access_info &obj)
20179 {
20180   char *str = isl_union_access_info_to_str(obj.get());
20181   if (!str) {
20182     os.setstate(std::ios_base::badbit);
20183     return os;
20184   }
20185   os << str;
20186   free(str);
20187   return os;
20188 }
20189 
20190 // implementations for isl::union_flow
manage(__isl_take isl_union_flow * ptr)20191 union_flow manage(__isl_take isl_union_flow *ptr) {
20192   return union_flow(ptr);
20193 }
manage_copy(__isl_keep isl_union_flow * ptr)20194 union_flow manage_copy(__isl_keep isl_union_flow *ptr) {
20195   ptr = isl_union_flow_copy(ptr);
20196   return union_flow(ptr);
20197 }
20198 
union_flow()20199 union_flow::union_flow()
20200     : ptr(nullptr) {}
20201 
union_flow(const union_flow & obj)20202 union_flow::union_flow(const union_flow &obj)
20203     : ptr(nullptr)
20204 {
20205   ptr = obj.copy();
20206 }
20207 
union_flow(__isl_take isl_union_flow * ptr)20208 union_flow::union_flow(__isl_take isl_union_flow *ptr)
20209     : ptr(ptr) {}
20210 
20211 union_flow &union_flow::operator=(union_flow obj) {
20212   std::swap(this->ptr, obj.ptr);
20213   return *this;
20214 }
20215 
~union_flow()20216 union_flow::~union_flow() {
20217   if (ptr)
20218     isl_union_flow_free(ptr);
20219 }
20220 
copy()20221 __isl_give isl_union_flow *union_flow::copy() const & {
20222   return isl_union_flow_copy(ptr);
20223 }
20224 
get()20225 __isl_keep isl_union_flow *union_flow::get() const {
20226   return ptr;
20227 }
20228 
release()20229 __isl_give isl_union_flow *union_flow::release() {
20230   isl_union_flow *tmp = ptr;
20231   ptr = nullptr;
20232   return tmp;
20233 }
20234 
is_null()20235 bool union_flow::is_null() const {
20236   return ptr == nullptr;
20237 }
20238 
ctx()20239 isl::ctx union_flow::ctx() const {
20240   return isl::ctx(isl_union_flow_get_ctx(ptr));
20241 }
20242 
full_may_dependence()20243 isl::union_map union_flow::full_may_dependence() const
20244 {
20245   auto res = isl_union_flow_get_full_may_dependence(get());
20246   return manage(res);
20247 }
20248 
get_full_may_dependence()20249 isl::union_map union_flow::get_full_may_dependence() const
20250 {
20251   return full_may_dependence();
20252 }
20253 
full_must_dependence()20254 isl::union_map union_flow::full_must_dependence() const
20255 {
20256   auto res = isl_union_flow_get_full_must_dependence(get());
20257   return manage(res);
20258 }
20259 
get_full_must_dependence()20260 isl::union_map union_flow::get_full_must_dependence() const
20261 {
20262   return full_must_dependence();
20263 }
20264 
may_dependence()20265 isl::union_map union_flow::may_dependence() const
20266 {
20267   auto res = isl_union_flow_get_may_dependence(get());
20268   return manage(res);
20269 }
20270 
get_may_dependence()20271 isl::union_map union_flow::get_may_dependence() const
20272 {
20273   return may_dependence();
20274 }
20275 
may_no_source()20276 isl::union_map union_flow::may_no_source() const
20277 {
20278   auto res = isl_union_flow_get_may_no_source(get());
20279   return manage(res);
20280 }
20281 
get_may_no_source()20282 isl::union_map union_flow::get_may_no_source() const
20283 {
20284   return may_no_source();
20285 }
20286 
must_dependence()20287 isl::union_map union_flow::must_dependence() const
20288 {
20289   auto res = isl_union_flow_get_must_dependence(get());
20290   return manage(res);
20291 }
20292 
get_must_dependence()20293 isl::union_map union_flow::get_must_dependence() const
20294 {
20295   return must_dependence();
20296 }
20297 
must_no_source()20298 isl::union_map union_flow::must_no_source() const
20299 {
20300   auto res = isl_union_flow_get_must_no_source(get());
20301   return manage(res);
20302 }
20303 
get_must_no_source()20304 isl::union_map union_flow::get_must_no_source() const
20305 {
20306   return must_no_source();
20307 }
20308 
20309 inline std::ostream &operator<<(std::ostream &os, const union_flow &obj)
20310 {
20311   char *str = isl_union_flow_to_str(obj.get());
20312   if (!str) {
20313     os.setstate(std::ios_base::badbit);
20314     return os;
20315   }
20316   os << str;
20317   free(str);
20318   return os;
20319 }
20320 
20321 // implementations for isl::union_map
manage(__isl_take isl_union_map * ptr)20322 union_map manage(__isl_take isl_union_map *ptr) {
20323   return union_map(ptr);
20324 }
manage_copy(__isl_keep isl_union_map * ptr)20325 union_map manage_copy(__isl_keep isl_union_map *ptr) {
20326   ptr = isl_union_map_copy(ptr);
20327   return union_map(ptr);
20328 }
20329 
union_map()20330 union_map::union_map()
20331     : ptr(nullptr) {}
20332 
union_map(const union_map & obj)20333 union_map::union_map(const union_map &obj)
20334     : ptr(nullptr)
20335 {
20336   ptr = obj.copy();
20337 }
20338 
union_map(__isl_take isl_union_map * ptr)20339 union_map::union_map(__isl_take isl_union_map *ptr)
20340     : ptr(ptr) {}
20341 
union_map(isl::basic_map bmap)20342 union_map::union_map(isl::basic_map bmap)
20343 {
20344   auto res = isl_union_map_from_basic_map(bmap.release());
20345   ptr = res;
20346 }
20347 
union_map(isl::map map)20348 union_map::union_map(isl::map map)
20349 {
20350   auto res = isl_union_map_from_map(map.release());
20351   ptr = res;
20352 }
20353 
union_map(isl::ctx ctx,const std::string & str)20354 union_map::union_map(isl::ctx ctx, const std::string &str)
20355 {
20356   auto res = isl_union_map_read_from_str(ctx.release(), str.c_str());
20357   ptr = res;
20358 }
20359 
20360 union_map &union_map::operator=(union_map obj) {
20361   std::swap(this->ptr, obj.ptr);
20362   return *this;
20363 }
20364 
~union_map()20365 union_map::~union_map() {
20366   if (ptr)
20367     isl_union_map_free(ptr);
20368 }
20369 
copy()20370 __isl_give isl_union_map *union_map::copy() const & {
20371   return isl_union_map_copy(ptr);
20372 }
20373 
get()20374 __isl_keep isl_union_map *union_map::get() const {
20375   return ptr;
20376 }
20377 
release()20378 __isl_give isl_union_map *union_map::release() {
20379   isl_union_map *tmp = ptr;
20380   ptr = nullptr;
20381   return tmp;
20382 }
20383 
is_null()20384 bool union_map::is_null() const {
20385   return ptr == nullptr;
20386 }
20387 
ctx()20388 isl::ctx union_map::ctx() const {
20389   return isl::ctx(isl_union_map_get_ctx(ptr));
20390 }
20391 
affine_hull()20392 isl::union_map union_map::affine_hull() const
20393 {
20394   auto res = isl_union_map_affine_hull(copy());
20395   return manage(res);
20396 }
20397 
apply_domain(isl::union_map umap2)20398 isl::union_map union_map::apply_domain(isl::union_map umap2) const
20399 {
20400   auto res = isl_union_map_apply_domain(copy(), umap2.release());
20401   return manage(res);
20402 }
20403 
apply_range(isl::union_map umap2)20404 isl::union_map union_map::apply_range(isl::union_map umap2) const
20405 {
20406   auto res = isl_union_map_apply_range(copy(), umap2.release());
20407   return manage(res);
20408 }
20409 
as_map()20410 isl::map union_map::as_map() const
20411 {
20412   auto res = isl_union_map_as_map(copy());
20413   return manage(res);
20414 }
20415 
as_multi_union_pw_aff()20416 isl::multi_union_pw_aff union_map::as_multi_union_pw_aff() const
20417 {
20418   auto res = isl_union_map_as_multi_union_pw_aff(copy());
20419   return manage(res);
20420 }
20421 
as_union_pw_multi_aff()20422 isl::union_pw_multi_aff union_map::as_union_pw_multi_aff() const
20423 {
20424   auto res = isl_union_map_as_union_pw_multi_aff(copy());
20425   return manage(res);
20426 }
20427 
bind_range(isl::multi_id tuple)20428 isl::union_set union_map::bind_range(isl::multi_id tuple) const
20429 {
20430   auto res = isl_union_map_bind_range(copy(), tuple.release());
20431   return manage(res);
20432 }
20433 
coalesce()20434 isl::union_map union_map::coalesce() const
20435 {
20436   auto res = isl_union_map_coalesce(copy());
20437   return manage(res);
20438 }
20439 
compute_divs()20440 isl::union_map union_map::compute_divs() const
20441 {
20442   auto res = isl_union_map_compute_divs(copy());
20443   return manage(res);
20444 }
20445 
curry()20446 isl::union_map union_map::curry() const
20447 {
20448   auto res = isl_union_map_curry(copy());
20449   return manage(res);
20450 }
20451 
deltas()20452 isl::union_set union_map::deltas() const
20453 {
20454   auto res = isl_union_map_deltas(copy());
20455   return manage(res);
20456 }
20457 
detect_equalities()20458 isl::union_map union_map::detect_equalities() const
20459 {
20460   auto res = isl_union_map_detect_equalities(copy());
20461   return manage(res);
20462 }
20463 
domain()20464 isl::union_set union_map::domain() const
20465 {
20466   auto res = isl_union_map_domain(copy());
20467   return manage(res);
20468 }
20469 
domain_factor_domain()20470 isl::union_map union_map::domain_factor_domain() const
20471 {
20472   auto res = isl_union_map_domain_factor_domain(copy());
20473   return manage(res);
20474 }
20475 
domain_factor_range()20476 isl::union_map union_map::domain_factor_range() const
20477 {
20478   auto res = isl_union_map_domain_factor_range(copy());
20479   return manage(res);
20480 }
20481 
domain_map()20482 isl::union_map union_map::domain_map() const
20483 {
20484   auto res = isl_union_map_domain_map(copy());
20485   return manage(res);
20486 }
20487 
domain_map_union_pw_multi_aff()20488 isl::union_pw_multi_aff union_map::domain_map_union_pw_multi_aff() const
20489 {
20490   auto res = isl_union_map_domain_map_union_pw_multi_aff(copy());
20491   return manage(res);
20492 }
20493 
domain_product(isl::union_map umap2)20494 isl::union_map union_map::domain_product(isl::union_map umap2) const
20495 {
20496   auto res = isl_union_map_domain_product(copy(), umap2.release());
20497   return manage(res);
20498 }
20499 
empty(isl::ctx ctx)20500 isl::union_map union_map::empty(isl::ctx ctx)
20501 {
20502   auto res = isl_union_map_empty_ctx(ctx.release());
20503   return manage(res);
20504 }
20505 
eq_at(isl::multi_union_pw_aff mupa)20506 isl::union_map union_map::eq_at(isl::multi_union_pw_aff mupa) const
20507 {
20508   auto res = isl_union_map_eq_at_multi_union_pw_aff(copy(), mupa.release());
20509   return manage(res);
20510 }
20511 
every_map(const std::function<boolean (isl::map)> & test)20512 boolean union_map::every_map(const std::function<boolean(isl::map)> &test) const
20513 {
20514   struct test_data {
20515     std::function<boolean(isl::map)> func;
20516   } test_data = { test };
20517   auto test_lambda = [](isl_map *arg_0, void *arg_1) -> isl_bool {
20518     auto *data = static_cast<struct test_data *>(arg_1);
20519     auto ret = (data->func)(manage_copy(arg_0));
20520     return ret.release();
20521   };
20522   auto res = isl_union_map_every_map(get(), test_lambda, &test_data);
20523   return manage(res);
20524 }
20525 
extract_map(isl::space space)20526 isl::map union_map::extract_map(isl::space space) const
20527 {
20528   auto res = isl_union_map_extract_map(get(), space.release());
20529   return manage(res);
20530 }
20531 
factor_domain()20532 isl::union_map union_map::factor_domain() const
20533 {
20534   auto res = isl_union_map_factor_domain(copy());
20535   return manage(res);
20536 }
20537 
factor_range()20538 isl::union_map union_map::factor_range() const
20539 {
20540   auto res = isl_union_map_factor_range(copy());
20541   return manage(res);
20542 }
20543 
fixed_power(isl::val exp)20544 isl::union_map union_map::fixed_power(isl::val exp) const
20545 {
20546   auto res = isl_union_map_fixed_power_val(copy(), exp.release());
20547   return manage(res);
20548 }
20549 
fixed_power(long exp)20550 isl::union_map union_map::fixed_power(long exp) const
20551 {
20552   return this->fixed_power(isl::val(ctx(), exp));
20553 }
20554 
flat_range_product(isl::union_map umap2)20555 isl::union_map union_map::flat_range_product(isl::union_map umap2) const
20556 {
20557   auto res = isl_union_map_flat_range_product(copy(), umap2.release());
20558   return manage(res);
20559 }
20560 
foreach_map(const std::function<stat (isl::map)> & fn)20561 stat union_map::foreach_map(const std::function<stat(isl::map)> &fn) const
20562 {
20563   struct fn_data {
20564     std::function<stat(isl::map)> func;
20565   } fn_data = { fn };
20566   auto fn_lambda = [](isl_map *arg_0, void *arg_1) -> isl_stat {
20567     auto *data = static_cast<struct fn_data *>(arg_1);
20568     auto ret = (data->func)(manage(arg_0));
20569     return ret.release();
20570   };
20571   auto res = isl_union_map_foreach_map(get(), fn_lambda, &fn_data);
20572   return manage(res);
20573 }
20574 
from(isl::multi_union_pw_aff mupa)20575 isl::union_map union_map::from(isl::multi_union_pw_aff mupa)
20576 {
20577   auto res = isl_union_map_from_multi_union_pw_aff(mupa.release());
20578   return manage(res);
20579 }
20580 
from(isl::union_pw_multi_aff upma)20581 isl::union_map union_map::from(isl::union_pw_multi_aff upma)
20582 {
20583   auto res = isl_union_map_from_union_pw_multi_aff(upma.release());
20584   return manage(res);
20585 }
20586 
from_domain(isl::union_set uset)20587 isl::union_map union_map::from_domain(isl::union_set uset)
20588 {
20589   auto res = isl_union_map_from_domain(uset.release());
20590   return manage(res);
20591 }
20592 
from_domain_and_range(isl::union_set domain,isl::union_set range)20593 isl::union_map union_map::from_domain_and_range(isl::union_set domain, isl::union_set range)
20594 {
20595   auto res = isl_union_map_from_domain_and_range(domain.release(), range.release());
20596   return manage(res);
20597 }
20598 
from_range(isl::union_set uset)20599 isl::union_map union_map::from_range(isl::union_set uset)
20600 {
20601   auto res = isl_union_map_from_range(uset.release());
20602   return manage(res);
20603 }
20604 
gist(isl::union_map context)20605 isl::union_map union_map::gist(isl::union_map context) const
20606 {
20607   auto res = isl_union_map_gist(copy(), context.release());
20608   return manage(res);
20609 }
20610 
gist_domain(isl::union_set uset)20611 isl::union_map union_map::gist_domain(isl::union_set uset) const
20612 {
20613   auto res = isl_union_map_gist_domain(copy(), uset.release());
20614   return manage(res);
20615 }
20616 
gist_params(isl::set set)20617 isl::union_map union_map::gist_params(isl::set set) const
20618 {
20619   auto res = isl_union_map_gist_params(copy(), set.release());
20620   return manage(res);
20621 }
20622 
gist_range(isl::union_set uset)20623 isl::union_map union_map::gist_range(isl::union_set uset) const
20624 {
20625   auto res = isl_union_map_gist_range(copy(), uset.release());
20626   return manage(res);
20627 }
20628 
intersect(isl::union_map umap2)20629 isl::union_map union_map::intersect(isl::union_map umap2) const
20630 {
20631   auto res = isl_union_map_intersect(copy(), umap2.release());
20632   return manage(res);
20633 }
20634 
intersect_domain(isl::space space)20635 isl::union_map union_map::intersect_domain(isl::space space) const
20636 {
20637   auto res = isl_union_map_intersect_domain_space(copy(), space.release());
20638   return manage(res);
20639 }
20640 
intersect_domain(isl::union_set uset)20641 isl::union_map union_map::intersect_domain(isl::union_set uset) const
20642 {
20643   auto res = isl_union_map_intersect_domain_union_set(copy(), uset.release());
20644   return manage(res);
20645 }
20646 
intersect_domain_factor_domain(isl::union_map factor)20647 isl::union_map union_map::intersect_domain_factor_domain(isl::union_map factor) const
20648 {
20649   auto res = isl_union_map_intersect_domain_factor_domain(copy(), factor.release());
20650   return manage(res);
20651 }
20652 
intersect_domain_factor_range(isl::union_map factor)20653 isl::union_map union_map::intersect_domain_factor_range(isl::union_map factor) const
20654 {
20655   auto res = isl_union_map_intersect_domain_factor_range(copy(), factor.release());
20656   return manage(res);
20657 }
20658 
intersect_params(isl::set set)20659 isl::union_map union_map::intersect_params(isl::set set) const
20660 {
20661   auto res = isl_union_map_intersect_params(copy(), set.release());
20662   return manage(res);
20663 }
20664 
intersect_range(isl::space space)20665 isl::union_map union_map::intersect_range(isl::space space) const
20666 {
20667   auto res = isl_union_map_intersect_range_space(copy(), space.release());
20668   return manage(res);
20669 }
20670 
intersect_range(isl::union_set uset)20671 isl::union_map union_map::intersect_range(isl::union_set uset) const
20672 {
20673   auto res = isl_union_map_intersect_range_union_set(copy(), uset.release());
20674   return manage(res);
20675 }
20676 
intersect_range_factor_domain(isl::union_map factor)20677 isl::union_map union_map::intersect_range_factor_domain(isl::union_map factor) const
20678 {
20679   auto res = isl_union_map_intersect_range_factor_domain(copy(), factor.release());
20680   return manage(res);
20681 }
20682 
intersect_range_factor_range(isl::union_map factor)20683 isl::union_map union_map::intersect_range_factor_range(isl::union_map factor) const
20684 {
20685   auto res = isl_union_map_intersect_range_factor_range(copy(), factor.release());
20686   return manage(res);
20687 }
20688 
is_bijective()20689 boolean union_map::is_bijective() const
20690 {
20691   auto res = isl_union_map_is_bijective(get());
20692   return manage(res);
20693 }
20694 
is_disjoint(const isl::union_map & umap2)20695 boolean union_map::is_disjoint(const isl::union_map &umap2) const
20696 {
20697   auto res = isl_union_map_is_disjoint(get(), umap2.get());
20698   return manage(res);
20699 }
20700 
is_empty()20701 boolean union_map::is_empty() const
20702 {
20703   auto res = isl_union_map_is_empty(get());
20704   return manage(res);
20705 }
20706 
is_equal(const isl::union_map & umap2)20707 boolean union_map::is_equal(const isl::union_map &umap2) const
20708 {
20709   auto res = isl_union_map_is_equal(get(), umap2.get());
20710   return manage(res);
20711 }
20712 
is_injective()20713 boolean union_map::is_injective() const
20714 {
20715   auto res = isl_union_map_is_injective(get());
20716   return manage(res);
20717 }
20718 
is_single_valued()20719 boolean union_map::is_single_valued() const
20720 {
20721   auto res = isl_union_map_is_single_valued(get());
20722   return manage(res);
20723 }
20724 
is_strict_subset(const isl::union_map & umap2)20725 boolean union_map::is_strict_subset(const isl::union_map &umap2) const
20726 {
20727   auto res = isl_union_map_is_strict_subset(get(), umap2.get());
20728   return manage(res);
20729 }
20730 
is_subset(const isl::union_map & umap2)20731 boolean union_map::is_subset(const isl::union_map &umap2) const
20732 {
20733   auto res = isl_union_map_is_subset(get(), umap2.get());
20734   return manage(res);
20735 }
20736 
isa_map()20737 boolean union_map::isa_map() const
20738 {
20739   auto res = isl_union_map_isa_map(get());
20740   return manage(res);
20741 }
20742 
lexmax()20743 isl::union_map union_map::lexmax() const
20744 {
20745   auto res = isl_union_map_lexmax(copy());
20746   return manage(res);
20747 }
20748 
lexmin()20749 isl::union_map union_map::lexmin() const
20750 {
20751   auto res = isl_union_map_lexmin(copy());
20752   return manage(res);
20753 }
20754 
map_list()20755 isl::map_list union_map::map_list() const
20756 {
20757   auto res = isl_union_map_get_map_list(get());
20758   return manage(res);
20759 }
20760 
get_map_list()20761 isl::map_list union_map::get_map_list() const
20762 {
20763   return map_list();
20764 }
20765 
params()20766 isl::set union_map::params() const
20767 {
20768   auto res = isl_union_map_params(copy());
20769   return manage(res);
20770 }
20771 
polyhedral_hull()20772 isl::union_map union_map::polyhedral_hull() const
20773 {
20774   auto res = isl_union_map_polyhedral_hull(copy());
20775   return manage(res);
20776 }
20777 
preimage_domain(isl::multi_aff ma)20778 isl::union_map union_map::preimage_domain(isl::multi_aff ma) const
20779 {
20780   auto res = isl_union_map_preimage_domain_multi_aff(copy(), ma.release());
20781   return manage(res);
20782 }
20783 
preimage_domain(isl::multi_pw_aff mpa)20784 isl::union_map union_map::preimage_domain(isl::multi_pw_aff mpa) const
20785 {
20786   auto res = isl_union_map_preimage_domain_multi_pw_aff(copy(), mpa.release());
20787   return manage(res);
20788 }
20789 
preimage_domain(isl::pw_multi_aff pma)20790 isl::union_map union_map::preimage_domain(isl::pw_multi_aff pma) const
20791 {
20792   auto res = isl_union_map_preimage_domain_pw_multi_aff(copy(), pma.release());
20793   return manage(res);
20794 }
20795 
preimage_domain(isl::union_pw_multi_aff upma)20796 isl::union_map union_map::preimage_domain(isl::union_pw_multi_aff upma) const
20797 {
20798   auto res = isl_union_map_preimage_domain_union_pw_multi_aff(copy(), upma.release());
20799   return manage(res);
20800 }
20801 
preimage_range(isl::multi_aff ma)20802 isl::union_map union_map::preimage_range(isl::multi_aff ma) const
20803 {
20804   auto res = isl_union_map_preimage_range_multi_aff(copy(), ma.release());
20805   return manage(res);
20806 }
20807 
preimage_range(isl::pw_multi_aff pma)20808 isl::union_map union_map::preimage_range(isl::pw_multi_aff pma) const
20809 {
20810   auto res = isl_union_map_preimage_range_pw_multi_aff(copy(), pma.release());
20811   return manage(res);
20812 }
20813 
preimage_range(isl::union_pw_multi_aff upma)20814 isl::union_map union_map::preimage_range(isl::union_pw_multi_aff upma) const
20815 {
20816   auto res = isl_union_map_preimage_range_union_pw_multi_aff(copy(), upma.release());
20817   return manage(res);
20818 }
20819 
product(isl::union_map umap2)20820 isl::union_map union_map::product(isl::union_map umap2) const
20821 {
20822   auto res = isl_union_map_product(copy(), umap2.release());
20823   return manage(res);
20824 }
20825 
project_out_all_params()20826 isl::union_map union_map::project_out_all_params() const
20827 {
20828   auto res = isl_union_map_project_out_all_params(copy());
20829   return manage(res);
20830 }
20831 
range()20832 isl::union_set union_map::range() const
20833 {
20834   auto res = isl_union_map_range(copy());
20835   return manage(res);
20836 }
20837 
range_factor_domain()20838 isl::union_map union_map::range_factor_domain() const
20839 {
20840   auto res = isl_union_map_range_factor_domain(copy());
20841   return manage(res);
20842 }
20843 
range_factor_range()20844 isl::union_map union_map::range_factor_range() const
20845 {
20846   auto res = isl_union_map_range_factor_range(copy());
20847   return manage(res);
20848 }
20849 
range_map()20850 isl::union_map union_map::range_map() const
20851 {
20852   auto res = isl_union_map_range_map(copy());
20853   return manage(res);
20854 }
20855 
range_product(isl::union_map umap2)20856 isl::union_map union_map::range_product(isl::union_map umap2) const
20857 {
20858   auto res = isl_union_map_range_product(copy(), umap2.release());
20859   return manage(res);
20860 }
20861 
range_reverse()20862 isl::union_map union_map::range_reverse() const
20863 {
20864   auto res = isl_union_map_range_reverse(copy());
20865   return manage(res);
20866 }
20867 
reverse()20868 isl::union_map union_map::reverse() const
20869 {
20870   auto res = isl_union_map_reverse(copy());
20871   return manage(res);
20872 }
20873 
space()20874 isl::space union_map::space() const
20875 {
20876   auto res = isl_union_map_get_space(get());
20877   return manage(res);
20878 }
20879 
get_space()20880 isl::space union_map::get_space() const
20881 {
20882   return space();
20883 }
20884 
subtract(isl::union_map umap2)20885 isl::union_map union_map::subtract(isl::union_map umap2) const
20886 {
20887   auto res = isl_union_map_subtract(copy(), umap2.release());
20888   return manage(res);
20889 }
20890 
subtract_domain(isl::union_set dom)20891 isl::union_map union_map::subtract_domain(isl::union_set dom) const
20892 {
20893   auto res = isl_union_map_subtract_domain(copy(), dom.release());
20894   return manage(res);
20895 }
20896 
subtract_range(isl::union_set dom)20897 isl::union_map union_map::subtract_range(isl::union_set dom) const
20898 {
20899   auto res = isl_union_map_subtract_range(copy(), dom.release());
20900   return manage(res);
20901 }
20902 
uncurry()20903 isl::union_map union_map::uncurry() const
20904 {
20905   auto res = isl_union_map_uncurry(copy());
20906   return manage(res);
20907 }
20908 
unite(isl::union_map umap2)20909 isl::union_map union_map::unite(isl::union_map umap2) const
20910 {
20911   auto res = isl_union_map_union(copy(), umap2.release());
20912   return manage(res);
20913 }
20914 
universe()20915 isl::union_map union_map::universe() const
20916 {
20917   auto res = isl_union_map_universe(copy());
20918   return manage(res);
20919 }
20920 
wrap()20921 isl::union_set union_map::wrap() const
20922 {
20923   auto res = isl_union_map_wrap(copy());
20924   return manage(res);
20925 }
20926 
zip()20927 isl::union_map union_map::zip() const
20928 {
20929   auto res = isl_union_map_zip(copy());
20930   return manage(res);
20931 }
20932 
20933 inline std::ostream &operator<<(std::ostream &os, const union_map &obj)
20934 {
20935   char *str = isl_union_map_to_str(obj.get());
20936   if (!str) {
20937     os.setstate(std::ios_base::badbit);
20938     return os;
20939   }
20940   os << str;
20941   free(str);
20942   return os;
20943 }
20944 
20945 // implementations for isl::union_pw_aff
manage(__isl_take isl_union_pw_aff * ptr)20946 union_pw_aff manage(__isl_take isl_union_pw_aff *ptr) {
20947   return union_pw_aff(ptr);
20948 }
manage_copy(__isl_keep isl_union_pw_aff * ptr)20949 union_pw_aff manage_copy(__isl_keep isl_union_pw_aff *ptr) {
20950   ptr = isl_union_pw_aff_copy(ptr);
20951   return union_pw_aff(ptr);
20952 }
20953 
union_pw_aff()20954 union_pw_aff::union_pw_aff()
20955     : ptr(nullptr) {}
20956 
union_pw_aff(const union_pw_aff & obj)20957 union_pw_aff::union_pw_aff(const union_pw_aff &obj)
20958     : ptr(nullptr)
20959 {
20960   ptr = obj.copy();
20961 }
20962 
union_pw_aff(__isl_take isl_union_pw_aff * ptr)20963 union_pw_aff::union_pw_aff(__isl_take isl_union_pw_aff *ptr)
20964     : ptr(ptr) {}
20965 
union_pw_aff(isl::aff aff)20966 union_pw_aff::union_pw_aff(isl::aff aff)
20967 {
20968   auto res = isl_union_pw_aff_from_aff(aff.release());
20969   ptr = res;
20970 }
20971 
union_pw_aff(isl::pw_aff pa)20972 union_pw_aff::union_pw_aff(isl::pw_aff pa)
20973 {
20974   auto res = isl_union_pw_aff_from_pw_aff(pa.release());
20975   ptr = res;
20976 }
20977 
union_pw_aff(isl::ctx ctx,const std::string & str)20978 union_pw_aff::union_pw_aff(isl::ctx ctx, const std::string &str)
20979 {
20980   auto res = isl_union_pw_aff_read_from_str(ctx.release(), str.c_str());
20981   ptr = res;
20982 }
20983 
union_pw_aff(isl::union_set domain,isl::val v)20984 union_pw_aff::union_pw_aff(isl::union_set domain, isl::val v)
20985 {
20986   auto res = isl_union_pw_aff_val_on_domain(domain.release(), v.release());
20987   ptr = res;
20988 }
20989 
20990 union_pw_aff &union_pw_aff::operator=(union_pw_aff obj) {
20991   std::swap(this->ptr, obj.ptr);
20992   return *this;
20993 }
20994 
~union_pw_aff()20995 union_pw_aff::~union_pw_aff() {
20996   if (ptr)
20997     isl_union_pw_aff_free(ptr);
20998 }
20999 
copy()21000 __isl_give isl_union_pw_aff *union_pw_aff::copy() const & {
21001   return isl_union_pw_aff_copy(ptr);
21002 }
21003 
get()21004 __isl_keep isl_union_pw_aff *union_pw_aff::get() const {
21005   return ptr;
21006 }
21007 
release()21008 __isl_give isl_union_pw_aff *union_pw_aff::release() {
21009   isl_union_pw_aff *tmp = ptr;
21010   ptr = nullptr;
21011   return tmp;
21012 }
21013 
is_null()21014 bool union_pw_aff::is_null() const {
21015   return ptr == nullptr;
21016 }
21017 
ctx()21018 isl::ctx union_pw_aff::ctx() const {
21019   return isl::ctx(isl_union_pw_aff_get_ctx(ptr));
21020 }
21021 
add(const isl::multi_union_pw_aff & multi2)21022 isl::multi_union_pw_aff union_pw_aff::add(const isl::multi_union_pw_aff &multi2) const
21023 {
21024   return isl::multi_union_pw_aff(*this).add(multi2);
21025 }
21026 
add(isl::union_pw_aff upa2)21027 isl::union_pw_aff union_pw_aff::add(isl::union_pw_aff upa2) const
21028 {
21029   auto res = isl_union_pw_aff_add(copy(), upa2.release());
21030   return manage(res);
21031 }
21032 
add(const isl::union_pw_multi_aff & upma2)21033 isl::union_pw_multi_aff union_pw_aff::add(const isl::union_pw_multi_aff &upma2) const
21034 {
21035   return isl::union_pw_multi_aff(*this).add(upma2);
21036 }
21037 
add(const isl::aff & upa2)21038 isl::union_pw_aff union_pw_aff::add(const isl::aff &upa2) const
21039 {
21040   return this->add(isl::union_pw_aff(upa2));
21041 }
21042 
add(const isl::pw_aff & upa2)21043 isl::union_pw_aff union_pw_aff::add(const isl::pw_aff &upa2) const
21044 {
21045   return this->add(isl::union_pw_aff(upa2));
21046 }
21047 
add_pw_multi_aff(const isl::pw_multi_aff & pma)21048 isl::union_pw_multi_aff union_pw_aff::add_pw_multi_aff(const isl::pw_multi_aff &pma) const
21049 {
21050   return isl::union_pw_multi_aff(*this).add_pw_multi_aff(pma);
21051 }
21052 
apply(const isl::union_pw_multi_aff & upma2)21053 isl::union_pw_multi_aff union_pw_aff::apply(const isl::union_pw_multi_aff &upma2) const
21054 {
21055   return isl::union_pw_multi_aff(*this).apply(upma2);
21056 }
21057 
as_multi_union_pw_aff()21058 isl::multi_union_pw_aff union_pw_aff::as_multi_union_pw_aff() const
21059 {
21060   return isl::union_pw_multi_aff(*this).as_multi_union_pw_aff();
21061 }
21062 
as_pw_multi_aff()21063 isl::pw_multi_aff union_pw_aff::as_pw_multi_aff() const
21064 {
21065   return isl::union_pw_multi_aff(*this).as_pw_multi_aff();
21066 }
21067 
as_union_map()21068 isl::union_map union_pw_aff::as_union_map() const
21069 {
21070   return isl::union_pw_multi_aff(*this).as_union_map();
21071 }
21072 
at(int pos)21073 isl::union_pw_aff union_pw_aff::at(int pos) const
21074 {
21075   return isl::multi_union_pw_aff(*this).at(pos);
21076 }
21077 
bind(const isl::multi_id & tuple)21078 isl::union_set union_pw_aff::bind(const isl::multi_id &tuple) const
21079 {
21080   return isl::multi_union_pw_aff(*this).bind(tuple);
21081 }
21082 
bind(isl::id id)21083 isl::union_set union_pw_aff::bind(isl::id id) const
21084 {
21085   auto res = isl_union_pw_aff_bind_id(copy(), id.release());
21086   return manage(res);
21087 }
21088 
bind(const std::string & id)21089 isl::union_set union_pw_aff::bind(const std::string &id) const
21090 {
21091   return this->bind(isl::id(ctx(), id));
21092 }
21093 
coalesce()21094 isl::union_pw_aff union_pw_aff::coalesce() const
21095 {
21096   auto res = isl_union_pw_aff_coalesce(copy());
21097   return manage(res);
21098 }
21099 
dim(isl::dim type)21100 class size union_pw_aff::dim(isl::dim type) const
21101 {
21102   return isl::multi_union_pw_aff(*this).dim(type);
21103 }
21104 
domain()21105 isl::union_set union_pw_aff::domain() const
21106 {
21107   auto res = isl_union_pw_aff_domain(copy());
21108   return manage(res);
21109 }
21110 
empty(isl::space space)21111 isl::union_pw_aff union_pw_aff::empty(isl::space space)
21112 {
21113   auto res = isl_union_pw_aff_empty(space.release());
21114   return manage(res);
21115 }
21116 
extract_pw_multi_aff(const isl::space & space)21117 isl::pw_multi_aff union_pw_aff::extract_pw_multi_aff(const isl::space &space) const
21118 {
21119   return isl::union_pw_multi_aff(*this).extract_pw_multi_aff(space);
21120 }
21121 
flat_range_product(const isl::multi_union_pw_aff & multi2)21122 isl::multi_union_pw_aff union_pw_aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const
21123 {
21124   return isl::multi_union_pw_aff(*this).flat_range_product(multi2);
21125 }
21126 
flat_range_product(const isl::union_pw_multi_aff & upma2)21127 isl::union_pw_multi_aff union_pw_aff::flat_range_product(const isl::union_pw_multi_aff &upma2) const
21128 {
21129   return isl::union_pw_multi_aff(*this).flat_range_product(upma2);
21130 }
21131 
foreach_pw_aff(const std::function<stat (isl::pw_aff)> & fn)21132 stat union_pw_aff::foreach_pw_aff(const std::function<stat(isl::pw_aff)> &fn) const
21133 {
21134   struct fn_data {
21135     std::function<stat(isl::pw_aff)> func;
21136   } fn_data = { fn };
21137   auto fn_lambda = [](isl_pw_aff *arg_0, void *arg_1) -> isl_stat {
21138     auto *data = static_cast<struct fn_data *>(arg_1);
21139     auto ret = (data->func)(manage(arg_0));
21140     return ret.release();
21141   };
21142   auto res = isl_union_pw_aff_foreach_pw_aff(get(), fn_lambda, &fn_data);
21143   return manage(res);
21144 }
21145 
gist(isl::union_set context)21146 isl::union_pw_aff union_pw_aff::gist(isl::union_set context) const
21147 {
21148   auto res = isl_union_pw_aff_gist(copy(), context.release());
21149   return manage(res);
21150 }
21151 
has_range_tuple_id()21152 boolean union_pw_aff::has_range_tuple_id() const
21153 {
21154   return isl::multi_union_pw_aff(*this).has_range_tuple_id();
21155 }
21156 
intersect_domain(isl::space space)21157 isl::union_pw_aff union_pw_aff::intersect_domain(isl::space space) const
21158 {
21159   auto res = isl_union_pw_aff_intersect_domain_space(copy(), space.release());
21160   return manage(res);
21161 }
21162 
intersect_domain(isl::union_set uset)21163 isl::union_pw_aff union_pw_aff::intersect_domain(isl::union_set uset) const
21164 {
21165   auto res = isl_union_pw_aff_intersect_domain_union_set(copy(), uset.release());
21166   return manage(res);
21167 }
21168 
intersect_domain_wrapped_domain(isl::union_set uset)21169 isl::union_pw_aff union_pw_aff::intersect_domain_wrapped_domain(isl::union_set uset) const
21170 {
21171   auto res = isl_union_pw_aff_intersect_domain_wrapped_domain(copy(), uset.release());
21172   return manage(res);
21173 }
21174 
intersect_domain_wrapped_range(isl::union_set uset)21175 isl::union_pw_aff union_pw_aff::intersect_domain_wrapped_range(isl::union_set uset) const
21176 {
21177   auto res = isl_union_pw_aff_intersect_domain_wrapped_range(copy(), uset.release());
21178   return manage(res);
21179 }
21180 
intersect_params(isl::set set)21181 isl::union_pw_aff union_pw_aff::intersect_params(isl::set set) const
21182 {
21183   auto res = isl_union_pw_aff_intersect_params(copy(), set.release());
21184   return manage(res);
21185 }
21186 
involves_locals()21187 boolean union_pw_aff::involves_locals() const
21188 {
21189   return isl::union_pw_multi_aff(*this).involves_locals();
21190 }
21191 
involves_nan()21192 boolean union_pw_aff::involves_nan() const
21193 {
21194   return isl::multi_union_pw_aff(*this).involves_nan();
21195 }
21196 
isa_pw_multi_aff()21197 boolean union_pw_aff::isa_pw_multi_aff() const
21198 {
21199   return isl::union_pw_multi_aff(*this).isa_pw_multi_aff();
21200 }
21201 
list()21202 isl::union_pw_aff_list union_pw_aff::list() const
21203 {
21204   return isl::multi_union_pw_aff(*this).list();
21205 }
21206 
neg()21207 isl::multi_union_pw_aff union_pw_aff::neg() const
21208 {
21209   return isl::multi_union_pw_aff(*this).neg();
21210 }
21211 
plain_is_empty()21212 boolean union_pw_aff::plain_is_empty() const
21213 {
21214   return isl::union_pw_multi_aff(*this).plain_is_empty();
21215 }
21216 
plain_is_equal(const isl::multi_union_pw_aff & multi2)21217 boolean union_pw_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
21218 {
21219   return isl::multi_union_pw_aff(*this).plain_is_equal(multi2);
21220 }
21221 
preimage_domain_wrapped_domain(const isl::union_pw_multi_aff & upma2)21222 isl::union_pw_multi_aff union_pw_aff::preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const
21223 {
21224   return isl::union_pw_multi_aff(*this).preimage_domain_wrapped_domain(upma2);
21225 }
21226 
pullback(isl::union_pw_multi_aff upma)21227 isl::union_pw_aff union_pw_aff::pullback(isl::union_pw_multi_aff upma) const
21228 {
21229   auto res = isl_union_pw_aff_pullback_union_pw_multi_aff(copy(), upma.release());
21230   return manage(res);
21231 }
21232 
pw_multi_aff_list()21233 isl::pw_multi_aff_list union_pw_aff::pw_multi_aff_list() const
21234 {
21235   return isl::union_pw_multi_aff(*this).pw_multi_aff_list();
21236 }
21237 
range_factor_domain()21238 isl::union_pw_multi_aff union_pw_aff::range_factor_domain() const
21239 {
21240   return isl::union_pw_multi_aff(*this).range_factor_domain();
21241 }
21242 
range_factor_range()21243 isl::union_pw_multi_aff union_pw_aff::range_factor_range() const
21244 {
21245   return isl::union_pw_multi_aff(*this).range_factor_range();
21246 }
21247 
range_product(const isl::multi_union_pw_aff & multi2)21248 isl::multi_union_pw_aff union_pw_aff::range_product(const isl::multi_union_pw_aff &multi2) const
21249 {
21250   return isl::multi_union_pw_aff(*this).range_product(multi2);
21251 }
21252 
range_product(const isl::union_pw_multi_aff & upma2)21253 isl::union_pw_multi_aff union_pw_aff::range_product(const isl::union_pw_multi_aff &upma2) const
21254 {
21255   return isl::union_pw_multi_aff(*this).range_product(upma2);
21256 }
21257 
range_tuple_id()21258 isl::id union_pw_aff::range_tuple_id() const
21259 {
21260   return isl::multi_union_pw_aff(*this).range_tuple_id();
21261 }
21262 
reset_range_tuple_id()21263 isl::multi_union_pw_aff union_pw_aff::reset_range_tuple_id() const
21264 {
21265   return isl::multi_union_pw_aff(*this).reset_range_tuple_id();
21266 }
21267 
reset_tuple_id(isl::dim type)21268 isl::multi_union_pw_aff union_pw_aff::reset_tuple_id(isl::dim type) const
21269 {
21270   return isl::multi_union_pw_aff(*this).reset_tuple_id(type);
21271 }
21272 
scale(const isl::multi_val & mv)21273 isl::multi_union_pw_aff union_pw_aff::scale(const isl::multi_val &mv) const
21274 {
21275   return isl::multi_union_pw_aff(*this).scale(mv);
21276 }
21277 
scale(const isl::val & v)21278 isl::multi_union_pw_aff union_pw_aff::scale(const isl::val &v) const
21279 {
21280   return isl::multi_union_pw_aff(*this).scale(v);
21281 }
21282 
scale(long v)21283 isl::multi_union_pw_aff union_pw_aff::scale(long v) const
21284 {
21285   return this->scale(isl::val(ctx(), v));
21286 }
21287 
scale_down(const isl::multi_val & mv)21288 isl::multi_union_pw_aff union_pw_aff::scale_down(const isl::multi_val &mv) const
21289 {
21290   return isl::multi_union_pw_aff(*this).scale_down(mv);
21291 }
21292 
scale_down(const isl::val & v)21293 isl::multi_union_pw_aff union_pw_aff::scale_down(const isl::val &v) const
21294 {
21295   return isl::multi_union_pw_aff(*this).scale_down(v);
21296 }
21297 
scale_down(long v)21298 isl::multi_union_pw_aff union_pw_aff::scale_down(long v) const
21299 {
21300   return this->scale_down(isl::val(ctx(), v));
21301 }
21302 
set_at(int pos,const isl::union_pw_aff & el)21303 isl::multi_union_pw_aff union_pw_aff::set_at(int pos, const isl::union_pw_aff &el) const
21304 {
21305   return isl::multi_union_pw_aff(*this).set_at(pos, el);
21306 }
21307 
set_range_tuple(const isl::id & id)21308 isl::multi_union_pw_aff union_pw_aff::set_range_tuple(const isl::id &id) const
21309 {
21310   return isl::multi_union_pw_aff(*this).set_range_tuple(id);
21311 }
21312 
set_range_tuple(const std::string & id)21313 isl::multi_union_pw_aff union_pw_aff::set_range_tuple(const std::string &id) const
21314 {
21315   return this->set_range_tuple(isl::id(ctx(), id));
21316 }
21317 
set_union_pw_aff(int pos,const isl::union_pw_aff & el)21318 isl::multi_union_pw_aff union_pw_aff::set_union_pw_aff(int pos, const isl::union_pw_aff &el) const
21319 {
21320   return isl::multi_union_pw_aff(*this).set_union_pw_aff(pos, el);
21321 }
21322 
size()21323 class size union_pw_aff::size() const
21324 {
21325   return isl::multi_union_pw_aff(*this).size();
21326 }
21327 
space()21328 isl::space union_pw_aff::space() const
21329 {
21330   auto res = isl_union_pw_aff_get_space(get());
21331   return manage(res);
21332 }
21333 
get_space()21334 isl::space union_pw_aff::get_space() const
21335 {
21336   return space();
21337 }
21338 
sub(const isl::multi_union_pw_aff & multi2)21339 isl::multi_union_pw_aff union_pw_aff::sub(const isl::multi_union_pw_aff &multi2) const
21340 {
21341   return isl::multi_union_pw_aff(*this).sub(multi2);
21342 }
21343 
sub(isl::union_pw_aff upa2)21344 isl::union_pw_aff union_pw_aff::sub(isl::union_pw_aff upa2) const
21345 {
21346   auto res = isl_union_pw_aff_sub(copy(), upa2.release());
21347   return manage(res);
21348 }
21349 
sub(const isl::union_pw_multi_aff & upma2)21350 isl::union_pw_multi_aff union_pw_aff::sub(const isl::union_pw_multi_aff &upma2) const
21351 {
21352   return isl::union_pw_multi_aff(*this).sub(upma2);
21353 }
21354 
sub(const isl::aff & upa2)21355 isl::union_pw_aff union_pw_aff::sub(const isl::aff &upa2) const
21356 {
21357   return this->sub(isl::union_pw_aff(upa2));
21358 }
21359 
sub(const isl::pw_aff & upa2)21360 isl::union_pw_aff union_pw_aff::sub(const isl::pw_aff &upa2) const
21361 {
21362   return this->sub(isl::union_pw_aff(upa2));
21363 }
21364 
subtract_domain(isl::space space)21365 isl::union_pw_aff union_pw_aff::subtract_domain(isl::space space) const
21366 {
21367   auto res = isl_union_pw_aff_subtract_domain_space(copy(), space.release());
21368   return manage(res);
21369 }
21370 
subtract_domain(isl::union_set uset)21371 isl::union_pw_aff union_pw_aff::subtract_domain(isl::union_set uset) const
21372 {
21373   auto res = isl_union_pw_aff_subtract_domain_union_set(copy(), uset.release());
21374   return manage(res);
21375 }
21376 
to_list()21377 isl::union_pw_aff_list union_pw_aff::to_list() const
21378 {
21379   auto res = isl_union_pw_aff_to_list(copy());
21380   return manage(res);
21381 }
21382 
union_add(const isl::multi_union_pw_aff & mupa2)21383 isl::multi_union_pw_aff union_pw_aff::union_add(const isl::multi_union_pw_aff &mupa2) const
21384 {
21385   return isl::multi_union_pw_aff(*this).union_add(mupa2);
21386 }
21387 
union_add(isl::union_pw_aff upa2)21388 isl::union_pw_aff union_pw_aff::union_add(isl::union_pw_aff upa2) const
21389 {
21390   auto res = isl_union_pw_aff_union_add(copy(), upa2.release());
21391   return manage(res);
21392 }
21393 
union_add(const isl::union_pw_multi_aff & upma2)21394 isl::union_pw_multi_aff union_pw_aff::union_add(const isl::union_pw_multi_aff &upma2) const
21395 {
21396   return isl::union_pw_multi_aff(*this).union_add(upma2);
21397 }
21398 
union_add(const isl::aff & upa2)21399 isl::union_pw_aff union_pw_aff::union_add(const isl::aff &upa2) const
21400 {
21401   return this->union_add(isl::union_pw_aff(upa2));
21402 }
21403 
union_add(const isl::pw_aff & upa2)21404 isl::union_pw_aff union_pw_aff::union_add(const isl::pw_aff &upa2) const
21405 {
21406   return this->union_add(isl::union_pw_aff(upa2));
21407 }
21408 
21409 inline std::ostream &operator<<(std::ostream &os, const union_pw_aff &obj)
21410 {
21411   char *str = isl_union_pw_aff_to_str(obj.get());
21412   if (!str) {
21413     os.setstate(std::ios_base::badbit);
21414     return os;
21415   }
21416   os << str;
21417   free(str);
21418   return os;
21419 }
21420 
21421 // implementations for isl::union_pw_aff_list
manage(__isl_take isl_union_pw_aff_list * ptr)21422 union_pw_aff_list manage(__isl_take isl_union_pw_aff_list *ptr) {
21423   return union_pw_aff_list(ptr);
21424 }
manage_copy(__isl_keep isl_union_pw_aff_list * ptr)21425 union_pw_aff_list manage_copy(__isl_keep isl_union_pw_aff_list *ptr) {
21426   ptr = isl_union_pw_aff_list_copy(ptr);
21427   return union_pw_aff_list(ptr);
21428 }
21429 
union_pw_aff_list()21430 union_pw_aff_list::union_pw_aff_list()
21431     : ptr(nullptr) {}
21432 
union_pw_aff_list(const union_pw_aff_list & obj)21433 union_pw_aff_list::union_pw_aff_list(const union_pw_aff_list &obj)
21434     : ptr(nullptr)
21435 {
21436   ptr = obj.copy();
21437 }
21438 
union_pw_aff_list(__isl_take isl_union_pw_aff_list * ptr)21439 union_pw_aff_list::union_pw_aff_list(__isl_take isl_union_pw_aff_list *ptr)
21440     : ptr(ptr) {}
21441 
union_pw_aff_list(isl::ctx ctx,int n)21442 union_pw_aff_list::union_pw_aff_list(isl::ctx ctx, int n)
21443 {
21444   auto res = isl_union_pw_aff_list_alloc(ctx.release(), n);
21445   ptr = res;
21446 }
21447 
union_pw_aff_list(isl::union_pw_aff el)21448 union_pw_aff_list::union_pw_aff_list(isl::union_pw_aff el)
21449 {
21450   auto res = isl_union_pw_aff_list_from_union_pw_aff(el.release());
21451   ptr = res;
21452 }
21453 
union_pw_aff_list(isl::ctx ctx,const std::string & str)21454 union_pw_aff_list::union_pw_aff_list(isl::ctx ctx, const std::string &str)
21455 {
21456   auto res = isl_union_pw_aff_list_read_from_str(ctx.release(), str.c_str());
21457   ptr = res;
21458 }
21459 
21460 union_pw_aff_list &union_pw_aff_list::operator=(union_pw_aff_list obj) {
21461   std::swap(this->ptr, obj.ptr);
21462   return *this;
21463 }
21464 
~union_pw_aff_list()21465 union_pw_aff_list::~union_pw_aff_list() {
21466   if (ptr)
21467     isl_union_pw_aff_list_free(ptr);
21468 }
21469 
copy()21470 __isl_give isl_union_pw_aff_list *union_pw_aff_list::copy() const & {
21471   return isl_union_pw_aff_list_copy(ptr);
21472 }
21473 
get()21474 __isl_keep isl_union_pw_aff_list *union_pw_aff_list::get() const {
21475   return ptr;
21476 }
21477 
release()21478 __isl_give isl_union_pw_aff_list *union_pw_aff_list::release() {
21479   isl_union_pw_aff_list *tmp = ptr;
21480   ptr = nullptr;
21481   return tmp;
21482 }
21483 
is_null()21484 bool union_pw_aff_list::is_null() const {
21485   return ptr == nullptr;
21486 }
21487 
ctx()21488 isl::ctx union_pw_aff_list::ctx() const {
21489   return isl::ctx(isl_union_pw_aff_list_get_ctx(ptr));
21490 }
21491 
add(isl::union_pw_aff el)21492 isl::union_pw_aff_list union_pw_aff_list::add(isl::union_pw_aff el) const
21493 {
21494   auto res = isl_union_pw_aff_list_add(copy(), el.release());
21495   return manage(res);
21496 }
21497 
at(int index)21498 isl::union_pw_aff union_pw_aff_list::at(int index) const
21499 {
21500   auto res = isl_union_pw_aff_list_get_at(get(), index);
21501   return manage(res);
21502 }
21503 
get_at(int index)21504 isl::union_pw_aff union_pw_aff_list::get_at(int index) const
21505 {
21506   return at(index);
21507 }
21508 
clear()21509 isl::union_pw_aff_list union_pw_aff_list::clear() const
21510 {
21511   auto res = isl_union_pw_aff_list_clear(copy());
21512   return manage(res);
21513 }
21514 
concat(isl::union_pw_aff_list list2)21515 isl::union_pw_aff_list union_pw_aff_list::concat(isl::union_pw_aff_list list2) const
21516 {
21517   auto res = isl_union_pw_aff_list_concat(copy(), list2.release());
21518   return manage(res);
21519 }
21520 
drop(unsigned int first,unsigned int n)21521 isl::union_pw_aff_list union_pw_aff_list::drop(unsigned int first, unsigned int n) const
21522 {
21523   auto res = isl_union_pw_aff_list_drop(copy(), first, n);
21524   return manage(res);
21525 }
21526 
foreach(const std::function<stat (isl::union_pw_aff)> & fn)21527 stat union_pw_aff_list::foreach(const std::function<stat(isl::union_pw_aff)> &fn) const
21528 {
21529   struct fn_data {
21530     std::function<stat(isl::union_pw_aff)> func;
21531   } fn_data = { fn };
21532   auto fn_lambda = [](isl_union_pw_aff *arg_0, void *arg_1) -> isl_stat {
21533     auto *data = static_cast<struct fn_data *>(arg_1);
21534     auto ret = (data->func)(manage(arg_0));
21535     return ret.release();
21536   };
21537   auto res = isl_union_pw_aff_list_foreach(get(), fn_lambda, &fn_data);
21538   return manage(res);
21539 }
21540 
insert(unsigned int pos,isl::union_pw_aff el)21541 isl::union_pw_aff_list union_pw_aff_list::insert(unsigned int pos, isl::union_pw_aff el) const
21542 {
21543   auto res = isl_union_pw_aff_list_insert(copy(), pos, el.release());
21544   return manage(res);
21545 }
21546 
size()21547 class size union_pw_aff_list::size() const
21548 {
21549   auto res = isl_union_pw_aff_list_size(get());
21550   return manage(res);
21551 }
21552 
21553 inline std::ostream &operator<<(std::ostream &os, const union_pw_aff_list &obj)
21554 {
21555   char *str = isl_union_pw_aff_list_to_str(obj.get());
21556   if (!str) {
21557     os.setstate(std::ios_base::badbit);
21558     return os;
21559   }
21560   os << str;
21561   free(str);
21562   return os;
21563 }
21564 
21565 // implementations for isl::union_pw_multi_aff
manage(__isl_take isl_union_pw_multi_aff * ptr)21566 union_pw_multi_aff manage(__isl_take isl_union_pw_multi_aff *ptr) {
21567   return union_pw_multi_aff(ptr);
21568 }
manage_copy(__isl_keep isl_union_pw_multi_aff * ptr)21569 union_pw_multi_aff manage_copy(__isl_keep isl_union_pw_multi_aff *ptr) {
21570   ptr = isl_union_pw_multi_aff_copy(ptr);
21571   return union_pw_multi_aff(ptr);
21572 }
21573 
union_pw_multi_aff()21574 union_pw_multi_aff::union_pw_multi_aff()
21575     : ptr(nullptr) {}
21576 
union_pw_multi_aff(const union_pw_multi_aff & obj)21577 union_pw_multi_aff::union_pw_multi_aff(const union_pw_multi_aff &obj)
21578     : ptr(nullptr)
21579 {
21580   ptr = obj.copy();
21581 }
21582 
union_pw_multi_aff(__isl_take isl_union_pw_multi_aff * ptr)21583 union_pw_multi_aff::union_pw_multi_aff(__isl_take isl_union_pw_multi_aff *ptr)
21584     : ptr(ptr) {}
21585 
union_pw_multi_aff(isl::union_set uset)21586 union_pw_multi_aff::union_pw_multi_aff(isl::union_set uset)
21587 {
21588   auto res = isl_union_pw_multi_aff_from_domain(uset.release());
21589   ptr = res;
21590 }
21591 
union_pw_multi_aff(isl::multi_aff ma)21592 union_pw_multi_aff::union_pw_multi_aff(isl::multi_aff ma)
21593 {
21594   auto res = isl_union_pw_multi_aff_from_multi_aff(ma.release());
21595   ptr = res;
21596 }
21597 
union_pw_multi_aff(isl::pw_multi_aff pma)21598 union_pw_multi_aff::union_pw_multi_aff(isl::pw_multi_aff pma)
21599 {
21600   auto res = isl_union_pw_multi_aff_from_pw_multi_aff(pma.release());
21601   ptr = res;
21602 }
21603 
union_pw_multi_aff(isl::union_map umap)21604 union_pw_multi_aff::union_pw_multi_aff(isl::union_map umap)
21605 {
21606   auto res = isl_union_pw_multi_aff_from_union_map(umap.release());
21607   ptr = res;
21608 }
21609 
union_pw_multi_aff(isl::union_pw_aff upa)21610 union_pw_multi_aff::union_pw_multi_aff(isl::union_pw_aff upa)
21611 {
21612   auto res = isl_union_pw_multi_aff_from_union_pw_aff(upa.release());
21613   ptr = res;
21614 }
21615 
union_pw_multi_aff(isl::ctx ctx,const std::string & str)21616 union_pw_multi_aff::union_pw_multi_aff(isl::ctx ctx, const std::string &str)
21617 {
21618   auto res = isl_union_pw_multi_aff_read_from_str(ctx.release(), str.c_str());
21619   ptr = res;
21620 }
21621 
21622 union_pw_multi_aff &union_pw_multi_aff::operator=(union_pw_multi_aff obj) {
21623   std::swap(this->ptr, obj.ptr);
21624   return *this;
21625 }
21626 
~union_pw_multi_aff()21627 union_pw_multi_aff::~union_pw_multi_aff() {
21628   if (ptr)
21629     isl_union_pw_multi_aff_free(ptr);
21630 }
21631 
copy()21632 __isl_give isl_union_pw_multi_aff *union_pw_multi_aff::copy() const & {
21633   return isl_union_pw_multi_aff_copy(ptr);
21634 }
21635 
get()21636 __isl_keep isl_union_pw_multi_aff *union_pw_multi_aff::get() const {
21637   return ptr;
21638 }
21639 
release()21640 __isl_give isl_union_pw_multi_aff *union_pw_multi_aff::release() {
21641   isl_union_pw_multi_aff *tmp = ptr;
21642   ptr = nullptr;
21643   return tmp;
21644 }
21645 
is_null()21646 bool union_pw_multi_aff::is_null() const {
21647   return ptr == nullptr;
21648 }
21649 
ctx()21650 isl::ctx union_pw_multi_aff::ctx() const {
21651   return isl::ctx(isl_union_pw_multi_aff_get_ctx(ptr));
21652 }
21653 
add(isl::union_pw_multi_aff upma2)21654 isl::union_pw_multi_aff union_pw_multi_aff::add(isl::union_pw_multi_aff upma2) const
21655 {
21656   auto res = isl_union_pw_multi_aff_add(copy(), upma2.release());
21657   return manage(res);
21658 }
21659 
add_pw_multi_aff(isl::pw_multi_aff pma)21660 isl::union_pw_multi_aff union_pw_multi_aff::add_pw_multi_aff(isl::pw_multi_aff pma) const
21661 {
21662   auto res = isl_union_pw_multi_aff_add_pw_multi_aff(copy(), pma.release());
21663   return manage(res);
21664 }
21665 
apply(isl::union_pw_multi_aff upma2)21666 isl::union_pw_multi_aff union_pw_multi_aff::apply(isl::union_pw_multi_aff upma2) const
21667 {
21668   auto res = isl_union_pw_multi_aff_apply_union_pw_multi_aff(copy(), upma2.release());
21669   return manage(res);
21670 }
21671 
as_multi_union_pw_aff()21672 isl::multi_union_pw_aff union_pw_multi_aff::as_multi_union_pw_aff() const
21673 {
21674   auto res = isl_union_pw_multi_aff_as_multi_union_pw_aff(copy());
21675   return manage(res);
21676 }
21677 
as_pw_multi_aff()21678 isl::pw_multi_aff union_pw_multi_aff::as_pw_multi_aff() const
21679 {
21680   auto res = isl_union_pw_multi_aff_as_pw_multi_aff(copy());
21681   return manage(res);
21682 }
21683 
as_union_map()21684 isl::union_map union_pw_multi_aff::as_union_map() const
21685 {
21686   auto res = isl_union_pw_multi_aff_as_union_map(copy());
21687   return manage(res);
21688 }
21689 
coalesce()21690 isl::union_pw_multi_aff union_pw_multi_aff::coalesce() const
21691 {
21692   auto res = isl_union_pw_multi_aff_coalesce(copy());
21693   return manage(res);
21694 }
21695 
domain()21696 isl::union_set union_pw_multi_aff::domain() const
21697 {
21698   auto res = isl_union_pw_multi_aff_domain(copy());
21699   return manage(res);
21700 }
21701 
empty(isl::space space)21702 isl::union_pw_multi_aff union_pw_multi_aff::empty(isl::space space)
21703 {
21704   auto res = isl_union_pw_multi_aff_empty(space.release());
21705   return manage(res);
21706 }
21707 
empty(isl::ctx ctx)21708 isl::union_pw_multi_aff union_pw_multi_aff::empty(isl::ctx ctx)
21709 {
21710   auto res = isl_union_pw_multi_aff_empty_ctx(ctx.release());
21711   return manage(res);
21712 }
21713 
extract_pw_multi_aff(isl::space space)21714 isl::pw_multi_aff union_pw_multi_aff::extract_pw_multi_aff(isl::space space) const
21715 {
21716   auto res = isl_union_pw_multi_aff_extract_pw_multi_aff(get(), space.release());
21717   return manage(res);
21718 }
21719 
flat_range_product(isl::union_pw_multi_aff upma2)21720 isl::union_pw_multi_aff union_pw_multi_aff::flat_range_product(isl::union_pw_multi_aff upma2) const
21721 {
21722   auto res = isl_union_pw_multi_aff_flat_range_product(copy(), upma2.release());
21723   return manage(res);
21724 }
21725 
gist(isl::union_set context)21726 isl::union_pw_multi_aff union_pw_multi_aff::gist(isl::union_set context) const
21727 {
21728   auto res = isl_union_pw_multi_aff_gist(copy(), context.release());
21729   return manage(res);
21730 }
21731 
intersect_domain(isl::space space)21732 isl::union_pw_multi_aff union_pw_multi_aff::intersect_domain(isl::space space) const
21733 {
21734   auto res = isl_union_pw_multi_aff_intersect_domain_space(copy(), space.release());
21735   return manage(res);
21736 }
21737 
intersect_domain(isl::union_set uset)21738 isl::union_pw_multi_aff union_pw_multi_aff::intersect_domain(isl::union_set uset) const
21739 {
21740   auto res = isl_union_pw_multi_aff_intersect_domain_union_set(copy(), uset.release());
21741   return manage(res);
21742 }
21743 
intersect_domain_wrapped_domain(isl::union_set uset)21744 isl::union_pw_multi_aff union_pw_multi_aff::intersect_domain_wrapped_domain(isl::union_set uset) const
21745 {
21746   auto res = isl_union_pw_multi_aff_intersect_domain_wrapped_domain(copy(), uset.release());
21747   return manage(res);
21748 }
21749 
intersect_domain_wrapped_range(isl::union_set uset)21750 isl::union_pw_multi_aff union_pw_multi_aff::intersect_domain_wrapped_range(isl::union_set uset) const
21751 {
21752   auto res = isl_union_pw_multi_aff_intersect_domain_wrapped_range(copy(), uset.release());
21753   return manage(res);
21754 }
21755 
intersect_params(isl::set set)21756 isl::union_pw_multi_aff union_pw_multi_aff::intersect_params(isl::set set) const
21757 {
21758   auto res = isl_union_pw_multi_aff_intersect_params(copy(), set.release());
21759   return manage(res);
21760 }
21761 
involves_locals()21762 boolean union_pw_multi_aff::involves_locals() const
21763 {
21764   auto res = isl_union_pw_multi_aff_involves_locals(get());
21765   return manage(res);
21766 }
21767 
isa_pw_multi_aff()21768 boolean union_pw_multi_aff::isa_pw_multi_aff() const
21769 {
21770   auto res = isl_union_pw_multi_aff_isa_pw_multi_aff(get());
21771   return manage(res);
21772 }
21773 
plain_is_empty()21774 boolean union_pw_multi_aff::plain_is_empty() const
21775 {
21776   auto res = isl_union_pw_multi_aff_plain_is_empty(get());
21777   return manage(res);
21778 }
21779 
preimage_domain_wrapped_domain(isl::union_pw_multi_aff upma2)21780 isl::union_pw_multi_aff union_pw_multi_aff::preimage_domain_wrapped_domain(isl::union_pw_multi_aff upma2) const
21781 {
21782   auto res = isl_union_pw_multi_aff_preimage_domain_wrapped_domain_union_pw_multi_aff(copy(), upma2.release());
21783   return manage(res);
21784 }
21785 
pullback(isl::union_pw_multi_aff upma2)21786 isl::union_pw_multi_aff union_pw_multi_aff::pullback(isl::union_pw_multi_aff upma2) const
21787 {
21788   auto res = isl_union_pw_multi_aff_pullback_union_pw_multi_aff(copy(), upma2.release());
21789   return manage(res);
21790 }
21791 
pw_multi_aff_list()21792 isl::pw_multi_aff_list union_pw_multi_aff::pw_multi_aff_list() const
21793 {
21794   auto res = isl_union_pw_multi_aff_get_pw_multi_aff_list(get());
21795   return manage(res);
21796 }
21797 
get_pw_multi_aff_list()21798 isl::pw_multi_aff_list union_pw_multi_aff::get_pw_multi_aff_list() const
21799 {
21800   return pw_multi_aff_list();
21801 }
21802 
range_factor_domain()21803 isl::union_pw_multi_aff union_pw_multi_aff::range_factor_domain() const
21804 {
21805   auto res = isl_union_pw_multi_aff_range_factor_domain(copy());
21806   return manage(res);
21807 }
21808 
range_factor_range()21809 isl::union_pw_multi_aff union_pw_multi_aff::range_factor_range() const
21810 {
21811   auto res = isl_union_pw_multi_aff_range_factor_range(copy());
21812   return manage(res);
21813 }
21814 
range_product(isl::union_pw_multi_aff upma2)21815 isl::union_pw_multi_aff union_pw_multi_aff::range_product(isl::union_pw_multi_aff upma2) const
21816 {
21817   auto res = isl_union_pw_multi_aff_range_product(copy(), upma2.release());
21818   return manage(res);
21819 }
21820 
space()21821 isl::space union_pw_multi_aff::space() const
21822 {
21823   auto res = isl_union_pw_multi_aff_get_space(get());
21824   return manage(res);
21825 }
21826 
get_space()21827 isl::space union_pw_multi_aff::get_space() const
21828 {
21829   return space();
21830 }
21831 
sub(isl::union_pw_multi_aff upma2)21832 isl::union_pw_multi_aff union_pw_multi_aff::sub(isl::union_pw_multi_aff upma2) const
21833 {
21834   auto res = isl_union_pw_multi_aff_sub(copy(), upma2.release());
21835   return manage(res);
21836 }
21837 
subtract_domain(isl::space space)21838 isl::union_pw_multi_aff union_pw_multi_aff::subtract_domain(isl::space space) const
21839 {
21840   auto res = isl_union_pw_multi_aff_subtract_domain_space(copy(), space.release());
21841   return manage(res);
21842 }
21843 
subtract_domain(isl::union_set uset)21844 isl::union_pw_multi_aff union_pw_multi_aff::subtract_domain(isl::union_set uset) const
21845 {
21846   auto res = isl_union_pw_multi_aff_subtract_domain_union_set(copy(), uset.release());
21847   return manage(res);
21848 }
21849 
union_add(isl::union_pw_multi_aff upma2)21850 isl::union_pw_multi_aff union_pw_multi_aff::union_add(isl::union_pw_multi_aff upma2) const
21851 {
21852   auto res = isl_union_pw_multi_aff_union_add(copy(), upma2.release());
21853   return manage(res);
21854 }
21855 
21856 inline std::ostream &operator<<(std::ostream &os, const union_pw_multi_aff &obj)
21857 {
21858   char *str = isl_union_pw_multi_aff_to_str(obj.get());
21859   if (!str) {
21860     os.setstate(std::ios_base::badbit);
21861     return os;
21862   }
21863   os << str;
21864   free(str);
21865   return os;
21866 }
21867 
21868 // implementations for isl::union_set
manage(__isl_take isl_union_set * ptr)21869 union_set manage(__isl_take isl_union_set *ptr) {
21870   return union_set(ptr);
21871 }
manage_copy(__isl_keep isl_union_set * ptr)21872 union_set manage_copy(__isl_keep isl_union_set *ptr) {
21873   ptr = isl_union_set_copy(ptr);
21874   return union_set(ptr);
21875 }
21876 
union_set()21877 union_set::union_set()
21878     : ptr(nullptr) {}
21879 
union_set(const union_set & obj)21880 union_set::union_set(const union_set &obj)
21881     : ptr(nullptr)
21882 {
21883   ptr = obj.copy();
21884 }
21885 
union_set(__isl_take isl_union_set * ptr)21886 union_set::union_set(__isl_take isl_union_set *ptr)
21887     : ptr(ptr) {}
21888 
union_set(isl::basic_set bset)21889 union_set::union_set(isl::basic_set bset)
21890 {
21891   auto res = isl_union_set_from_basic_set(bset.release());
21892   ptr = res;
21893 }
21894 
union_set(isl::point pnt)21895 union_set::union_set(isl::point pnt)
21896 {
21897   auto res = isl_union_set_from_point(pnt.release());
21898   ptr = res;
21899 }
21900 
union_set(isl::set set)21901 union_set::union_set(isl::set set)
21902 {
21903   auto res = isl_union_set_from_set(set.release());
21904   ptr = res;
21905 }
21906 
union_set(isl::ctx ctx,const std::string & str)21907 union_set::union_set(isl::ctx ctx, const std::string &str)
21908 {
21909   auto res = isl_union_set_read_from_str(ctx.release(), str.c_str());
21910   ptr = res;
21911 }
21912 
21913 union_set &union_set::operator=(union_set obj) {
21914   std::swap(this->ptr, obj.ptr);
21915   return *this;
21916 }
21917 
~union_set()21918 union_set::~union_set() {
21919   if (ptr)
21920     isl_union_set_free(ptr);
21921 }
21922 
copy()21923 __isl_give isl_union_set *union_set::copy() const & {
21924   return isl_union_set_copy(ptr);
21925 }
21926 
get()21927 __isl_keep isl_union_set *union_set::get() const {
21928   return ptr;
21929 }
21930 
release()21931 __isl_give isl_union_set *union_set::release() {
21932   isl_union_set *tmp = ptr;
21933   ptr = nullptr;
21934   return tmp;
21935 }
21936 
is_null()21937 bool union_set::is_null() const {
21938   return ptr == nullptr;
21939 }
21940 
ctx()21941 isl::ctx union_set::ctx() const {
21942   return isl::ctx(isl_union_set_get_ctx(ptr));
21943 }
21944 
affine_hull()21945 isl::union_set union_set::affine_hull() const
21946 {
21947   auto res = isl_union_set_affine_hull(copy());
21948   return manage(res);
21949 }
21950 
apply(isl::union_map umap)21951 isl::union_set union_set::apply(isl::union_map umap) const
21952 {
21953   auto res = isl_union_set_apply(copy(), umap.release());
21954   return manage(res);
21955 }
21956 
as_set()21957 isl::set union_set::as_set() const
21958 {
21959   auto res = isl_union_set_as_set(copy());
21960   return manage(res);
21961 }
21962 
coalesce()21963 isl::union_set union_set::coalesce() const
21964 {
21965   auto res = isl_union_set_coalesce(copy());
21966   return manage(res);
21967 }
21968 
compute_divs()21969 isl::union_set union_set::compute_divs() const
21970 {
21971   auto res = isl_union_set_compute_divs(copy());
21972   return manage(res);
21973 }
21974 
contains(const isl::space & space)21975 boolean union_set::contains(const isl::space &space) const
21976 {
21977   auto res = isl_union_set_contains(get(), space.get());
21978   return manage(res);
21979 }
21980 
detect_equalities()21981 isl::union_set union_set::detect_equalities() const
21982 {
21983   auto res = isl_union_set_detect_equalities(copy());
21984   return manage(res);
21985 }
21986 
empty(isl::ctx ctx)21987 isl::union_set union_set::empty(isl::ctx ctx)
21988 {
21989   auto res = isl_union_set_empty_ctx(ctx.release());
21990   return manage(res);
21991 }
21992 
every_set(const std::function<boolean (isl::set)> & test)21993 boolean union_set::every_set(const std::function<boolean(isl::set)> &test) const
21994 {
21995   struct test_data {
21996     std::function<boolean(isl::set)> func;
21997   } test_data = { test };
21998   auto test_lambda = [](isl_set *arg_0, void *arg_1) -> isl_bool {
21999     auto *data = static_cast<struct test_data *>(arg_1);
22000     auto ret = (data->func)(manage_copy(arg_0));
22001     return ret.release();
22002   };
22003   auto res = isl_union_set_every_set(get(), test_lambda, &test_data);
22004   return manage(res);
22005 }
22006 
extract_set(isl::space space)22007 isl::set union_set::extract_set(isl::space space) const
22008 {
22009   auto res = isl_union_set_extract_set(get(), space.release());
22010   return manage(res);
22011 }
22012 
foreach_point(const std::function<stat (isl::point)> & fn)22013 stat union_set::foreach_point(const std::function<stat(isl::point)> &fn) const
22014 {
22015   struct fn_data {
22016     std::function<stat(isl::point)> func;
22017   } fn_data = { fn };
22018   auto fn_lambda = [](isl_point *arg_0, void *arg_1) -> isl_stat {
22019     auto *data = static_cast<struct fn_data *>(arg_1);
22020     auto ret = (data->func)(manage(arg_0));
22021     return ret.release();
22022   };
22023   auto res = isl_union_set_foreach_point(get(), fn_lambda, &fn_data);
22024   return manage(res);
22025 }
22026 
foreach_set(const std::function<stat (isl::set)> & fn)22027 stat union_set::foreach_set(const std::function<stat(isl::set)> &fn) const
22028 {
22029   struct fn_data {
22030     std::function<stat(isl::set)> func;
22031   } fn_data = { fn };
22032   auto fn_lambda = [](isl_set *arg_0, void *arg_1) -> isl_stat {
22033     auto *data = static_cast<struct fn_data *>(arg_1);
22034     auto ret = (data->func)(manage(arg_0));
22035     return ret.release();
22036   };
22037   auto res = isl_union_set_foreach_set(get(), fn_lambda, &fn_data);
22038   return manage(res);
22039 }
22040 
gist(isl::union_set context)22041 isl::union_set union_set::gist(isl::union_set context) const
22042 {
22043   auto res = isl_union_set_gist(copy(), context.release());
22044   return manage(res);
22045 }
22046 
gist_params(isl::set set)22047 isl::union_set union_set::gist_params(isl::set set) const
22048 {
22049   auto res = isl_union_set_gist_params(copy(), set.release());
22050   return manage(res);
22051 }
22052 
identity()22053 isl::union_map union_set::identity() const
22054 {
22055   auto res = isl_union_set_identity(copy());
22056   return manage(res);
22057 }
22058 
identity_union_pw_multi_aff()22059 isl::union_pw_multi_aff union_set::identity_union_pw_multi_aff() const
22060 {
22061   auto res = isl_union_set_identity_union_pw_multi_aff(copy());
22062   return manage(res);
22063 }
22064 
intersect(isl::union_set uset2)22065 isl::union_set union_set::intersect(isl::union_set uset2) const
22066 {
22067   auto res = isl_union_set_intersect(copy(), uset2.release());
22068   return manage(res);
22069 }
22070 
intersect_params(isl::set set)22071 isl::union_set union_set::intersect_params(isl::set set) const
22072 {
22073   auto res = isl_union_set_intersect_params(copy(), set.release());
22074   return manage(res);
22075 }
22076 
is_disjoint(const isl::union_set & uset2)22077 boolean union_set::is_disjoint(const isl::union_set &uset2) const
22078 {
22079   auto res = isl_union_set_is_disjoint(get(), uset2.get());
22080   return manage(res);
22081 }
22082 
is_empty()22083 boolean union_set::is_empty() const
22084 {
22085   auto res = isl_union_set_is_empty(get());
22086   return manage(res);
22087 }
22088 
is_equal(const isl::union_set & uset2)22089 boolean union_set::is_equal(const isl::union_set &uset2) const
22090 {
22091   auto res = isl_union_set_is_equal(get(), uset2.get());
22092   return manage(res);
22093 }
22094 
is_strict_subset(const isl::union_set & uset2)22095 boolean union_set::is_strict_subset(const isl::union_set &uset2) const
22096 {
22097   auto res = isl_union_set_is_strict_subset(get(), uset2.get());
22098   return manage(res);
22099 }
22100 
is_subset(const isl::union_set & uset2)22101 boolean union_set::is_subset(const isl::union_set &uset2) const
22102 {
22103   auto res = isl_union_set_is_subset(get(), uset2.get());
22104   return manage(res);
22105 }
22106 
isa_set()22107 boolean union_set::isa_set() const
22108 {
22109   auto res = isl_union_set_isa_set(get());
22110   return manage(res);
22111 }
22112 
lexmax()22113 isl::union_set union_set::lexmax() const
22114 {
22115   auto res = isl_union_set_lexmax(copy());
22116   return manage(res);
22117 }
22118 
lexmin()22119 isl::union_set union_set::lexmin() const
22120 {
22121   auto res = isl_union_set_lexmin(copy());
22122   return manage(res);
22123 }
22124 
params()22125 isl::set union_set::params() const
22126 {
22127   auto res = isl_union_set_params(copy());
22128   return manage(res);
22129 }
22130 
polyhedral_hull()22131 isl::union_set union_set::polyhedral_hull() const
22132 {
22133   auto res = isl_union_set_polyhedral_hull(copy());
22134   return manage(res);
22135 }
22136 
preimage(isl::multi_aff ma)22137 isl::union_set union_set::preimage(isl::multi_aff ma) const
22138 {
22139   auto res = isl_union_set_preimage_multi_aff(copy(), ma.release());
22140   return manage(res);
22141 }
22142 
preimage(isl::pw_multi_aff pma)22143 isl::union_set union_set::preimage(isl::pw_multi_aff pma) const
22144 {
22145   auto res = isl_union_set_preimage_pw_multi_aff(copy(), pma.release());
22146   return manage(res);
22147 }
22148 
preimage(isl::union_pw_multi_aff upma)22149 isl::union_set union_set::preimage(isl::union_pw_multi_aff upma) const
22150 {
22151   auto res = isl_union_set_preimage_union_pw_multi_aff(copy(), upma.release());
22152   return manage(res);
22153 }
22154 
sample_point()22155 isl::point union_set::sample_point() const
22156 {
22157   auto res = isl_union_set_sample_point(copy());
22158   return manage(res);
22159 }
22160 
set_list()22161 isl::set_list union_set::set_list() const
22162 {
22163   auto res = isl_union_set_get_set_list(get());
22164   return manage(res);
22165 }
22166 
get_set_list()22167 isl::set_list union_set::get_set_list() const
22168 {
22169   return set_list();
22170 }
22171 
space()22172 isl::space union_set::space() const
22173 {
22174   auto res = isl_union_set_get_space(get());
22175   return manage(res);
22176 }
22177 
get_space()22178 isl::space union_set::get_space() const
22179 {
22180   return space();
22181 }
22182 
subtract(isl::union_set uset2)22183 isl::union_set union_set::subtract(isl::union_set uset2) const
22184 {
22185   auto res = isl_union_set_subtract(copy(), uset2.release());
22186   return manage(res);
22187 }
22188 
to_list()22189 isl::union_set_list union_set::to_list() const
22190 {
22191   auto res = isl_union_set_to_list(copy());
22192   return manage(res);
22193 }
22194 
unite(isl::union_set uset2)22195 isl::union_set union_set::unite(isl::union_set uset2) const
22196 {
22197   auto res = isl_union_set_union(copy(), uset2.release());
22198   return manage(res);
22199 }
22200 
universe()22201 isl::union_set union_set::universe() const
22202 {
22203   auto res = isl_union_set_universe(copy());
22204   return manage(res);
22205 }
22206 
unwrap()22207 isl::union_map union_set::unwrap() const
22208 {
22209   auto res = isl_union_set_unwrap(copy());
22210   return manage(res);
22211 }
22212 
22213 inline std::ostream &operator<<(std::ostream &os, const union_set &obj)
22214 {
22215   char *str = isl_union_set_to_str(obj.get());
22216   if (!str) {
22217     os.setstate(std::ios_base::badbit);
22218     return os;
22219   }
22220   os << str;
22221   free(str);
22222   return os;
22223 }
22224 
22225 // implementations for isl::union_set_list
manage(__isl_take isl_union_set_list * ptr)22226 union_set_list manage(__isl_take isl_union_set_list *ptr) {
22227   return union_set_list(ptr);
22228 }
manage_copy(__isl_keep isl_union_set_list * ptr)22229 union_set_list manage_copy(__isl_keep isl_union_set_list *ptr) {
22230   ptr = isl_union_set_list_copy(ptr);
22231   return union_set_list(ptr);
22232 }
22233 
union_set_list()22234 union_set_list::union_set_list()
22235     : ptr(nullptr) {}
22236 
union_set_list(const union_set_list & obj)22237 union_set_list::union_set_list(const union_set_list &obj)
22238     : ptr(nullptr)
22239 {
22240   ptr = obj.copy();
22241 }
22242 
union_set_list(__isl_take isl_union_set_list * ptr)22243 union_set_list::union_set_list(__isl_take isl_union_set_list *ptr)
22244     : ptr(ptr) {}
22245 
union_set_list(isl::ctx ctx,int n)22246 union_set_list::union_set_list(isl::ctx ctx, int n)
22247 {
22248   auto res = isl_union_set_list_alloc(ctx.release(), n);
22249   ptr = res;
22250 }
22251 
union_set_list(isl::union_set el)22252 union_set_list::union_set_list(isl::union_set el)
22253 {
22254   auto res = isl_union_set_list_from_union_set(el.release());
22255   ptr = res;
22256 }
22257 
union_set_list(isl::ctx ctx,const std::string & str)22258 union_set_list::union_set_list(isl::ctx ctx, const std::string &str)
22259 {
22260   auto res = isl_union_set_list_read_from_str(ctx.release(), str.c_str());
22261   ptr = res;
22262 }
22263 
22264 union_set_list &union_set_list::operator=(union_set_list obj) {
22265   std::swap(this->ptr, obj.ptr);
22266   return *this;
22267 }
22268 
~union_set_list()22269 union_set_list::~union_set_list() {
22270   if (ptr)
22271     isl_union_set_list_free(ptr);
22272 }
22273 
copy()22274 __isl_give isl_union_set_list *union_set_list::copy() const & {
22275   return isl_union_set_list_copy(ptr);
22276 }
22277 
get()22278 __isl_keep isl_union_set_list *union_set_list::get() const {
22279   return ptr;
22280 }
22281 
release()22282 __isl_give isl_union_set_list *union_set_list::release() {
22283   isl_union_set_list *tmp = ptr;
22284   ptr = nullptr;
22285   return tmp;
22286 }
22287 
is_null()22288 bool union_set_list::is_null() const {
22289   return ptr == nullptr;
22290 }
22291 
ctx()22292 isl::ctx union_set_list::ctx() const {
22293   return isl::ctx(isl_union_set_list_get_ctx(ptr));
22294 }
22295 
add(isl::union_set el)22296 isl::union_set_list union_set_list::add(isl::union_set el) const
22297 {
22298   auto res = isl_union_set_list_add(copy(), el.release());
22299   return manage(res);
22300 }
22301 
at(int index)22302 isl::union_set union_set_list::at(int index) const
22303 {
22304   auto res = isl_union_set_list_get_at(get(), index);
22305   return manage(res);
22306 }
22307 
get_at(int index)22308 isl::union_set union_set_list::get_at(int index) const
22309 {
22310   return at(index);
22311 }
22312 
clear()22313 isl::union_set_list union_set_list::clear() const
22314 {
22315   auto res = isl_union_set_list_clear(copy());
22316   return manage(res);
22317 }
22318 
concat(isl::union_set_list list2)22319 isl::union_set_list union_set_list::concat(isl::union_set_list list2) const
22320 {
22321   auto res = isl_union_set_list_concat(copy(), list2.release());
22322   return manage(res);
22323 }
22324 
drop(unsigned int first,unsigned int n)22325 isl::union_set_list union_set_list::drop(unsigned int first, unsigned int n) const
22326 {
22327   auto res = isl_union_set_list_drop(copy(), first, n);
22328   return manage(res);
22329 }
22330 
foreach(const std::function<stat (isl::union_set)> & fn)22331 stat union_set_list::foreach(const std::function<stat(isl::union_set)> &fn) const
22332 {
22333   struct fn_data {
22334     std::function<stat(isl::union_set)> func;
22335   } fn_data = { fn };
22336   auto fn_lambda = [](isl_union_set *arg_0, void *arg_1) -> isl_stat {
22337     auto *data = static_cast<struct fn_data *>(arg_1);
22338     auto ret = (data->func)(manage(arg_0));
22339     return ret.release();
22340   };
22341   auto res = isl_union_set_list_foreach(get(), fn_lambda, &fn_data);
22342   return manage(res);
22343 }
22344 
insert(unsigned int pos,isl::union_set el)22345 isl::union_set_list union_set_list::insert(unsigned int pos, isl::union_set el) const
22346 {
22347   auto res = isl_union_set_list_insert(copy(), pos, el.release());
22348   return manage(res);
22349 }
22350 
size()22351 class size union_set_list::size() const
22352 {
22353   auto res = isl_union_set_list_size(get());
22354   return manage(res);
22355 }
22356 
22357 inline std::ostream &operator<<(std::ostream &os, const union_set_list &obj)
22358 {
22359   char *str = isl_union_set_list_to_str(obj.get());
22360   if (!str) {
22361     os.setstate(std::ios_base::badbit);
22362     return os;
22363   }
22364   os << str;
22365   free(str);
22366   return os;
22367 }
22368 
22369 // implementations for isl::val
manage(__isl_take isl_val * ptr)22370 val manage(__isl_take isl_val *ptr) {
22371   return val(ptr);
22372 }
manage_copy(__isl_keep isl_val * ptr)22373 val manage_copy(__isl_keep isl_val *ptr) {
22374   ptr = isl_val_copy(ptr);
22375   return val(ptr);
22376 }
22377 
val()22378 val::val()
22379     : ptr(nullptr) {}
22380 
val(const val & obj)22381 val::val(const val &obj)
22382     : ptr(nullptr)
22383 {
22384   ptr = obj.copy();
22385 }
22386 
val(__isl_take isl_val * ptr)22387 val::val(__isl_take isl_val *ptr)
22388     : ptr(ptr) {}
22389 
val(isl::ctx ctx,long i)22390 val::val(isl::ctx ctx, long i)
22391 {
22392   auto res = isl_val_int_from_si(ctx.release(), i);
22393   ptr = res;
22394 }
22395 
val(isl::ctx ctx,const std::string & str)22396 val::val(isl::ctx ctx, const std::string &str)
22397 {
22398   auto res = isl_val_read_from_str(ctx.release(), str.c_str());
22399   ptr = res;
22400 }
22401 
22402 val &val::operator=(val obj) {
22403   std::swap(this->ptr, obj.ptr);
22404   return *this;
22405 }
22406 
~val()22407 val::~val() {
22408   if (ptr)
22409     isl_val_free(ptr);
22410 }
22411 
copy()22412 __isl_give isl_val *val::copy() const & {
22413   return isl_val_copy(ptr);
22414 }
22415 
get()22416 __isl_keep isl_val *val::get() const {
22417   return ptr;
22418 }
22419 
release()22420 __isl_give isl_val *val::release() {
22421   isl_val *tmp = ptr;
22422   ptr = nullptr;
22423   return tmp;
22424 }
22425 
is_null()22426 bool val::is_null() const {
22427   return ptr == nullptr;
22428 }
22429 
ctx()22430 isl::ctx val::ctx() const {
22431   return isl::ctx(isl_val_get_ctx(ptr));
22432 }
22433 
abs()22434 isl::val val::abs() const
22435 {
22436   auto res = isl_val_abs(copy());
22437   return manage(res);
22438 }
22439 
abs_eq(const isl::val & v2)22440 boolean val::abs_eq(const isl::val &v2) const
22441 {
22442   auto res = isl_val_abs_eq(get(), v2.get());
22443   return manage(res);
22444 }
22445 
abs_eq(long v2)22446 boolean val::abs_eq(long v2) const
22447 {
22448   return this->abs_eq(isl::val(ctx(), v2));
22449 }
22450 
add(isl::val v2)22451 isl::val val::add(isl::val v2) const
22452 {
22453   auto res = isl_val_add(copy(), v2.release());
22454   return manage(res);
22455 }
22456 
add(long v2)22457 isl::val val::add(long v2) const
22458 {
22459   return this->add(isl::val(ctx(), v2));
22460 }
22461 
ceil()22462 isl::val val::ceil() const
22463 {
22464   auto res = isl_val_ceil(copy());
22465   return manage(res);
22466 }
22467 
cmp_si(long i)22468 int val::cmp_si(long i) const
22469 {
22470   auto res = isl_val_cmp_si(get(), i);
22471   return res;
22472 }
22473 
den_si()22474 long val::den_si() const
22475 {
22476   auto res = isl_val_get_den_si(get());
22477   return res;
22478 }
22479 
get_den_si()22480 long val::get_den_si() const
22481 {
22482   return den_si();
22483 }
22484 
div(isl::val v2)22485 isl::val val::div(isl::val v2) const
22486 {
22487   auto res = isl_val_div(copy(), v2.release());
22488   return manage(res);
22489 }
22490 
div(long v2)22491 isl::val val::div(long v2) const
22492 {
22493   return this->div(isl::val(ctx(), v2));
22494 }
22495 
eq(const isl::val & v2)22496 boolean val::eq(const isl::val &v2) const
22497 {
22498   auto res = isl_val_eq(get(), v2.get());
22499   return manage(res);
22500 }
22501 
eq(long v2)22502 boolean val::eq(long v2) const
22503 {
22504   return this->eq(isl::val(ctx(), v2));
22505 }
22506 
floor()22507 isl::val val::floor() const
22508 {
22509   auto res = isl_val_floor(copy());
22510   return manage(res);
22511 }
22512 
gcd(isl::val v2)22513 isl::val val::gcd(isl::val v2) const
22514 {
22515   auto res = isl_val_gcd(copy(), v2.release());
22516   return manage(res);
22517 }
22518 
gcd(long v2)22519 isl::val val::gcd(long v2) const
22520 {
22521   return this->gcd(isl::val(ctx(), v2));
22522 }
22523 
ge(const isl::val & v2)22524 boolean val::ge(const isl::val &v2) const
22525 {
22526   auto res = isl_val_ge(get(), v2.get());
22527   return manage(res);
22528 }
22529 
ge(long v2)22530 boolean val::ge(long v2) const
22531 {
22532   return this->ge(isl::val(ctx(), v2));
22533 }
22534 
gt(const isl::val & v2)22535 boolean val::gt(const isl::val &v2) const
22536 {
22537   auto res = isl_val_gt(get(), v2.get());
22538   return manage(res);
22539 }
22540 
gt(long v2)22541 boolean val::gt(long v2) const
22542 {
22543   return this->gt(isl::val(ctx(), v2));
22544 }
22545 
infty(isl::ctx ctx)22546 isl::val val::infty(isl::ctx ctx)
22547 {
22548   auto res = isl_val_infty(ctx.release());
22549   return manage(res);
22550 }
22551 
int_from_ui(isl::ctx ctx,unsigned long u)22552 isl::val val::int_from_ui(isl::ctx ctx, unsigned long u)
22553 {
22554   auto res = isl_val_int_from_ui(ctx.release(), u);
22555   return manage(res);
22556 }
22557 
inv()22558 isl::val val::inv() const
22559 {
22560   auto res = isl_val_inv(copy());
22561   return manage(res);
22562 }
22563 
is_divisible_by(const isl::val & v2)22564 boolean val::is_divisible_by(const isl::val &v2) const
22565 {
22566   auto res = isl_val_is_divisible_by(get(), v2.get());
22567   return manage(res);
22568 }
22569 
is_divisible_by(long v2)22570 boolean val::is_divisible_by(long v2) const
22571 {
22572   return this->is_divisible_by(isl::val(ctx(), v2));
22573 }
22574 
is_infty()22575 boolean val::is_infty() const
22576 {
22577   auto res = isl_val_is_infty(get());
22578   return manage(res);
22579 }
22580 
is_int()22581 boolean val::is_int() const
22582 {
22583   auto res = isl_val_is_int(get());
22584   return manage(res);
22585 }
22586 
is_nan()22587 boolean val::is_nan() const
22588 {
22589   auto res = isl_val_is_nan(get());
22590   return manage(res);
22591 }
22592 
is_neg()22593 boolean val::is_neg() const
22594 {
22595   auto res = isl_val_is_neg(get());
22596   return manage(res);
22597 }
22598 
is_neginfty()22599 boolean val::is_neginfty() const
22600 {
22601   auto res = isl_val_is_neginfty(get());
22602   return manage(res);
22603 }
22604 
is_negone()22605 boolean val::is_negone() const
22606 {
22607   auto res = isl_val_is_negone(get());
22608   return manage(res);
22609 }
22610 
is_nonneg()22611 boolean val::is_nonneg() const
22612 {
22613   auto res = isl_val_is_nonneg(get());
22614   return manage(res);
22615 }
22616 
is_nonpos()22617 boolean val::is_nonpos() const
22618 {
22619   auto res = isl_val_is_nonpos(get());
22620   return manage(res);
22621 }
22622 
is_one()22623 boolean val::is_one() const
22624 {
22625   auto res = isl_val_is_one(get());
22626   return manage(res);
22627 }
22628 
is_pos()22629 boolean val::is_pos() const
22630 {
22631   auto res = isl_val_is_pos(get());
22632   return manage(res);
22633 }
22634 
is_rat()22635 boolean val::is_rat() const
22636 {
22637   auto res = isl_val_is_rat(get());
22638   return manage(res);
22639 }
22640 
is_zero()22641 boolean val::is_zero() const
22642 {
22643   auto res = isl_val_is_zero(get());
22644   return manage(res);
22645 }
22646 
le(const isl::val & v2)22647 boolean val::le(const isl::val &v2) const
22648 {
22649   auto res = isl_val_le(get(), v2.get());
22650   return manage(res);
22651 }
22652 
le(long v2)22653 boolean val::le(long v2) const
22654 {
22655   return this->le(isl::val(ctx(), v2));
22656 }
22657 
lt(const isl::val & v2)22658 boolean val::lt(const isl::val &v2) const
22659 {
22660   auto res = isl_val_lt(get(), v2.get());
22661   return manage(res);
22662 }
22663 
lt(long v2)22664 boolean val::lt(long v2) const
22665 {
22666   return this->lt(isl::val(ctx(), v2));
22667 }
22668 
max(isl::val v2)22669 isl::val val::max(isl::val v2) const
22670 {
22671   auto res = isl_val_max(copy(), v2.release());
22672   return manage(res);
22673 }
22674 
max(long v2)22675 isl::val val::max(long v2) const
22676 {
22677   return this->max(isl::val(ctx(), v2));
22678 }
22679 
min(isl::val v2)22680 isl::val val::min(isl::val v2) const
22681 {
22682   auto res = isl_val_min(copy(), v2.release());
22683   return manage(res);
22684 }
22685 
min(long v2)22686 isl::val val::min(long v2) const
22687 {
22688   return this->min(isl::val(ctx(), v2));
22689 }
22690 
mod(isl::val v2)22691 isl::val val::mod(isl::val v2) const
22692 {
22693   auto res = isl_val_mod(copy(), v2.release());
22694   return manage(res);
22695 }
22696 
mod(long v2)22697 isl::val val::mod(long v2) const
22698 {
22699   return this->mod(isl::val(ctx(), v2));
22700 }
22701 
mul(isl::val v2)22702 isl::val val::mul(isl::val v2) const
22703 {
22704   auto res = isl_val_mul(copy(), v2.release());
22705   return manage(res);
22706 }
22707 
mul(long v2)22708 isl::val val::mul(long v2) const
22709 {
22710   return this->mul(isl::val(ctx(), v2));
22711 }
22712 
nan(isl::ctx ctx)22713 isl::val val::nan(isl::ctx ctx)
22714 {
22715   auto res = isl_val_nan(ctx.release());
22716   return manage(res);
22717 }
22718 
ne(const isl::val & v2)22719 boolean val::ne(const isl::val &v2) const
22720 {
22721   auto res = isl_val_ne(get(), v2.get());
22722   return manage(res);
22723 }
22724 
ne(long v2)22725 boolean val::ne(long v2) const
22726 {
22727   return this->ne(isl::val(ctx(), v2));
22728 }
22729 
neg()22730 isl::val val::neg() const
22731 {
22732   auto res = isl_val_neg(copy());
22733   return manage(res);
22734 }
22735 
neginfty(isl::ctx ctx)22736 isl::val val::neginfty(isl::ctx ctx)
22737 {
22738   auto res = isl_val_neginfty(ctx.release());
22739   return manage(res);
22740 }
22741 
negone(isl::ctx ctx)22742 isl::val val::negone(isl::ctx ctx)
22743 {
22744   auto res = isl_val_negone(ctx.release());
22745   return manage(res);
22746 }
22747 
num_si()22748 long val::num_si() const
22749 {
22750   auto res = isl_val_get_num_si(get());
22751   return res;
22752 }
22753 
get_num_si()22754 long val::get_num_si() const
22755 {
22756   return num_si();
22757 }
22758 
one(isl::ctx ctx)22759 isl::val val::one(isl::ctx ctx)
22760 {
22761   auto res = isl_val_one(ctx.release());
22762   return manage(res);
22763 }
22764 
pow2()22765 isl::val val::pow2() const
22766 {
22767   auto res = isl_val_pow2(copy());
22768   return manage(res);
22769 }
22770 
sgn()22771 int val::sgn() const
22772 {
22773   auto res = isl_val_sgn(get());
22774   return res;
22775 }
22776 
sub(isl::val v2)22777 isl::val val::sub(isl::val v2) const
22778 {
22779   auto res = isl_val_sub(copy(), v2.release());
22780   return manage(res);
22781 }
22782 
sub(long v2)22783 isl::val val::sub(long v2) const
22784 {
22785   return this->sub(isl::val(ctx(), v2));
22786 }
22787 
to_list()22788 isl::val_list val::to_list() const
22789 {
22790   auto res = isl_val_to_list(copy());
22791   return manage(res);
22792 }
22793 
trunc()22794 isl::val val::trunc() const
22795 {
22796   auto res = isl_val_trunc(copy());
22797   return manage(res);
22798 }
22799 
zero(isl::ctx ctx)22800 isl::val val::zero(isl::ctx ctx)
22801 {
22802   auto res = isl_val_zero(ctx.release());
22803   return manage(res);
22804 }
22805 
22806 inline std::ostream &operator<<(std::ostream &os, const val &obj)
22807 {
22808   char *str = isl_val_to_str(obj.get());
22809   if (!str) {
22810     os.setstate(std::ios_base::badbit);
22811     return os;
22812   }
22813   os << str;
22814   free(str);
22815   return os;
22816 }
22817 
22818 // implementations for isl::val_list
manage(__isl_take isl_val_list * ptr)22819 val_list manage(__isl_take isl_val_list *ptr) {
22820   return val_list(ptr);
22821 }
manage_copy(__isl_keep isl_val_list * ptr)22822 val_list manage_copy(__isl_keep isl_val_list *ptr) {
22823   ptr = isl_val_list_copy(ptr);
22824   return val_list(ptr);
22825 }
22826 
val_list()22827 val_list::val_list()
22828     : ptr(nullptr) {}
22829 
val_list(const val_list & obj)22830 val_list::val_list(const val_list &obj)
22831     : ptr(nullptr)
22832 {
22833   ptr = obj.copy();
22834 }
22835 
val_list(__isl_take isl_val_list * ptr)22836 val_list::val_list(__isl_take isl_val_list *ptr)
22837     : ptr(ptr) {}
22838 
val_list(isl::ctx ctx,int n)22839 val_list::val_list(isl::ctx ctx, int n)
22840 {
22841   auto res = isl_val_list_alloc(ctx.release(), n);
22842   ptr = res;
22843 }
22844 
val_list(isl::val el)22845 val_list::val_list(isl::val el)
22846 {
22847   auto res = isl_val_list_from_val(el.release());
22848   ptr = res;
22849 }
22850 
val_list(isl::ctx ctx,const std::string & str)22851 val_list::val_list(isl::ctx ctx, const std::string &str)
22852 {
22853   auto res = isl_val_list_read_from_str(ctx.release(), str.c_str());
22854   ptr = res;
22855 }
22856 
22857 val_list &val_list::operator=(val_list obj) {
22858   std::swap(this->ptr, obj.ptr);
22859   return *this;
22860 }
22861 
~val_list()22862 val_list::~val_list() {
22863   if (ptr)
22864     isl_val_list_free(ptr);
22865 }
22866 
copy()22867 __isl_give isl_val_list *val_list::copy() const & {
22868   return isl_val_list_copy(ptr);
22869 }
22870 
get()22871 __isl_keep isl_val_list *val_list::get() const {
22872   return ptr;
22873 }
22874 
release()22875 __isl_give isl_val_list *val_list::release() {
22876   isl_val_list *tmp = ptr;
22877   ptr = nullptr;
22878   return tmp;
22879 }
22880 
is_null()22881 bool val_list::is_null() const {
22882   return ptr == nullptr;
22883 }
22884 
ctx()22885 isl::ctx val_list::ctx() const {
22886   return isl::ctx(isl_val_list_get_ctx(ptr));
22887 }
22888 
add(isl::val el)22889 isl::val_list val_list::add(isl::val el) const
22890 {
22891   auto res = isl_val_list_add(copy(), el.release());
22892   return manage(res);
22893 }
22894 
add(long el)22895 isl::val_list val_list::add(long el) const
22896 {
22897   return this->add(isl::val(ctx(), el));
22898 }
22899 
at(int index)22900 isl::val val_list::at(int index) const
22901 {
22902   auto res = isl_val_list_get_at(get(), index);
22903   return manage(res);
22904 }
22905 
get_at(int index)22906 isl::val val_list::get_at(int index) const
22907 {
22908   return at(index);
22909 }
22910 
clear()22911 isl::val_list val_list::clear() const
22912 {
22913   auto res = isl_val_list_clear(copy());
22914   return manage(res);
22915 }
22916 
concat(isl::val_list list2)22917 isl::val_list val_list::concat(isl::val_list list2) const
22918 {
22919   auto res = isl_val_list_concat(copy(), list2.release());
22920   return manage(res);
22921 }
22922 
drop(unsigned int first,unsigned int n)22923 isl::val_list val_list::drop(unsigned int first, unsigned int n) const
22924 {
22925   auto res = isl_val_list_drop(copy(), first, n);
22926   return manage(res);
22927 }
22928 
foreach(const std::function<stat (isl::val)> & fn)22929 stat val_list::foreach(const std::function<stat(isl::val)> &fn) const
22930 {
22931   struct fn_data {
22932     std::function<stat(isl::val)> func;
22933   } fn_data = { fn };
22934   auto fn_lambda = [](isl_val *arg_0, void *arg_1) -> isl_stat {
22935     auto *data = static_cast<struct fn_data *>(arg_1);
22936     auto ret = (data->func)(manage(arg_0));
22937     return ret.release();
22938   };
22939   auto res = isl_val_list_foreach(get(), fn_lambda, &fn_data);
22940   return manage(res);
22941 }
22942 
insert(unsigned int pos,isl::val el)22943 isl::val_list val_list::insert(unsigned int pos, isl::val el) const
22944 {
22945   auto res = isl_val_list_insert(copy(), pos, el.release());
22946   return manage(res);
22947 }
22948 
insert(unsigned int pos,long el)22949 isl::val_list val_list::insert(unsigned int pos, long el) const
22950 {
22951   return this->insert(pos, isl::val(ctx(), el));
22952 }
22953 
size()22954 class size val_list::size() const
22955 {
22956   auto res = isl_val_list_size(get());
22957   return manage(res);
22958 }
22959 
22960 inline std::ostream &operator<<(std::ostream &os, const val_list &obj)
22961 {
22962   char *str = isl_val_list_to_str(obj.get());
22963   if (!str) {
22964     os.setstate(std::ios_base::badbit);
22965     return os;
22966   }
22967   os << str;
22968   free(str);
22969   return os;
22970 }
22971 } // namespace isl
22972 
22973 #endif /* ISL_CPP_CHECKED */
22974