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#ifndef ISL_CPP_CHECKED
9#define ISL_CPP_CHECKED
10
11#include <stdio.h>
12#include <stdlib.h>
13
14#include <functional>
15#include <memory>
16#include <ostream>
17#include <string>
18#include <type_traits>
19
20#if __cplusplus >= 201703L
21#include <any>
22#include <optional>
23#endif
24
25namespace isl {
26namespace checked {
27
28#define ISLPP_STRINGIZE_(X) #X
29#define ISLPP_STRINGIZE(X) ISLPP_STRINGIZE_(X)
30
31#define ISLPP_ASSERT(test, message)                          \
32  do {                                                       \
33    if (test)                                                \
34      break;                                                 \
35    fputs("Assertion \"" #test "\" failed at " __FILE__      \
36      ":" ISLPP_STRINGIZE(__LINE__) "\n  " message "\n",     \
37      stderr);                                               \
38    abort();                                                 \
39  } while (0)
40
41/* Class used to check that isl::checked::boolean,
42 * isl::checked::stat and isl::checked::size values are checked for errors.
43 */
44struct checker {
45	bool checked = false;
46	~checker() {
47		ISLPP_ASSERT(checked, "IMPLEMENTATION ERROR: Unchecked state");
48	}
49};
50
51class boolean {
52private:
53  mutable std::shared_ptr<checker> check = std::make_shared<checker>();
54  isl_bool val;
55
56  friend boolean manage(isl_bool val);
57  boolean(isl_bool val): val(val) {}
58public:
59  static boolean error() {
60    return boolean(isl_bool_error);
61  }
62  boolean()
63      : val(isl_bool_error) {}
64
65  /* implicit */ boolean(bool val)
66      : val(val ? isl_bool_true : isl_bool_false) {}
67
68  isl_bool release() {
69    auto tmp = val;
70    val = isl_bool_error;
71    check->checked = true;
72    return tmp;
73  }
74
75  bool is_error() const { check->checked = true; return val == isl_bool_error; }
76  bool is_false() const { check->checked = true; return val == isl_bool_false; }
77  bool is_true() const { check->checked = true; return val == isl_bool_true; }
78
79  explicit operator bool() const {
80    ISLPP_ASSERT(check->checked, "IMPLEMENTATION ERROR: Unchecked error state");
81    ISLPP_ASSERT(!is_error(), "IMPLEMENTATION ERROR: Unhandled error state");
82    return is_true();
83  }
84
85  boolean negate() {
86    if (val == isl_bool_true)
87      val = isl_bool_false;
88    else if (val == isl_bool_false)
89      val = isl_bool_true;
90    return *this;
91  }
92
93  boolean operator!() const {
94    return boolean(*this).negate();
95  }
96};
97
98inline boolean manage(isl_bool val) {
99  return boolean(val);
100}
101
102class ctx {
103	isl_ctx *ptr;
104public:
105	/* implicit */ ctx(isl_ctx *ctx) : ptr(ctx) {}
106	isl_ctx *release() {
107		auto tmp = ptr;
108		ptr = nullptr;
109		return tmp;
110	}
111	isl_ctx *get() {
112		return ptr;
113	}
114#if __cplusplus >= 201703L
115	static void free_user(void *user) {
116		std::any *p = static_cast<std::any *>(user);
117		delete p;
118	}
119#endif
120};
121
122/* Class encapsulating an isl_stat value.
123 */
124class stat {
125private:
126	mutable std::shared_ptr<checker> check = std::make_shared<checker>();
127	isl_stat val;
128
129	friend stat manage(isl_stat val);
130	stat(isl_stat val) : val(val) {}
131public:
132	static stat ok() {
133		return stat(isl_stat_ok);
134	}
135	static stat error() {
136		return stat(isl_stat_error);
137	}
138	stat() : val(isl_stat_error) {}
139
140	isl_stat release() {
141		check->checked = true;
142		return val;
143	}
144
145	bool is_error() const {
146		check->checked = true;
147		return val == isl_stat_error;
148	}
149	bool is_ok() const {
150		check->checked = true;
151		return val == isl_stat_ok;
152	}
153};
154
155inline stat manage(isl_stat val)
156{
157	return stat(val);
158}
159
160/* Class encapsulating an isl_size value.
161 */
162class size {
163private:
164	mutable std::shared_ptr<checker> check = std::make_shared<checker>();
165	isl_size val;
166
167	friend size manage(isl_size val);
168	size(isl_size val) : val(val) {}
169public:
170	size() : val(isl_size_error) {}
171
172	isl_size release() {
173		auto tmp = val;
174		val = isl_size_error;
175		check->checked = true;
176		return tmp;
177	}
178
179	bool is_error() const {
180		check->checked = true;
181		return val == isl_size_error;
182	}
183
184	explicit operator unsigned() const {
185		ISLPP_ASSERT(check->checked,
186			    "IMPLEMENTATION ERROR: Unchecked error state");
187		ISLPP_ASSERT(!is_error(),
188			    "IMPLEMENTATION ERROR: Unhandled error state");
189		return val;
190	}
191};
192
193inline size manage(isl_size val)
194{
195	return size(val);
196}
197
198}
199} // namespace isl
200
201#include <isl/id.h>
202#include <isl/id_to_id.h>
203#include <isl/space.h>
204#include <isl/val.h>
205#include <isl/aff.h>
206#include <isl/set.h>
207#include <isl/map.h>
208#include <isl/ilp.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
217namespace isl {
218
219namespace checked {
220
221// forward declarations
222class aff;
223class aff_list;
224class ast_build;
225class ast_expr;
226class ast_expr_id;
227class ast_expr_int;
228class ast_expr_op;
229class ast_expr_op_access;
230class ast_expr_op_add;
231class ast_expr_op_address_of;
232class ast_expr_op_and;
233class ast_expr_op_and_then;
234class ast_expr_op_call;
235class ast_expr_op_cond;
236class ast_expr_op_div;
237class ast_expr_op_eq;
238class ast_expr_op_fdiv_q;
239class ast_expr_op_ge;
240class ast_expr_op_gt;
241class ast_expr_op_le;
242class ast_expr_op_lt;
243class ast_expr_op_max;
244class ast_expr_op_member;
245class ast_expr_op_min;
246class ast_expr_op_minus;
247class ast_expr_op_mul;
248class ast_expr_op_or;
249class ast_expr_op_or_else;
250class ast_expr_op_pdiv_q;
251class ast_expr_op_pdiv_r;
252class ast_expr_op_select;
253class ast_expr_op_sub;
254class ast_expr_op_zdiv_r;
255class ast_node;
256class ast_node_block;
257class ast_node_for;
258class ast_node_if;
259class ast_node_list;
260class ast_node_mark;
261class ast_node_user;
262class basic_map;
263class basic_set;
264class fixed_box;
265class id;
266class id_list;
267class id_to_ast_expr;
268class id_to_id;
269class map;
270class map_list;
271class multi_aff;
272class multi_id;
273class multi_pw_aff;
274class multi_union_pw_aff;
275class multi_val;
276class point;
277class pw_aff;
278class pw_aff_list;
279class pw_multi_aff;
280class pw_multi_aff_list;
281class schedule;
282class schedule_constraints;
283class schedule_node;
284class schedule_node_band;
285class schedule_node_context;
286class schedule_node_domain;
287class schedule_node_expansion;
288class schedule_node_extension;
289class schedule_node_filter;
290class schedule_node_guard;
291class schedule_node_leaf;
292class schedule_node_mark;
293class schedule_node_sequence;
294class schedule_node_set;
295class set;
296class set_list;
297class space;
298class union_access_info;
299class union_flow;
300class union_map;
301class union_pw_aff;
302class union_pw_aff_list;
303class union_pw_multi_aff;
304class union_set;
305class union_set_list;
306class val;
307class val_list;
308
309// declarations for isl::aff
310inline aff manage(__isl_take isl_aff *ptr);
311inline aff manage_copy(__isl_keep isl_aff *ptr);
312
313class aff {
314  friend inline aff manage(__isl_take isl_aff *ptr);
315  friend inline aff manage_copy(__isl_keep isl_aff *ptr);
316
317protected:
318  isl_aff *ptr = nullptr;
319
320  inline explicit aff(__isl_take isl_aff *ptr);
321
322public:
323  inline /* implicit */ aff();
324  inline /* implicit */ aff(const aff &obj);
325  inline explicit aff(isl::checked::ctx ctx, const std::string &str);
326  inline aff &operator=(aff obj);
327  inline ~aff();
328  inline __isl_give isl_aff *copy() const &;
329  inline __isl_give isl_aff *copy() && = delete;
330  inline __isl_keep isl_aff *get() const;
331  inline __isl_give isl_aff *release();
332  inline bool is_null() const;
333  inline isl::checked::ctx ctx() const;
334
335  inline isl::checked::aff add(isl::checked::aff aff2) const;
336  inline isl::checked::multi_aff add(const isl::checked::multi_aff &multi2) const;
337  inline isl::checked::multi_pw_aff add(const isl::checked::multi_pw_aff &multi2) const;
338  inline isl::checked::multi_union_pw_aff add(const isl::checked::multi_union_pw_aff &multi2) const;
339  inline isl::checked::pw_aff add(const isl::checked::pw_aff &pwaff2) const;
340  inline isl::checked::pw_multi_aff add(const isl::checked::pw_multi_aff &pma2) const;
341  inline isl::checked::union_pw_aff add(const isl::checked::union_pw_aff &upa2) const;
342  inline isl::checked::union_pw_multi_aff add(const isl::checked::union_pw_multi_aff &upma2) const;
343  inline isl::checked::aff add_constant(isl::checked::val v) const;
344  inline isl::checked::aff add_constant(long v) const;
345  inline isl::checked::multi_aff add_constant(const isl::checked::multi_val &mv) const;
346  inline isl::checked::union_pw_multi_aff apply(const isl::checked::union_pw_multi_aff &upma2) const;
347  inline isl::checked::aff as_aff() const;
348  inline isl::checked::map as_map() const;
349  inline isl::checked::multi_aff as_multi_aff() const;
350  inline isl::checked::multi_union_pw_aff as_multi_union_pw_aff() const;
351  inline isl::checked::pw_multi_aff as_pw_multi_aff() const;
352  inline isl::checked::set as_set() const;
353  inline isl::checked::union_map as_union_map() const;
354  inline isl::checked::aff at(int pos) const;
355  inline isl::checked::basic_set bind(isl::checked::id id) const;
356  inline isl::checked::basic_set bind(const std::string &id) const;
357  inline isl::checked::basic_set bind(const isl::checked::multi_id &tuple) const;
358  inline isl::checked::pw_aff bind_domain(const isl::checked::multi_id &tuple) const;
359  inline isl::checked::pw_aff bind_domain_wrapped_domain(const isl::checked::multi_id &tuple) const;
360  inline isl::checked::aff ceil() const;
361  inline isl::checked::pw_aff coalesce() const;
362  inline isl::checked::pw_aff cond(const isl::checked::pw_aff &pwaff_true, const isl::checked::pw_aff &pwaff_false) const;
363  inline isl::checked::multi_val constant_multi_val() const;
364  inline isl::checked::val constant_val() const;
365  inline isl::checked::val get_constant_val() const;
366  inline isl::checked::aff div(isl::checked::aff aff2) const;
367  inline isl::checked::pw_aff div(const isl::checked::pw_aff &pa2) const;
368  inline isl::checked::set domain() const;
369  inline isl::checked::aff domain_reverse() const;
370  inline isl::checked::pw_aff drop_unused_params() const;
371  inline isl::checked::set eq_set(isl::checked::aff aff2) const;
372  inline isl::checked::set eq_set(const isl::checked::pw_aff &pwaff2) const;
373  inline isl::checked::val eval(isl::checked::point pnt) const;
374  inline isl::checked::pw_multi_aff extract_pw_multi_aff(const isl::checked::space &space) const;
375  inline isl::checked::multi_aff flat_range_product(const isl::checked::multi_aff &multi2) const;
376  inline isl::checked::multi_pw_aff flat_range_product(const isl::checked::multi_pw_aff &multi2) const;
377  inline isl::checked::multi_union_pw_aff flat_range_product(const isl::checked::multi_union_pw_aff &multi2) const;
378  inline isl::checked::pw_multi_aff flat_range_product(const isl::checked::pw_multi_aff &pma2) const;
379  inline isl::checked::union_pw_multi_aff flat_range_product(const isl::checked::union_pw_multi_aff &upma2) const;
380  inline isl::checked::aff floor() const;
381  inline stat foreach_piece(const std::function<stat(isl::checked::set, isl::checked::multi_aff)> &fn) const;
382  inline isl::checked::set ge_set(isl::checked::aff aff2) const;
383  inline isl::checked::set ge_set(const isl::checked::pw_aff &pwaff2) const;
384  inline isl::checked::aff gist(isl::checked::set context) const;
385  inline isl::checked::union_pw_aff gist(const isl::checked::union_set &context) const;
386  inline isl::checked::aff gist(const isl::checked::basic_set &context) const;
387  inline isl::checked::aff gist(const isl::checked::point &context) const;
388  inline isl::checked::aff gist_params(isl::checked::set context) const;
389  inline isl::checked::set gt_set(isl::checked::aff aff2) const;
390  inline isl::checked::set gt_set(const isl::checked::pw_aff &pwaff2) const;
391  inline boolean has_range_tuple_id() const;
392  inline isl::checked::multi_aff identity() const;
393  inline isl::checked::pw_aff insert_domain(const isl::checked::space &domain) const;
394  inline isl::checked::pw_aff intersect_domain(const isl::checked::set &set) const;
395  inline isl::checked::union_pw_aff intersect_domain(const isl::checked::space &space) const;
396  inline isl::checked::union_pw_aff intersect_domain(const isl::checked::union_set &uset) const;
397  inline isl::checked::union_pw_aff intersect_domain_wrapped_domain(const isl::checked::union_set &uset) const;
398  inline isl::checked::union_pw_aff intersect_domain_wrapped_range(const isl::checked::union_set &uset) const;
399  inline isl::checked::pw_aff intersect_params(const isl::checked::set &set) const;
400  inline boolean involves_locals() const;
401  inline boolean involves_nan() const;
402  inline boolean involves_param(const isl::checked::id &id) const;
403  inline boolean involves_param(const std::string &id) const;
404  inline boolean involves_param(const isl::checked::id_list &list) const;
405  inline boolean is_cst() const;
406  inline boolean isa_aff() const;
407  inline boolean isa_multi_aff() const;
408  inline boolean isa_pw_multi_aff() const;
409  inline isl::checked::set le_set(isl::checked::aff aff2) const;
410  inline isl::checked::set le_set(const isl::checked::pw_aff &pwaff2) const;
411  inline isl::checked::aff_list list() const;
412  inline isl::checked::set lt_set(isl::checked::aff aff2) const;
413  inline isl::checked::set lt_set(const isl::checked::pw_aff &pwaff2) const;
414  inline isl::checked::multi_pw_aff max(const isl::checked::multi_pw_aff &multi2) const;
415  inline isl::checked::pw_aff max(const isl::checked::pw_aff &pwaff2) const;
416  inline isl::checked::multi_val max_multi_val() const;
417  inline isl::checked::val max_val() const;
418  inline isl::checked::multi_pw_aff min(const isl::checked::multi_pw_aff &multi2) const;
419  inline isl::checked::pw_aff min(const isl::checked::pw_aff &pwaff2) const;
420  inline isl::checked::multi_val min_multi_val() const;
421  inline isl::checked::val min_val() const;
422  inline isl::checked::aff mod(isl::checked::val mod) const;
423  inline isl::checked::aff mod(long mod) const;
424  inline isl::checked::aff mul(isl::checked::aff aff2) const;
425  inline isl::checked::pw_aff mul(const isl::checked::pw_aff &pwaff2) const;
426  inline class size n_piece() const;
427  inline isl::checked::set ne_set(isl::checked::aff aff2) const;
428  inline isl::checked::set ne_set(const isl::checked::pw_aff &pwaff2) const;
429  inline isl::checked::aff neg() const;
430  inline isl::checked::set params() const;
431  inline boolean plain_is_empty() const;
432  inline boolean plain_is_equal(const isl::checked::aff &aff2) const;
433  inline boolean plain_is_equal(const isl::checked::multi_aff &multi2) const;
434  inline boolean plain_is_equal(const isl::checked::multi_pw_aff &multi2) const;
435  inline boolean plain_is_equal(const isl::checked::multi_union_pw_aff &multi2) const;
436  inline boolean plain_is_equal(const isl::checked::pw_aff &pwaff2) const;
437  inline boolean plain_is_equal(const isl::checked::pw_multi_aff &pma2) const;
438  inline boolean plain_is_equal(const isl::checked::union_pw_aff &upa2) const;
439  inline boolean plain_is_equal(const isl::checked::union_pw_multi_aff &upma2) const;
440  inline isl::checked::pw_multi_aff preimage_domain_wrapped_domain(const isl::checked::pw_multi_aff &pma2) const;
441  inline isl::checked::union_pw_multi_aff preimage_domain_wrapped_domain(const isl::checked::union_pw_multi_aff &upma2) const;
442  inline isl::checked::multi_aff product(const isl::checked::multi_aff &multi2) const;
443  inline isl::checked::multi_pw_aff product(const isl::checked::multi_pw_aff &multi2) const;
444  inline isl::checked::pw_multi_aff product(const isl::checked::pw_multi_aff &pma2) const;
445  inline isl::checked::aff pullback(isl::checked::multi_aff ma) const;
446  inline isl::checked::pw_aff pullback(const isl::checked::multi_pw_aff &mpa) const;
447  inline isl::checked::pw_aff pullback(const isl::checked::pw_multi_aff &pma) const;
448  inline isl::checked::union_pw_aff pullback(const isl::checked::union_pw_multi_aff &upma) const;
449  inline isl::checked::aff pullback(const isl::checked::aff &ma) const;
450  inline isl::checked::pw_multi_aff_list pw_multi_aff_list() const;
451  inline isl::checked::pw_multi_aff range_factor_domain() const;
452  inline isl::checked::pw_multi_aff range_factor_range() const;
453  inline isl::checked::multi_aff range_product(const isl::checked::multi_aff &multi2) const;
454  inline isl::checked::multi_pw_aff range_product(const isl::checked::multi_pw_aff &multi2) const;
455  inline isl::checked::multi_union_pw_aff range_product(const isl::checked::multi_union_pw_aff &multi2) const;
456  inline isl::checked::pw_multi_aff range_product(const isl::checked::pw_multi_aff &pma2) const;
457  inline isl::checked::union_pw_multi_aff range_product(const isl::checked::union_pw_multi_aff &upma2) const;
458  inline isl::checked::id range_tuple_id() const;
459  inline isl::checked::multi_aff reset_range_tuple_id() const;
460  inline isl::checked::aff scale(isl::checked::val v) const;
461  inline isl::checked::aff scale(long v) const;
462  inline isl::checked::multi_aff scale(const isl::checked::multi_val &mv) const;
463  inline isl::checked::aff scale_down(isl::checked::val v) const;
464  inline isl::checked::aff scale_down(long v) const;
465  inline isl::checked::multi_aff scale_down(const isl::checked::multi_val &mv) const;
466  inline isl::checked::multi_aff set_at(int pos, const isl::checked::aff &el) const;
467  inline isl::checked::multi_pw_aff set_at(int pos, const isl::checked::pw_aff &el) const;
468  inline isl::checked::multi_union_pw_aff set_at(int pos, const isl::checked::union_pw_aff &el) const;
469  inline isl::checked::multi_aff set_range_tuple(const isl::checked::id &id) const;
470  inline isl::checked::multi_aff set_range_tuple(const std::string &id) const;
471  inline class size size() const;
472  inline isl::checked::space space() const;
473  inline isl::checked::aff sub(isl::checked::aff aff2) const;
474  inline isl::checked::multi_aff sub(const isl::checked::multi_aff &multi2) const;
475  inline isl::checked::multi_pw_aff sub(const isl::checked::multi_pw_aff &multi2) const;
476  inline isl::checked::multi_union_pw_aff sub(const isl::checked::multi_union_pw_aff &multi2) const;
477  inline isl::checked::pw_aff sub(const isl::checked::pw_aff &pwaff2) const;
478  inline isl::checked::pw_multi_aff sub(const isl::checked::pw_multi_aff &pma2) const;
479  inline isl::checked::union_pw_aff sub(const isl::checked::union_pw_aff &upa2) const;
480  inline isl::checked::union_pw_multi_aff sub(const isl::checked::union_pw_multi_aff &upma2) const;
481  inline isl::checked::pw_aff subtract_domain(const isl::checked::set &set) const;
482  inline isl::checked::union_pw_aff subtract_domain(const isl::checked::space &space) const;
483  inline isl::checked::union_pw_aff subtract_domain(const isl::checked::union_set &uset) const;
484  inline isl::checked::pw_aff tdiv_q(const isl::checked::pw_aff &pa2) const;
485  inline isl::checked::pw_aff tdiv_r(const isl::checked::pw_aff &pa2) const;
486  inline isl::checked::aff_list to_list() const;
487  inline isl::checked::multi_pw_aff to_multi_pw_aff() const;
488  inline isl::checked::multi_union_pw_aff to_multi_union_pw_aff() const;
489  inline isl::checked::pw_multi_aff to_pw_multi_aff() const;
490  inline isl::checked::union_pw_aff to_union_pw_aff() const;
491  inline isl::checked::union_pw_multi_aff to_union_pw_multi_aff() const;
492  inline isl::checked::aff unbind_params_insert_domain(isl::checked::multi_id domain) const;
493  inline isl::checked::multi_pw_aff union_add(const isl::checked::multi_pw_aff &mpa2) const;
494  inline isl::checked::multi_union_pw_aff union_add(const isl::checked::multi_union_pw_aff &mupa2) const;
495  inline isl::checked::pw_aff union_add(const isl::checked::pw_aff &pwaff2) const;
496  inline isl::checked::pw_multi_aff union_add(const isl::checked::pw_multi_aff &pma2) const;
497  inline isl::checked::union_pw_aff union_add(const isl::checked::union_pw_aff &upa2) const;
498  inline isl::checked::union_pw_multi_aff union_add(const isl::checked::union_pw_multi_aff &upma2) const;
499  static inline isl::checked::aff zero_on_domain(isl::checked::space space);
500};
501
502// declarations for isl::aff_list
503inline aff_list manage(__isl_take isl_aff_list *ptr);
504inline aff_list manage_copy(__isl_keep isl_aff_list *ptr);
505
506class aff_list {
507  friend inline aff_list manage(__isl_take isl_aff_list *ptr);
508  friend inline aff_list manage_copy(__isl_keep isl_aff_list *ptr);
509
510protected:
511  isl_aff_list *ptr = nullptr;
512
513  inline explicit aff_list(__isl_take isl_aff_list *ptr);
514
515public:
516  inline /* implicit */ aff_list();
517  inline /* implicit */ aff_list(const aff_list &obj);
518  inline explicit aff_list(isl::checked::ctx ctx, int n);
519  inline explicit aff_list(isl::checked::aff el);
520  inline explicit aff_list(isl::checked::ctx ctx, const std::string &str);
521  inline aff_list &operator=(aff_list obj);
522  inline ~aff_list();
523  inline __isl_give isl_aff_list *copy() const &;
524  inline __isl_give isl_aff_list *copy() && = delete;
525  inline __isl_keep isl_aff_list *get() const;
526  inline __isl_give isl_aff_list *release();
527  inline bool is_null() const;
528  inline isl::checked::ctx ctx() const;
529
530  inline isl::checked::aff_list add(isl::checked::aff el) const;
531  inline isl::checked::aff at(int index) const;
532  inline isl::checked::aff get_at(int index) const;
533  inline isl::checked::aff_list clear() const;
534  inline isl::checked::aff_list concat(isl::checked::aff_list list2) const;
535  inline isl::checked::aff_list drop(unsigned int first, unsigned int n) const;
536  inline stat foreach(const std::function<stat(isl::checked::aff)> &fn) const;
537  inline stat foreach_scc(const std::function<boolean(isl::checked::aff, isl::checked::aff)> &follows, const std::function<stat(isl::checked::aff_list)> &fn) const;
538  inline isl::checked::aff_list insert(unsigned int pos, isl::checked::aff el) const;
539  inline isl::checked::aff_list set_at(int index, isl::checked::aff el) const;
540  inline class size size() const;
541};
542
543// declarations for isl::ast_build
544inline ast_build manage(__isl_take isl_ast_build *ptr);
545inline ast_build manage_copy(__isl_keep isl_ast_build *ptr);
546
547class ast_build {
548  friend inline ast_build manage(__isl_take isl_ast_build *ptr);
549  friend inline ast_build manage_copy(__isl_keep isl_ast_build *ptr);
550
551protected:
552  isl_ast_build *ptr = nullptr;
553
554  inline explicit ast_build(__isl_take isl_ast_build *ptr);
555
556public:
557  inline /* implicit */ ast_build();
558  inline /* implicit */ ast_build(const ast_build &obj);
559  inline explicit ast_build(isl::checked::ctx ctx);
560  inline ast_build &operator=(ast_build obj);
561  inline ~ast_build();
562  inline __isl_give isl_ast_build *copy() const &;
563  inline __isl_give isl_ast_build *copy() && = delete;
564  inline __isl_keep isl_ast_build *get() const;
565  inline __isl_give isl_ast_build *release();
566  inline bool is_null() const;
567  inline isl::checked::ctx ctx() const;
568
569private:
570  inline ast_build &copy_callbacks(const ast_build &obj);
571  struct at_each_domain_data {
572    std::function<isl::checked::ast_node(isl::checked::ast_node, isl::checked::ast_build)> func;
573  };
574  std::shared_ptr<at_each_domain_data> at_each_domain_data;
575  static inline isl_ast_node *at_each_domain(isl_ast_node *arg_0, isl_ast_build *arg_1, void *arg_2);
576  inline void set_at_each_domain_data(const std::function<isl::checked::ast_node(isl::checked::ast_node, isl::checked::ast_build)> &fn);
577public:
578  inline isl::checked::ast_build set_at_each_domain(const std::function<isl::checked::ast_node(isl::checked::ast_node, isl::checked::ast_build)> &fn) const;
579  inline isl::checked::ast_expr access_from(isl::checked::multi_pw_aff mpa) const;
580  inline isl::checked::ast_expr access_from(isl::checked::pw_multi_aff pma) const;
581  inline isl::checked::ast_expr call_from(isl::checked::multi_pw_aff mpa) const;
582  inline isl::checked::ast_expr call_from(isl::checked::pw_multi_aff pma) const;
583  inline isl::checked::ast_expr expr_from(isl::checked::pw_aff pa) const;
584  inline isl::checked::ast_expr expr_from(isl::checked::set set) const;
585  static inline isl::checked::ast_build from_context(isl::checked::set set);
586  inline isl::checked::ast_node node_from(isl::checked::schedule schedule) const;
587  inline isl::checked::ast_node node_from_schedule_map(isl::checked::union_map schedule) const;
588  inline isl::checked::union_map schedule() const;
589  inline isl::checked::union_map get_schedule() const;
590};
591
592// declarations for isl::ast_expr
593inline ast_expr manage(__isl_take isl_ast_expr *ptr);
594inline ast_expr manage_copy(__isl_keep isl_ast_expr *ptr);
595
596class ast_expr {
597  friend inline ast_expr manage(__isl_take isl_ast_expr *ptr);
598  friend inline ast_expr manage_copy(__isl_keep isl_ast_expr *ptr);
599
600protected:
601  isl_ast_expr *ptr = nullptr;
602
603  inline explicit ast_expr(__isl_take isl_ast_expr *ptr);
604
605public:
606  inline /* implicit */ ast_expr();
607  inline /* implicit */ ast_expr(const ast_expr &obj);
608  inline ast_expr &operator=(ast_expr obj);
609  inline ~ast_expr();
610  inline __isl_give isl_ast_expr *copy() const &;
611  inline __isl_give isl_ast_expr *copy() && = delete;
612  inline __isl_keep isl_ast_expr *get() const;
613  inline __isl_give isl_ast_expr *release();
614  inline bool is_null() const;
615private:
616  template <typename T,
617          typename = typename std::enable_if<std::is_same<
618                  const decltype(isl_ast_expr_get_type(NULL)),
619                  const T>::value>::type>
620  inline boolean isa_type(T subtype) const;
621public:
622  template <class T> inline boolean isa() const;
623  template <class T> inline T as() const;
624  inline isl::checked::ctx ctx() const;
625
626  inline std::string to_C_str() const;
627};
628
629// declarations for isl::ast_expr_id
630
631class ast_expr_id : public ast_expr {
632  template <class T>
633  friend boolean ast_expr::isa() const;
634  friend ast_expr_id ast_expr::as<ast_expr_id>() const;
635  static const auto type = isl_ast_expr_id;
636
637protected:
638  inline explicit ast_expr_id(__isl_take isl_ast_expr *ptr);
639
640public:
641  inline /* implicit */ ast_expr_id();
642  inline /* implicit */ ast_expr_id(const ast_expr_id &obj);
643  inline ast_expr_id &operator=(ast_expr_id obj);
644  inline isl::checked::ctx ctx() const;
645
646  inline isl::checked::id id() const;
647  inline isl::checked::id get_id() const;
648};
649
650// declarations for isl::ast_expr_int
651
652class ast_expr_int : public ast_expr {
653  template <class T>
654  friend boolean ast_expr::isa() const;
655  friend ast_expr_int ast_expr::as<ast_expr_int>() const;
656  static const auto type = isl_ast_expr_int;
657
658protected:
659  inline explicit ast_expr_int(__isl_take isl_ast_expr *ptr);
660
661public:
662  inline /* implicit */ ast_expr_int();
663  inline /* implicit */ ast_expr_int(const ast_expr_int &obj);
664  inline ast_expr_int &operator=(ast_expr_int obj);
665  inline isl::checked::ctx ctx() const;
666
667  inline isl::checked::val val() const;
668  inline isl::checked::val get_val() const;
669};
670
671// declarations for isl::ast_expr_op
672
673class ast_expr_op : public ast_expr {
674  template <class T>
675  friend boolean ast_expr::isa() const;
676  friend ast_expr_op ast_expr::as<ast_expr_op>() const;
677  static const auto type = isl_ast_expr_op;
678
679protected:
680  inline explicit ast_expr_op(__isl_take isl_ast_expr *ptr);
681
682public:
683  inline /* implicit */ ast_expr_op();
684  inline /* implicit */ ast_expr_op(const ast_expr_op &obj);
685  inline ast_expr_op &operator=(ast_expr_op obj);
686private:
687  template <typename T,
688          typename = typename std::enable_if<std::is_same<
689                  const decltype(isl_ast_expr_op_get_type(NULL)),
690                  const T>::value>::type>
691  inline boolean isa_type(T subtype) const;
692public:
693  template <class T> inline boolean isa() const;
694  template <class T> inline T as() const;
695  inline isl::checked::ctx ctx() const;
696
697  inline isl::checked::ast_expr arg(int pos) const;
698  inline isl::checked::ast_expr get_arg(int pos) const;
699  inline class size n_arg() const;
700  inline class size get_n_arg() const;
701};
702
703// declarations for isl::ast_expr_op_access
704
705class ast_expr_op_access : public ast_expr_op {
706  template <class T>
707  friend boolean ast_expr_op::isa() const;
708  friend ast_expr_op_access ast_expr_op::as<ast_expr_op_access>() const;
709  static const auto type = isl_ast_expr_op_access;
710
711protected:
712  inline explicit ast_expr_op_access(__isl_take isl_ast_expr *ptr);
713
714public:
715  inline /* implicit */ ast_expr_op_access();
716  inline /* implicit */ ast_expr_op_access(const ast_expr_op_access &obj);
717  inline ast_expr_op_access &operator=(ast_expr_op_access obj);
718  inline isl::checked::ctx ctx() const;
719
720};
721
722// declarations for isl::ast_expr_op_add
723
724class ast_expr_op_add : public ast_expr_op {
725  template <class T>
726  friend boolean ast_expr_op::isa() const;
727  friend ast_expr_op_add ast_expr_op::as<ast_expr_op_add>() const;
728  static const auto type = isl_ast_expr_op_add;
729
730protected:
731  inline explicit ast_expr_op_add(__isl_take isl_ast_expr *ptr);
732
733public:
734  inline /* implicit */ ast_expr_op_add();
735  inline /* implicit */ ast_expr_op_add(const ast_expr_op_add &obj);
736  inline ast_expr_op_add &operator=(ast_expr_op_add obj);
737  inline isl::checked::ctx ctx() const;
738
739};
740
741// declarations for isl::ast_expr_op_address_of
742
743class ast_expr_op_address_of : public ast_expr_op {
744  template <class T>
745  friend boolean ast_expr_op::isa() const;
746  friend ast_expr_op_address_of ast_expr_op::as<ast_expr_op_address_of>() const;
747  static const auto type = isl_ast_expr_op_address_of;
748
749protected:
750  inline explicit ast_expr_op_address_of(__isl_take isl_ast_expr *ptr);
751
752public:
753  inline /* implicit */ ast_expr_op_address_of();
754  inline /* implicit */ ast_expr_op_address_of(const ast_expr_op_address_of &obj);
755  inline ast_expr_op_address_of &operator=(ast_expr_op_address_of obj);
756  inline isl::checked::ctx ctx() const;
757
758};
759
760// declarations for isl::ast_expr_op_and
761
762class ast_expr_op_and : public ast_expr_op {
763  template <class T>
764  friend boolean ast_expr_op::isa() const;
765  friend ast_expr_op_and ast_expr_op::as<ast_expr_op_and>() const;
766  static const auto type = isl_ast_expr_op_and;
767
768protected:
769  inline explicit ast_expr_op_and(__isl_take isl_ast_expr *ptr);
770
771public:
772  inline /* implicit */ ast_expr_op_and();
773  inline /* implicit */ ast_expr_op_and(const ast_expr_op_and &obj);
774  inline ast_expr_op_and &operator=(ast_expr_op_and obj);
775  inline isl::checked::ctx ctx() const;
776
777};
778
779// declarations for isl::ast_expr_op_and_then
780
781class ast_expr_op_and_then : public ast_expr_op {
782  template <class T>
783  friend boolean ast_expr_op::isa() const;
784  friend ast_expr_op_and_then ast_expr_op::as<ast_expr_op_and_then>() const;
785  static const auto type = isl_ast_expr_op_and_then;
786
787protected:
788  inline explicit ast_expr_op_and_then(__isl_take isl_ast_expr *ptr);
789
790public:
791  inline /* implicit */ ast_expr_op_and_then();
792  inline /* implicit */ ast_expr_op_and_then(const ast_expr_op_and_then &obj);
793  inline ast_expr_op_and_then &operator=(ast_expr_op_and_then obj);
794  inline isl::checked::ctx ctx() const;
795
796};
797
798// declarations for isl::ast_expr_op_call
799
800class ast_expr_op_call : public ast_expr_op {
801  template <class T>
802  friend boolean ast_expr_op::isa() const;
803  friend ast_expr_op_call ast_expr_op::as<ast_expr_op_call>() const;
804  static const auto type = isl_ast_expr_op_call;
805
806protected:
807  inline explicit ast_expr_op_call(__isl_take isl_ast_expr *ptr);
808
809public:
810  inline /* implicit */ ast_expr_op_call();
811  inline /* implicit */ ast_expr_op_call(const ast_expr_op_call &obj);
812  inline ast_expr_op_call &operator=(ast_expr_op_call obj);
813  inline isl::checked::ctx ctx() const;
814
815};
816
817// declarations for isl::ast_expr_op_cond
818
819class ast_expr_op_cond : public ast_expr_op {
820  template <class T>
821  friend boolean ast_expr_op::isa() const;
822  friend ast_expr_op_cond ast_expr_op::as<ast_expr_op_cond>() const;
823  static const auto type = isl_ast_expr_op_cond;
824
825protected:
826  inline explicit ast_expr_op_cond(__isl_take isl_ast_expr *ptr);
827
828public:
829  inline /* implicit */ ast_expr_op_cond();
830  inline /* implicit */ ast_expr_op_cond(const ast_expr_op_cond &obj);
831  inline ast_expr_op_cond &operator=(ast_expr_op_cond obj);
832  inline isl::checked::ctx ctx() const;
833
834};
835
836// declarations for isl::ast_expr_op_div
837
838class ast_expr_op_div : public ast_expr_op {
839  template <class T>
840  friend boolean ast_expr_op::isa() const;
841  friend ast_expr_op_div ast_expr_op::as<ast_expr_op_div>() const;
842  static const auto type = isl_ast_expr_op_div;
843
844protected:
845  inline explicit ast_expr_op_div(__isl_take isl_ast_expr *ptr);
846
847public:
848  inline /* implicit */ ast_expr_op_div();
849  inline /* implicit */ ast_expr_op_div(const ast_expr_op_div &obj);
850  inline ast_expr_op_div &operator=(ast_expr_op_div obj);
851  inline isl::checked::ctx ctx() const;
852
853};
854
855// declarations for isl::ast_expr_op_eq
856
857class ast_expr_op_eq : public ast_expr_op {
858  template <class T>
859  friend boolean ast_expr_op::isa() const;
860  friend ast_expr_op_eq ast_expr_op::as<ast_expr_op_eq>() const;
861  static const auto type = isl_ast_expr_op_eq;
862
863protected:
864  inline explicit ast_expr_op_eq(__isl_take isl_ast_expr *ptr);
865
866public:
867  inline /* implicit */ ast_expr_op_eq();
868  inline /* implicit */ ast_expr_op_eq(const ast_expr_op_eq &obj);
869  inline ast_expr_op_eq &operator=(ast_expr_op_eq obj);
870  inline isl::checked::ctx ctx() const;
871
872};
873
874// declarations for isl::ast_expr_op_fdiv_q
875
876class ast_expr_op_fdiv_q : public ast_expr_op {
877  template <class T>
878  friend boolean ast_expr_op::isa() const;
879  friend ast_expr_op_fdiv_q ast_expr_op::as<ast_expr_op_fdiv_q>() const;
880  static const auto type = isl_ast_expr_op_fdiv_q;
881
882protected:
883  inline explicit ast_expr_op_fdiv_q(__isl_take isl_ast_expr *ptr);
884
885public:
886  inline /* implicit */ ast_expr_op_fdiv_q();
887  inline /* implicit */ ast_expr_op_fdiv_q(const ast_expr_op_fdiv_q &obj);
888  inline ast_expr_op_fdiv_q &operator=(ast_expr_op_fdiv_q obj);
889  inline isl::checked::ctx ctx() const;
890
891};
892
893// declarations for isl::ast_expr_op_ge
894
895class ast_expr_op_ge : public ast_expr_op {
896  template <class T>
897  friend boolean ast_expr_op::isa() const;
898  friend ast_expr_op_ge ast_expr_op::as<ast_expr_op_ge>() const;
899  static const auto type = isl_ast_expr_op_ge;
900
901protected:
902  inline explicit ast_expr_op_ge(__isl_take isl_ast_expr *ptr);
903
904public:
905  inline /* implicit */ ast_expr_op_ge();
906  inline /* implicit */ ast_expr_op_ge(const ast_expr_op_ge &obj);
907  inline ast_expr_op_ge &operator=(ast_expr_op_ge obj);
908  inline isl::checked::ctx ctx() const;
909
910};
911
912// declarations for isl::ast_expr_op_gt
913
914class ast_expr_op_gt : public ast_expr_op {
915  template <class T>
916  friend boolean ast_expr_op::isa() const;
917  friend ast_expr_op_gt ast_expr_op::as<ast_expr_op_gt>() const;
918  static const auto type = isl_ast_expr_op_gt;
919
920protected:
921  inline explicit ast_expr_op_gt(__isl_take isl_ast_expr *ptr);
922
923public:
924  inline /* implicit */ ast_expr_op_gt();
925  inline /* implicit */ ast_expr_op_gt(const ast_expr_op_gt &obj);
926  inline ast_expr_op_gt &operator=(ast_expr_op_gt obj);
927  inline isl::checked::ctx ctx() const;
928
929};
930
931// declarations for isl::ast_expr_op_le
932
933class ast_expr_op_le : public ast_expr_op {
934  template <class T>
935  friend boolean ast_expr_op::isa() const;
936  friend ast_expr_op_le ast_expr_op::as<ast_expr_op_le>() const;
937  static const auto type = isl_ast_expr_op_le;
938
939protected:
940  inline explicit ast_expr_op_le(__isl_take isl_ast_expr *ptr);
941
942public:
943  inline /* implicit */ ast_expr_op_le();
944  inline /* implicit */ ast_expr_op_le(const ast_expr_op_le &obj);
945  inline ast_expr_op_le &operator=(ast_expr_op_le obj);
946  inline isl::checked::ctx ctx() const;
947
948};
949
950// declarations for isl::ast_expr_op_lt
951
952class ast_expr_op_lt : public ast_expr_op {
953  template <class T>
954  friend boolean ast_expr_op::isa() const;
955  friend ast_expr_op_lt ast_expr_op::as<ast_expr_op_lt>() const;
956  static const auto type = isl_ast_expr_op_lt;
957
958protected:
959  inline explicit ast_expr_op_lt(__isl_take isl_ast_expr *ptr);
960
961public:
962  inline /* implicit */ ast_expr_op_lt();
963  inline /* implicit */ ast_expr_op_lt(const ast_expr_op_lt &obj);
964  inline ast_expr_op_lt &operator=(ast_expr_op_lt obj);
965  inline isl::checked::ctx ctx() const;
966
967};
968
969// declarations for isl::ast_expr_op_max
970
971class ast_expr_op_max : public ast_expr_op {
972  template <class T>
973  friend boolean ast_expr_op::isa() const;
974  friend ast_expr_op_max ast_expr_op::as<ast_expr_op_max>() const;
975  static const auto type = isl_ast_expr_op_max;
976
977protected:
978  inline explicit ast_expr_op_max(__isl_take isl_ast_expr *ptr);
979
980public:
981  inline /* implicit */ ast_expr_op_max();
982  inline /* implicit */ ast_expr_op_max(const ast_expr_op_max &obj);
983  inline ast_expr_op_max &operator=(ast_expr_op_max obj);
984  inline isl::checked::ctx ctx() const;
985
986};
987
988// declarations for isl::ast_expr_op_member
989
990class ast_expr_op_member : public ast_expr_op {
991  template <class T>
992  friend boolean ast_expr_op::isa() const;
993  friend ast_expr_op_member ast_expr_op::as<ast_expr_op_member>() const;
994  static const auto type = isl_ast_expr_op_member;
995
996protected:
997  inline explicit ast_expr_op_member(__isl_take isl_ast_expr *ptr);
998
999public:
1000  inline /* implicit */ ast_expr_op_member();
1001  inline /* implicit */ ast_expr_op_member(const ast_expr_op_member &obj);
1002  inline ast_expr_op_member &operator=(ast_expr_op_member obj);
1003  inline isl::checked::ctx ctx() const;
1004
1005};
1006
1007// declarations for isl::ast_expr_op_min
1008
1009class ast_expr_op_min : public ast_expr_op {
1010  template <class T>
1011  friend boolean ast_expr_op::isa() const;
1012  friend ast_expr_op_min ast_expr_op::as<ast_expr_op_min>() const;
1013  static const auto type = isl_ast_expr_op_min;
1014
1015protected:
1016  inline explicit ast_expr_op_min(__isl_take isl_ast_expr *ptr);
1017
1018public:
1019  inline /* implicit */ ast_expr_op_min();
1020  inline /* implicit */ ast_expr_op_min(const ast_expr_op_min &obj);
1021  inline ast_expr_op_min &operator=(ast_expr_op_min obj);
1022  inline isl::checked::ctx ctx() const;
1023
1024};
1025
1026// declarations for isl::ast_expr_op_minus
1027
1028class ast_expr_op_minus : public ast_expr_op {
1029  template <class T>
1030  friend boolean ast_expr_op::isa() const;
1031  friend ast_expr_op_minus ast_expr_op::as<ast_expr_op_minus>() const;
1032  static const auto type = isl_ast_expr_op_minus;
1033
1034protected:
1035  inline explicit ast_expr_op_minus(__isl_take isl_ast_expr *ptr);
1036
1037public:
1038  inline /* implicit */ ast_expr_op_minus();
1039  inline /* implicit */ ast_expr_op_minus(const ast_expr_op_minus &obj);
1040  inline ast_expr_op_minus &operator=(ast_expr_op_minus obj);
1041  inline isl::checked::ctx ctx() const;
1042
1043};
1044
1045// declarations for isl::ast_expr_op_mul
1046
1047class ast_expr_op_mul : public ast_expr_op {
1048  template <class T>
1049  friend boolean ast_expr_op::isa() const;
1050  friend ast_expr_op_mul ast_expr_op::as<ast_expr_op_mul>() const;
1051  static const auto type = isl_ast_expr_op_mul;
1052
1053protected:
1054  inline explicit ast_expr_op_mul(__isl_take isl_ast_expr *ptr);
1055
1056public:
1057  inline /* implicit */ ast_expr_op_mul();
1058  inline /* implicit */ ast_expr_op_mul(const ast_expr_op_mul &obj);
1059  inline ast_expr_op_mul &operator=(ast_expr_op_mul obj);
1060  inline isl::checked::ctx ctx() const;
1061
1062};
1063
1064// declarations for isl::ast_expr_op_or
1065
1066class ast_expr_op_or : public ast_expr_op {
1067  template <class T>
1068  friend boolean ast_expr_op::isa() const;
1069  friend ast_expr_op_or ast_expr_op::as<ast_expr_op_or>() const;
1070  static const auto type = isl_ast_expr_op_or;
1071
1072protected:
1073  inline explicit ast_expr_op_or(__isl_take isl_ast_expr *ptr);
1074
1075public:
1076  inline /* implicit */ ast_expr_op_or();
1077  inline /* implicit */ ast_expr_op_or(const ast_expr_op_or &obj);
1078  inline ast_expr_op_or &operator=(ast_expr_op_or obj);
1079  inline isl::checked::ctx ctx() const;
1080
1081};
1082
1083// declarations for isl::ast_expr_op_or_else
1084
1085class ast_expr_op_or_else : public ast_expr_op {
1086  template <class T>
1087  friend boolean ast_expr_op::isa() const;
1088  friend ast_expr_op_or_else ast_expr_op::as<ast_expr_op_or_else>() const;
1089  static const auto type = isl_ast_expr_op_or_else;
1090
1091protected:
1092  inline explicit ast_expr_op_or_else(__isl_take isl_ast_expr *ptr);
1093
1094public:
1095  inline /* implicit */ ast_expr_op_or_else();
1096  inline /* implicit */ ast_expr_op_or_else(const ast_expr_op_or_else &obj);
1097  inline ast_expr_op_or_else &operator=(ast_expr_op_or_else obj);
1098  inline isl::checked::ctx ctx() const;
1099
1100};
1101
1102// declarations for isl::ast_expr_op_pdiv_q
1103
1104class ast_expr_op_pdiv_q : public ast_expr_op {
1105  template <class T>
1106  friend boolean ast_expr_op::isa() const;
1107  friend ast_expr_op_pdiv_q ast_expr_op::as<ast_expr_op_pdiv_q>() const;
1108  static const auto type = isl_ast_expr_op_pdiv_q;
1109
1110protected:
1111  inline explicit ast_expr_op_pdiv_q(__isl_take isl_ast_expr *ptr);
1112
1113public:
1114  inline /* implicit */ ast_expr_op_pdiv_q();
1115  inline /* implicit */ ast_expr_op_pdiv_q(const ast_expr_op_pdiv_q &obj);
1116  inline ast_expr_op_pdiv_q &operator=(ast_expr_op_pdiv_q obj);
1117  inline isl::checked::ctx ctx() const;
1118
1119};
1120
1121// declarations for isl::ast_expr_op_pdiv_r
1122
1123class ast_expr_op_pdiv_r : public ast_expr_op {
1124  template <class T>
1125  friend boolean ast_expr_op::isa() const;
1126  friend ast_expr_op_pdiv_r ast_expr_op::as<ast_expr_op_pdiv_r>() const;
1127  static const auto type = isl_ast_expr_op_pdiv_r;
1128
1129protected:
1130  inline explicit ast_expr_op_pdiv_r(__isl_take isl_ast_expr *ptr);
1131
1132public:
1133  inline /* implicit */ ast_expr_op_pdiv_r();
1134  inline /* implicit */ ast_expr_op_pdiv_r(const ast_expr_op_pdiv_r &obj);
1135  inline ast_expr_op_pdiv_r &operator=(ast_expr_op_pdiv_r obj);
1136  inline isl::checked::ctx ctx() const;
1137
1138};
1139
1140// declarations for isl::ast_expr_op_select
1141
1142class ast_expr_op_select : public ast_expr_op {
1143  template <class T>
1144  friend boolean ast_expr_op::isa() const;
1145  friend ast_expr_op_select ast_expr_op::as<ast_expr_op_select>() const;
1146  static const auto type = isl_ast_expr_op_select;
1147
1148protected:
1149  inline explicit ast_expr_op_select(__isl_take isl_ast_expr *ptr);
1150
1151public:
1152  inline /* implicit */ ast_expr_op_select();
1153  inline /* implicit */ ast_expr_op_select(const ast_expr_op_select &obj);
1154  inline ast_expr_op_select &operator=(ast_expr_op_select obj);
1155  inline isl::checked::ctx ctx() const;
1156
1157};
1158
1159// declarations for isl::ast_expr_op_sub
1160
1161class ast_expr_op_sub : public ast_expr_op {
1162  template <class T>
1163  friend boolean ast_expr_op::isa() const;
1164  friend ast_expr_op_sub ast_expr_op::as<ast_expr_op_sub>() const;
1165  static const auto type = isl_ast_expr_op_sub;
1166
1167protected:
1168  inline explicit ast_expr_op_sub(__isl_take isl_ast_expr *ptr);
1169
1170public:
1171  inline /* implicit */ ast_expr_op_sub();
1172  inline /* implicit */ ast_expr_op_sub(const ast_expr_op_sub &obj);
1173  inline ast_expr_op_sub &operator=(ast_expr_op_sub obj);
1174  inline isl::checked::ctx ctx() const;
1175
1176};
1177
1178// declarations for isl::ast_expr_op_zdiv_r
1179
1180class ast_expr_op_zdiv_r : public ast_expr_op {
1181  template <class T>
1182  friend boolean ast_expr_op::isa() const;
1183  friend ast_expr_op_zdiv_r ast_expr_op::as<ast_expr_op_zdiv_r>() const;
1184  static const auto type = isl_ast_expr_op_zdiv_r;
1185
1186protected:
1187  inline explicit ast_expr_op_zdiv_r(__isl_take isl_ast_expr *ptr);
1188
1189public:
1190  inline /* implicit */ ast_expr_op_zdiv_r();
1191  inline /* implicit */ ast_expr_op_zdiv_r(const ast_expr_op_zdiv_r &obj);
1192  inline ast_expr_op_zdiv_r &operator=(ast_expr_op_zdiv_r obj);
1193  inline isl::checked::ctx ctx() const;
1194
1195};
1196
1197// declarations for isl::ast_node
1198inline ast_node manage(__isl_take isl_ast_node *ptr);
1199inline ast_node manage_copy(__isl_keep isl_ast_node *ptr);
1200
1201class ast_node {
1202  friend inline ast_node manage(__isl_take isl_ast_node *ptr);
1203  friend inline ast_node manage_copy(__isl_keep isl_ast_node *ptr);
1204
1205protected:
1206  isl_ast_node *ptr = nullptr;
1207
1208  inline explicit ast_node(__isl_take isl_ast_node *ptr);
1209
1210public:
1211  inline /* implicit */ ast_node();
1212  inline /* implicit */ ast_node(const ast_node &obj);
1213  inline ast_node &operator=(ast_node obj);
1214  inline ~ast_node();
1215  inline __isl_give isl_ast_node *copy() const &;
1216  inline __isl_give isl_ast_node *copy() && = delete;
1217  inline __isl_keep isl_ast_node *get() const;
1218  inline __isl_give isl_ast_node *release();
1219  inline bool is_null() const;
1220private:
1221  template <typename T,
1222          typename = typename std::enable_if<std::is_same<
1223                  const decltype(isl_ast_node_get_type(NULL)),
1224                  const T>::value>::type>
1225  inline boolean isa_type(T subtype) const;
1226public:
1227  template <class T> inline boolean isa() const;
1228  template <class T> inline T as() const;
1229  inline isl::checked::ctx ctx() const;
1230
1231  inline isl::checked::ast_node map_descendant_bottom_up(const std::function<isl::checked::ast_node(isl::checked::ast_node)> &fn) const;
1232  inline std::string to_C_str() const;
1233  inline isl::checked::ast_node_list to_list() const;
1234};
1235
1236// declarations for isl::ast_node_block
1237
1238class ast_node_block : public ast_node {
1239  template <class T>
1240  friend boolean ast_node::isa() const;
1241  friend ast_node_block ast_node::as<ast_node_block>() const;
1242  static const auto type = isl_ast_node_block;
1243
1244protected:
1245  inline explicit ast_node_block(__isl_take isl_ast_node *ptr);
1246
1247public:
1248  inline /* implicit */ ast_node_block();
1249  inline /* implicit */ ast_node_block(const ast_node_block &obj);
1250  inline explicit ast_node_block(isl::checked::ast_node_list list);
1251  inline ast_node_block &operator=(ast_node_block obj);
1252  inline isl::checked::ctx ctx() const;
1253
1254  inline isl::checked::ast_node_list children() const;
1255  inline isl::checked::ast_node_list get_children() const;
1256};
1257
1258// declarations for isl::ast_node_for
1259
1260class ast_node_for : public ast_node {
1261  template <class T>
1262  friend boolean ast_node::isa() const;
1263  friend ast_node_for ast_node::as<ast_node_for>() const;
1264  static const auto type = isl_ast_node_for;
1265
1266protected:
1267  inline explicit ast_node_for(__isl_take isl_ast_node *ptr);
1268
1269public:
1270  inline /* implicit */ ast_node_for();
1271  inline /* implicit */ ast_node_for(const ast_node_for &obj);
1272  inline ast_node_for &operator=(ast_node_for obj);
1273  inline isl::checked::ctx ctx() const;
1274
1275  inline isl::checked::ast_node body() const;
1276  inline isl::checked::ast_node get_body() const;
1277  inline isl::checked::ast_expr cond() const;
1278  inline isl::checked::ast_expr get_cond() const;
1279  inline isl::checked::ast_expr inc() const;
1280  inline isl::checked::ast_expr get_inc() const;
1281  inline isl::checked::ast_expr init() const;
1282  inline isl::checked::ast_expr get_init() const;
1283  inline boolean is_degenerate() const;
1284  inline isl::checked::ast_expr iterator() const;
1285  inline isl::checked::ast_expr get_iterator() const;
1286};
1287
1288// declarations for isl::ast_node_if
1289
1290class ast_node_if : public ast_node {
1291  template <class T>
1292  friend boolean ast_node::isa() const;
1293  friend ast_node_if ast_node::as<ast_node_if>() const;
1294  static const auto type = isl_ast_node_if;
1295
1296protected:
1297  inline explicit ast_node_if(__isl_take isl_ast_node *ptr);
1298
1299public:
1300  inline /* implicit */ ast_node_if();
1301  inline /* implicit */ ast_node_if(const ast_node_if &obj);
1302  inline ast_node_if &operator=(ast_node_if obj);
1303  inline isl::checked::ctx ctx() const;
1304
1305  inline isl::checked::ast_expr cond() const;
1306  inline isl::checked::ast_expr get_cond() const;
1307  inline isl::checked::ast_node else_node() const;
1308  inline isl::checked::ast_node get_else_node() const;
1309  inline boolean has_else_node() const;
1310  inline isl::checked::ast_node then_node() const;
1311  inline isl::checked::ast_node get_then_node() const;
1312};
1313
1314// declarations for isl::ast_node_list
1315inline ast_node_list manage(__isl_take isl_ast_node_list *ptr);
1316inline ast_node_list manage_copy(__isl_keep isl_ast_node_list *ptr);
1317
1318class ast_node_list {
1319  friend inline ast_node_list manage(__isl_take isl_ast_node_list *ptr);
1320  friend inline ast_node_list manage_copy(__isl_keep isl_ast_node_list *ptr);
1321
1322protected:
1323  isl_ast_node_list *ptr = nullptr;
1324
1325  inline explicit ast_node_list(__isl_take isl_ast_node_list *ptr);
1326
1327public:
1328  inline /* implicit */ ast_node_list();
1329  inline /* implicit */ ast_node_list(const ast_node_list &obj);
1330  inline explicit ast_node_list(isl::checked::ctx ctx, int n);
1331  inline explicit ast_node_list(isl::checked::ast_node el);
1332  inline ast_node_list &operator=(ast_node_list obj);
1333  inline ~ast_node_list();
1334  inline __isl_give isl_ast_node_list *copy() const &;
1335  inline __isl_give isl_ast_node_list *copy() && = delete;
1336  inline __isl_keep isl_ast_node_list *get() const;
1337  inline __isl_give isl_ast_node_list *release();
1338  inline bool is_null() const;
1339  inline isl::checked::ctx ctx() const;
1340
1341  inline isl::checked::ast_node_list add(isl::checked::ast_node el) const;
1342  inline isl::checked::ast_node at(int index) const;
1343  inline isl::checked::ast_node get_at(int index) const;
1344  inline isl::checked::ast_node_list clear() const;
1345  inline isl::checked::ast_node_list concat(isl::checked::ast_node_list list2) const;
1346  inline isl::checked::ast_node_list drop(unsigned int first, unsigned int n) const;
1347  inline stat foreach(const std::function<stat(isl::checked::ast_node)> &fn) const;
1348  inline stat foreach_scc(const std::function<boolean(isl::checked::ast_node, isl::checked::ast_node)> &follows, const std::function<stat(isl::checked::ast_node_list)> &fn) const;
1349  inline isl::checked::ast_node_list insert(unsigned int pos, isl::checked::ast_node el) const;
1350  inline isl::checked::ast_node_list set_at(int index, isl::checked::ast_node el) const;
1351  inline class size size() const;
1352};
1353
1354// declarations for isl::ast_node_mark
1355
1356class ast_node_mark : public ast_node {
1357  template <class T>
1358  friend boolean ast_node::isa() const;
1359  friend ast_node_mark ast_node::as<ast_node_mark>() const;
1360  static const auto type = isl_ast_node_mark;
1361
1362protected:
1363  inline explicit ast_node_mark(__isl_take isl_ast_node *ptr);
1364
1365public:
1366  inline /* implicit */ ast_node_mark();
1367  inline /* implicit */ ast_node_mark(const ast_node_mark &obj);
1368  inline ast_node_mark &operator=(ast_node_mark obj);
1369  inline isl::checked::ctx ctx() const;
1370
1371  inline isl::checked::id id() const;
1372  inline isl::checked::id get_id() const;
1373  inline isl::checked::ast_node node() const;
1374  inline isl::checked::ast_node get_node() const;
1375};
1376
1377// declarations for isl::ast_node_user
1378
1379class ast_node_user : public ast_node {
1380  template <class T>
1381  friend boolean ast_node::isa() const;
1382  friend ast_node_user ast_node::as<ast_node_user>() const;
1383  static const auto type = isl_ast_node_user;
1384
1385protected:
1386  inline explicit ast_node_user(__isl_take isl_ast_node *ptr);
1387
1388public:
1389  inline /* implicit */ ast_node_user();
1390  inline /* implicit */ ast_node_user(const ast_node_user &obj);
1391  inline explicit ast_node_user(isl::checked::ast_expr expr);
1392  inline ast_node_user &operator=(ast_node_user obj);
1393  inline isl::checked::ctx ctx() const;
1394
1395  inline isl::checked::ast_expr expr() const;
1396  inline isl::checked::ast_expr get_expr() const;
1397};
1398
1399// declarations for isl::basic_map
1400inline basic_map manage(__isl_take isl_basic_map *ptr);
1401inline basic_map manage_copy(__isl_keep isl_basic_map *ptr);
1402
1403class basic_map {
1404  friend inline basic_map manage(__isl_take isl_basic_map *ptr);
1405  friend inline basic_map manage_copy(__isl_keep isl_basic_map *ptr);
1406
1407protected:
1408  isl_basic_map *ptr = nullptr;
1409
1410  inline explicit basic_map(__isl_take isl_basic_map *ptr);
1411
1412public:
1413  inline /* implicit */ basic_map();
1414  inline /* implicit */ basic_map(const basic_map &obj);
1415  inline explicit basic_map(isl::checked::ctx ctx, const std::string &str);
1416  inline basic_map &operator=(basic_map obj);
1417  inline ~basic_map();
1418  inline __isl_give isl_basic_map *copy() const &;
1419  inline __isl_give isl_basic_map *copy() && = delete;
1420  inline __isl_keep isl_basic_map *get() const;
1421  inline __isl_give isl_basic_map *release();
1422  inline bool is_null() const;
1423  inline isl::checked::ctx ctx() const;
1424
1425  inline isl::checked::basic_map affine_hull() const;
1426  inline isl::checked::basic_map apply_domain(isl::checked::basic_map bmap2) const;
1427  inline isl::checked::map apply_domain(const isl::checked::map &map2) const;
1428  inline isl::checked::union_map apply_domain(const isl::checked::union_map &umap2) const;
1429  inline isl::checked::basic_map apply_range(isl::checked::basic_map bmap2) const;
1430  inline isl::checked::map apply_range(const isl::checked::map &map2) const;
1431  inline isl::checked::union_map apply_range(const isl::checked::union_map &umap2) const;
1432  inline isl::checked::map as_map() const;
1433  inline isl::checked::multi_union_pw_aff as_multi_union_pw_aff() const;
1434  inline isl::checked::pw_multi_aff as_pw_multi_aff() const;
1435  inline isl::checked::union_pw_multi_aff as_union_pw_multi_aff() const;
1436  inline isl::checked::set bind_domain(const isl::checked::multi_id &tuple) const;
1437  inline isl::checked::set bind_range(const isl::checked::multi_id &tuple) const;
1438  inline isl::checked::map coalesce() const;
1439  inline isl::checked::map complement() const;
1440  inline isl::checked::union_map compute_divs() const;
1441  inline isl::checked::map curry() const;
1442  inline isl::checked::basic_set deltas() const;
1443  inline isl::checked::basic_map detect_equalities() const;
1444  inline isl::checked::set domain() const;
1445  inline isl::checked::map domain_factor_domain() const;
1446  inline isl::checked::map domain_factor_range() const;
1447  inline isl::checked::union_map domain_map() const;
1448  inline isl::checked::union_pw_multi_aff domain_map_union_pw_multi_aff() const;
1449  inline isl::checked::map domain_product(const isl::checked::map &map2) const;
1450  inline isl::checked::union_map domain_product(const isl::checked::union_map &umap2) const;
1451  inline isl::checked::map domain_reverse() const;
1452  inline class size domain_tuple_dim() const;
1453  inline isl::checked::id domain_tuple_id() const;
1454  inline isl::checked::map drop_unused_params() const;
1455  inline isl::checked::map eq_at(const isl::checked::multi_pw_aff &mpa) const;
1456  inline isl::checked::union_map eq_at(const isl::checked::multi_union_pw_aff &mupa) const;
1457  inline boolean every_map(const std::function<boolean(isl::checked::map)> &test) const;
1458  inline isl::checked::map extract_map(const isl::checked::space &space) const;
1459  inline isl::checked::map factor_domain() const;
1460  inline isl::checked::map factor_range() const;
1461  inline isl::checked::map fixed_power(const isl::checked::val &exp) const;
1462  inline isl::checked::map fixed_power(long exp) const;
1463  inline isl::checked::basic_map flatten() const;
1464  inline isl::checked::basic_map flatten_domain() const;
1465  inline isl::checked::basic_map flatten_range() const;
1466  inline stat foreach_basic_map(const std::function<stat(isl::checked::basic_map)> &fn) const;
1467  inline stat foreach_map(const std::function<stat(isl::checked::map)> &fn) const;
1468  inline isl::checked::basic_map gist(isl::checked::basic_map context) const;
1469  inline isl::checked::map gist(const isl::checked::map &context) const;
1470  inline isl::checked::union_map gist(const isl::checked::union_map &context) const;
1471  inline isl::checked::map gist_domain(const isl::checked::set &context) const;
1472  inline isl::checked::union_map gist_domain(const isl::checked::union_set &uset) const;
1473  inline isl::checked::map gist_params(const isl::checked::set &context) const;
1474  inline isl::checked::union_map gist_range(const isl::checked::union_set &uset) const;
1475  inline boolean has_domain_tuple_id() const;
1476  inline boolean has_range_tuple_id() const;
1477  inline isl::checked::basic_map intersect(isl::checked::basic_map bmap2) const;
1478  inline isl::checked::map intersect(const isl::checked::map &map2) const;
1479  inline isl::checked::union_map intersect(const isl::checked::union_map &umap2) const;
1480  inline isl::checked::basic_map intersect_domain(isl::checked::basic_set bset) const;
1481  inline isl::checked::map intersect_domain(const isl::checked::set &set) const;
1482  inline isl::checked::union_map intersect_domain(const isl::checked::space &space) const;
1483  inline isl::checked::union_map intersect_domain(const isl::checked::union_set &uset) const;
1484  inline isl::checked::basic_map intersect_domain(const isl::checked::point &bset) const;
1485  inline isl::checked::map intersect_domain_factor_domain(const isl::checked::map &factor) const;
1486  inline isl::checked::union_map intersect_domain_factor_domain(const isl::checked::union_map &factor) const;
1487  inline isl::checked::map intersect_domain_factor_range(const isl::checked::map &factor) const;
1488  inline isl::checked::union_map intersect_domain_factor_range(const isl::checked::union_map &factor) const;
1489  inline isl::checked::map intersect_domain_wrapped_domain(const isl::checked::set &domain) const;
1490  inline isl::checked::union_map intersect_domain_wrapped_domain(const isl::checked::union_set &domain) const;
1491  inline isl::checked::map intersect_params(const isl::checked::set &params) const;
1492  inline isl::checked::basic_map intersect_range(isl::checked::basic_set bset) const;
1493  inline isl::checked::map intersect_range(const isl::checked::set &set) const;
1494  inline isl::checked::union_map intersect_range(const isl::checked::space &space) const;
1495  inline isl::checked::union_map intersect_range(const isl::checked::union_set &uset) const;
1496  inline isl::checked::basic_map intersect_range(const isl::checked::point &bset) const;
1497  inline isl::checked::map intersect_range_factor_domain(const isl::checked::map &factor) const;
1498  inline isl::checked::union_map intersect_range_factor_domain(const isl::checked::union_map &factor) const;
1499  inline isl::checked::map intersect_range_factor_range(const isl::checked::map &factor) const;
1500  inline isl::checked::union_map intersect_range_factor_range(const isl::checked::union_map &factor) const;
1501  inline isl::checked::map intersect_range_wrapped_domain(const isl::checked::set &domain) const;
1502  inline isl::checked::union_map intersect_range_wrapped_domain(const isl::checked::union_set &domain) const;
1503  inline boolean is_bijective() const;
1504  inline boolean is_disjoint(const isl::checked::map &map2) const;
1505  inline boolean is_disjoint(const isl::checked::union_map &umap2) const;
1506  inline boolean is_empty() const;
1507  inline boolean is_equal(const isl::checked::basic_map &bmap2) const;
1508  inline boolean is_equal(const isl::checked::map &map2) const;
1509  inline boolean is_equal(const isl::checked::union_map &umap2) const;
1510  inline boolean is_injective() const;
1511  inline boolean is_single_valued() const;
1512  inline boolean is_strict_subset(const isl::checked::map &map2) const;
1513  inline boolean is_strict_subset(const isl::checked::union_map &umap2) const;
1514  inline boolean is_subset(const isl::checked::basic_map &bmap2) const;
1515  inline boolean is_subset(const isl::checked::map &map2) const;
1516  inline boolean is_subset(const isl::checked::union_map &umap2) const;
1517  inline boolean isa_map() const;
1518  inline isl::checked::map lex_ge_at(const isl::checked::multi_pw_aff &mpa) const;
1519  inline isl::checked::map lex_gt_at(const isl::checked::multi_pw_aff &mpa) const;
1520  inline isl::checked::map lex_le_at(const isl::checked::multi_pw_aff &mpa) const;
1521  inline isl::checked::map lex_lt_at(const isl::checked::multi_pw_aff &mpa) const;
1522  inline isl::checked::map lexmax() const;
1523  inline isl::checked::pw_multi_aff lexmax_pw_multi_aff() const;
1524  inline isl::checked::map lexmin() const;
1525  inline isl::checked::pw_multi_aff lexmin_pw_multi_aff() const;
1526  inline isl::checked::map lower_bound(const isl::checked::multi_pw_aff &lower) const;
1527  inline isl::checked::map_list map_list() const;
1528  inline isl::checked::multi_pw_aff max_multi_pw_aff() const;
1529  inline isl::checked::multi_pw_aff min_multi_pw_aff() const;
1530  inline class size n_basic_map() const;
1531  inline isl::checked::set params() const;
1532  inline isl::checked::basic_map polyhedral_hull() const;
1533  inline isl::checked::map preimage_domain(const isl::checked::multi_aff &ma) const;
1534  inline isl::checked::map preimage_domain(const isl::checked::multi_pw_aff &mpa) const;
1535  inline isl::checked::map preimage_domain(const isl::checked::pw_multi_aff &pma) const;
1536  inline isl::checked::union_map preimage_domain(const isl::checked::union_pw_multi_aff &upma) const;
1537  inline isl::checked::map preimage_range(const isl::checked::multi_aff &ma) const;
1538  inline isl::checked::map preimage_range(const isl::checked::pw_multi_aff &pma) const;
1539  inline isl::checked::union_map preimage_range(const isl::checked::union_pw_multi_aff &upma) const;
1540  inline isl::checked::map product(const isl::checked::map &map2) const;
1541  inline isl::checked::union_map product(const isl::checked::union_map &umap2) const;
1542  inline isl::checked::map project_out_all_params() const;
1543  inline isl::checked::map project_out_param(const isl::checked::id &id) const;
1544  inline isl::checked::map project_out_param(const std::string &id) const;
1545  inline isl::checked::map project_out_param(const isl::checked::id_list &list) const;
1546  inline isl::checked::set range() const;
1547  inline isl::checked::map range_factor_domain() const;
1548  inline isl::checked::map range_factor_range() const;
1549  inline isl::checked::fixed_box range_lattice_tile() const;
1550  inline isl::checked::union_map range_map() const;
1551  inline isl::checked::map range_product(const isl::checked::map &map2) const;
1552  inline isl::checked::union_map range_product(const isl::checked::union_map &umap2) const;
1553  inline isl::checked::map range_reverse() const;
1554  inline isl::checked::fixed_box range_simple_fixed_box_hull() const;
1555  inline class size range_tuple_dim() const;
1556  inline isl::checked::id range_tuple_id() const;
1557  inline isl::checked::basic_map reverse() const;
1558  inline isl::checked::basic_map sample() const;
1559  inline isl::checked::map set_domain_tuple(const isl::checked::id &id) const;
1560  inline isl::checked::map set_domain_tuple(const std::string &id) const;
1561  inline isl::checked::map set_range_tuple(const isl::checked::id &id) const;
1562  inline isl::checked::map set_range_tuple(const std::string &id) const;
1563  inline isl::checked::space space() const;
1564  inline isl::checked::map subtract(const isl::checked::map &map2) const;
1565  inline isl::checked::union_map subtract(const isl::checked::union_map &umap2) const;
1566  inline isl::checked::union_map subtract_domain(const isl::checked::union_set &dom) const;
1567  inline isl::checked::union_map subtract_range(const isl::checked::union_set &dom) const;
1568  inline isl::checked::map_list to_list() const;
1569  inline isl::checked::union_map to_union_map() const;
1570  inline isl::checked::map uncurry() const;
1571  inline isl::checked::map unite(isl::checked::basic_map bmap2) const;
1572  inline isl::checked::map unite(const isl::checked::map &map2) const;
1573  inline isl::checked::union_map unite(const isl::checked::union_map &umap2) const;
1574  inline isl::checked::basic_map unshifted_simple_hull() const;
1575  inline isl::checked::map upper_bound(const isl::checked::multi_pw_aff &upper) const;
1576  inline isl::checked::set wrap() const;
1577  inline isl::checked::map zip() const;
1578};
1579
1580// declarations for isl::basic_set
1581inline basic_set manage(__isl_take isl_basic_set *ptr);
1582inline basic_set manage_copy(__isl_keep isl_basic_set *ptr);
1583
1584class basic_set {
1585  friend inline basic_set manage(__isl_take isl_basic_set *ptr);
1586  friend inline basic_set manage_copy(__isl_keep isl_basic_set *ptr);
1587
1588protected:
1589  isl_basic_set *ptr = nullptr;
1590
1591  inline explicit basic_set(__isl_take isl_basic_set *ptr);
1592
1593public:
1594  inline /* implicit */ basic_set();
1595  inline /* implicit */ basic_set(const basic_set &obj);
1596  inline /* implicit */ basic_set(isl::checked::point pnt);
1597  inline explicit basic_set(isl::checked::ctx ctx, const std::string &str);
1598  inline basic_set &operator=(basic_set obj);
1599  inline ~basic_set();
1600  inline __isl_give isl_basic_set *copy() const &;
1601  inline __isl_give isl_basic_set *copy() && = delete;
1602  inline __isl_keep isl_basic_set *get() const;
1603  inline __isl_give isl_basic_set *release();
1604  inline bool is_null() const;
1605  inline isl::checked::ctx ctx() const;
1606
1607  inline isl::checked::basic_set affine_hull() const;
1608  inline isl::checked::basic_set apply(isl::checked::basic_map bmap) const;
1609  inline isl::checked::set apply(const isl::checked::map &map) const;
1610  inline isl::checked::union_set apply(const isl::checked::union_map &umap) const;
1611  inline isl::checked::pw_multi_aff as_pw_multi_aff() const;
1612  inline isl::checked::set as_set() const;
1613  inline isl::checked::set bind(const isl::checked::multi_id &tuple) const;
1614  inline isl::checked::set coalesce() const;
1615  inline isl::checked::set complement() const;
1616  inline isl::checked::union_set compute_divs() const;
1617  inline isl::checked::basic_set detect_equalities() const;
1618  inline isl::checked::val dim_max_val(int pos) const;
1619  inline isl::checked::val dim_min_val(int pos) const;
1620  inline isl::checked::set drop_unused_params() const;
1621  inline boolean every_set(const std::function<boolean(isl::checked::set)> &test) const;
1622  inline isl::checked::set extract_set(const isl::checked::space &space) const;
1623  inline isl::checked::basic_set flatten() const;
1624  inline stat foreach_basic_set(const std::function<stat(isl::checked::basic_set)> &fn) const;
1625  inline stat foreach_point(const std::function<stat(isl::checked::point)> &fn) const;
1626  inline stat foreach_set(const std::function<stat(isl::checked::set)> &fn) const;
1627  inline isl::checked::basic_set gist(isl::checked::basic_set context) const;
1628  inline isl::checked::set gist(const isl::checked::set &context) const;
1629  inline isl::checked::union_set gist(const isl::checked::union_set &context) const;
1630  inline isl::checked::basic_set gist(const isl::checked::point &context) const;
1631  inline isl::checked::set gist_params(const isl::checked::set &context) const;
1632  inline isl::checked::map identity() const;
1633  inline isl::checked::pw_aff indicator_function() const;
1634  inline isl::checked::map insert_domain(const isl::checked::space &domain) const;
1635  inline isl::checked::basic_set intersect(isl::checked::basic_set bset2) const;
1636  inline isl::checked::set intersect(const isl::checked::set &set2) const;
1637  inline isl::checked::union_set intersect(const isl::checked::union_set &uset2) const;
1638  inline isl::checked::basic_set intersect(const isl::checked::point &bset2) const;
1639  inline isl::checked::basic_set intersect_params(isl::checked::basic_set bset2) const;
1640  inline isl::checked::set intersect_params(const isl::checked::set &params) const;
1641  inline isl::checked::basic_set intersect_params(const isl::checked::point &bset2) const;
1642  inline boolean involves_locals() const;
1643  inline boolean is_disjoint(const isl::checked::set &set2) const;
1644  inline boolean is_disjoint(const isl::checked::union_set &uset2) const;
1645  inline boolean is_empty() const;
1646  inline boolean is_equal(const isl::checked::basic_set &bset2) const;
1647  inline boolean is_equal(const isl::checked::set &set2) const;
1648  inline boolean is_equal(const isl::checked::union_set &uset2) const;
1649  inline boolean is_equal(const isl::checked::point &bset2) const;
1650  inline boolean is_singleton() const;
1651  inline boolean is_strict_subset(const isl::checked::set &set2) const;
1652  inline boolean is_strict_subset(const isl::checked::union_set &uset2) const;
1653  inline boolean is_subset(const isl::checked::basic_set &bset2) const;
1654  inline boolean is_subset(const isl::checked::set &set2) const;
1655  inline boolean is_subset(const isl::checked::union_set &uset2) const;
1656  inline boolean is_subset(const isl::checked::point &bset2) const;
1657  inline boolean is_wrapping() const;
1658  inline boolean isa_set() const;
1659  inline isl::checked::fixed_box lattice_tile() const;
1660  inline isl::checked::set lexmax() const;
1661  inline isl::checked::pw_multi_aff lexmax_pw_multi_aff() const;
1662  inline isl::checked::set lexmin() const;
1663  inline isl::checked::pw_multi_aff lexmin_pw_multi_aff() const;
1664  inline isl::checked::set lower_bound(const isl::checked::multi_pw_aff &lower) const;
1665  inline isl::checked::set lower_bound(const isl::checked::multi_val &lower) const;
1666  inline isl::checked::multi_pw_aff max_multi_pw_aff() const;
1667  inline isl::checked::val max_val(const isl::checked::aff &obj) const;
1668  inline isl::checked::multi_pw_aff min_multi_pw_aff() const;
1669  inline isl::checked::val min_val(const isl::checked::aff &obj) const;
1670  inline class size n_basic_set() const;
1671  inline isl::checked::pw_aff param_pw_aff_on_domain(const isl::checked::id &id) const;
1672  inline isl::checked::pw_aff param_pw_aff_on_domain(const std::string &id) const;
1673  inline isl::checked::basic_set params() const;
1674  inline isl::checked::multi_val plain_multi_val_if_fixed() const;
1675  inline isl::checked::basic_set polyhedral_hull() const;
1676  inline isl::checked::set preimage(const isl::checked::multi_aff &ma) const;
1677  inline isl::checked::set preimage(const isl::checked::multi_pw_aff &mpa) const;
1678  inline isl::checked::set preimage(const isl::checked::pw_multi_aff &pma) const;
1679  inline isl::checked::union_set preimage(const isl::checked::union_pw_multi_aff &upma) const;
1680  inline isl::checked::set product(const isl::checked::set &set2) const;
1681  inline isl::checked::set project_out_all_params() const;
1682  inline isl::checked::set project_out_param(const isl::checked::id &id) const;
1683  inline isl::checked::set project_out_param(const std::string &id) const;
1684  inline isl::checked::set project_out_param(const isl::checked::id_list &list) const;
1685  inline isl::checked::pw_aff pw_aff_on_domain(const isl::checked::val &v) const;
1686  inline isl::checked::pw_aff pw_aff_on_domain(long v) const;
1687  inline isl::checked::pw_multi_aff pw_multi_aff_on_domain(const isl::checked::multi_val &mv) const;
1688  inline isl::checked::basic_set sample() const;
1689  inline isl::checked::point sample_point() const;
1690  inline isl::checked::set_list set_list() const;
1691  inline isl::checked::fixed_box simple_fixed_box_hull() const;
1692  inline isl::checked::space space() const;
1693  inline isl::checked::val stride(int pos) const;
1694  inline isl::checked::set subtract(const isl::checked::set &set2) const;
1695  inline isl::checked::union_set subtract(const isl::checked::union_set &uset2) const;
1696  inline isl::checked::set_list to_list() const;
1697  inline isl::checked::set to_set() const;
1698  inline isl::checked::union_set to_union_set() const;
1699  inline isl::checked::map translation() const;
1700  inline class size tuple_dim() const;
1701  inline isl::checked::set unbind_params(const isl::checked::multi_id &tuple) const;
1702  inline isl::checked::map unbind_params_insert_domain(const isl::checked::multi_id &domain) const;
1703  inline isl::checked::set unite(isl::checked::basic_set bset2) const;
1704  inline isl::checked::set unite(const isl::checked::set &set2) const;
1705  inline isl::checked::union_set unite(const isl::checked::union_set &uset2) const;
1706  inline isl::checked::set unite(const isl::checked::point &bset2) const;
1707  inline isl::checked::basic_set unshifted_simple_hull() const;
1708  inline isl::checked::map unwrap() const;
1709  inline isl::checked::set upper_bound(const isl::checked::multi_pw_aff &upper) const;
1710  inline isl::checked::set upper_bound(const isl::checked::multi_val &upper) const;
1711  inline isl::checked::set wrapped_reverse() const;
1712};
1713
1714// declarations for isl::fixed_box
1715inline fixed_box manage(__isl_take isl_fixed_box *ptr);
1716inline fixed_box manage_copy(__isl_keep isl_fixed_box *ptr);
1717
1718class fixed_box {
1719  friend inline fixed_box manage(__isl_take isl_fixed_box *ptr);
1720  friend inline fixed_box manage_copy(__isl_keep isl_fixed_box *ptr);
1721
1722protected:
1723  isl_fixed_box *ptr = nullptr;
1724
1725  inline explicit fixed_box(__isl_take isl_fixed_box *ptr);
1726
1727public:
1728  inline /* implicit */ fixed_box();
1729  inline /* implicit */ fixed_box(const fixed_box &obj);
1730  inline explicit fixed_box(isl::checked::ctx ctx, const std::string &str);
1731  inline fixed_box &operator=(fixed_box obj);
1732  inline ~fixed_box();
1733  inline __isl_give isl_fixed_box *copy() const &;
1734  inline __isl_give isl_fixed_box *copy() && = delete;
1735  inline __isl_keep isl_fixed_box *get() const;
1736  inline __isl_give isl_fixed_box *release();
1737  inline bool is_null() const;
1738  inline isl::checked::ctx ctx() const;
1739
1740  inline boolean is_valid() const;
1741  inline isl::checked::multi_aff offset() const;
1742  inline isl::checked::multi_aff get_offset() const;
1743  inline isl::checked::multi_val size() const;
1744  inline isl::checked::multi_val get_size() const;
1745  inline isl::checked::space space() const;
1746  inline isl::checked::space get_space() const;
1747};
1748
1749// declarations for isl::id
1750inline id manage(__isl_take isl_id *ptr);
1751inline id manage_copy(__isl_keep isl_id *ptr);
1752
1753class id {
1754  friend inline id manage(__isl_take isl_id *ptr);
1755  friend inline id manage_copy(__isl_keep isl_id *ptr);
1756
1757protected:
1758  isl_id *ptr = nullptr;
1759
1760  inline explicit id(__isl_take isl_id *ptr);
1761
1762public:
1763  inline /* implicit */ id();
1764  inline /* implicit */ id(const id &obj);
1765  inline explicit id(isl::checked::ctx ctx, const std::string &str);
1766  inline id &operator=(id obj);
1767  inline ~id();
1768  inline __isl_give isl_id *copy() const &;
1769  inline __isl_give isl_id *copy() && = delete;
1770  inline __isl_keep isl_id *get() const;
1771  inline __isl_give isl_id *release();
1772  inline bool is_null() const;
1773  inline isl::checked::ctx ctx() const;
1774
1775  inline std::string name() const;
1776  inline std::string get_name() const;
1777  inline isl::checked::id_list to_list() const;
1778
1779#if __cplusplus >= 201703L
1780  inline explicit id(isl::checked::ctx ctx, const std::string &str, const std::any &any);
1781  template <class T>
1782  std::optional<T> try_user() const;
1783  template <class T>
1784  T user() const;
1785#endif
1786};
1787
1788// declarations for isl::id_list
1789inline id_list manage(__isl_take isl_id_list *ptr);
1790inline id_list manage_copy(__isl_keep isl_id_list *ptr);
1791
1792class id_list {
1793  friend inline id_list manage(__isl_take isl_id_list *ptr);
1794  friend inline id_list manage_copy(__isl_keep isl_id_list *ptr);
1795
1796protected:
1797  isl_id_list *ptr = nullptr;
1798
1799  inline explicit id_list(__isl_take isl_id_list *ptr);
1800
1801public:
1802  inline /* implicit */ id_list();
1803  inline /* implicit */ id_list(const id_list &obj);
1804  inline explicit id_list(isl::checked::ctx ctx, int n);
1805  inline explicit id_list(isl::checked::id el);
1806  inline explicit id_list(isl::checked::ctx ctx, const std::string &str);
1807  inline id_list &operator=(id_list obj);
1808  inline ~id_list();
1809  inline __isl_give isl_id_list *copy() const &;
1810  inline __isl_give isl_id_list *copy() && = delete;
1811  inline __isl_keep isl_id_list *get() const;
1812  inline __isl_give isl_id_list *release();
1813  inline bool is_null() const;
1814  inline isl::checked::ctx ctx() const;
1815
1816  inline isl::checked::id_list add(isl::checked::id el) const;
1817  inline isl::checked::id_list add(const std::string &el) const;
1818  inline isl::checked::id at(int index) const;
1819  inline isl::checked::id get_at(int index) const;
1820  inline isl::checked::id_list clear() const;
1821  inline isl::checked::id_list concat(isl::checked::id_list list2) const;
1822  inline isl::checked::id_list drop(unsigned int first, unsigned int n) const;
1823  inline stat foreach(const std::function<stat(isl::checked::id)> &fn) const;
1824  inline stat foreach_scc(const std::function<boolean(isl::checked::id, isl::checked::id)> &follows, const std::function<stat(isl::checked::id_list)> &fn) const;
1825  inline isl::checked::id_list insert(unsigned int pos, isl::checked::id el) const;
1826  inline isl::checked::id_list insert(unsigned int pos, const std::string &el) const;
1827  inline isl::checked::id_list set_at(int index, isl::checked::id el) const;
1828  inline isl::checked::id_list set_at(int index, const std::string &el) const;
1829  inline class size size() const;
1830};
1831
1832// declarations for isl::id_to_ast_expr
1833inline id_to_ast_expr manage(__isl_take isl_id_to_ast_expr *ptr);
1834inline id_to_ast_expr manage_copy(__isl_keep isl_id_to_ast_expr *ptr);
1835
1836class id_to_ast_expr {
1837  friend inline id_to_ast_expr manage(__isl_take isl_id_to_ast_expr *ptr);
1838  friend inline id_to_ast_expr manage_copy(__isl_keep isl_id_to_ast_expr *ptr);
1839
1840protected:
1841  isl_id_to_ast_expr *ptr = nullptr;
1842
1843  inline explicit id_to_ast_expr(__isl_take isl_id_to_ast_expr *ptr);
1844
1845public:
1846  inline /* implicit */ id_to_ast_expr();
1847  inline /* implicit */ id_to_ast_expr(const id_to_ast_expr &obj);
1848  inline explicit id_to_ast_expr(isl::checked::ctx ctx, int min_size);
1849  inline explicit id_to_ast_expr(isl::checked::ctx ctx, const std::string &str);
1850  inline id_to_ast_expr &operator=(id_to_ast_expr obj);
1851  inline ~id_to_ast_expr();
1852  inline __isl_give isl_id_to_ast_expr *copy() const &;
1853  inline __isl_give isl_id_to_ast_expr *copy() && = delete;
1854  inline __isl_keep isl_id_to_ast_expr *get() const;
1855  inline __isl_give isl_id_to_ast_expr *release();
1856  inline bool is_null() const;
1857  inline isl::checked::ctx ctx() const;
1858
1859  inline boolean is_equal(const isl::checked::id_to_ast_expr &hmap2) const;
1860  inline isl::checked::id_to_ast_expr set(isl::checked::id key, isl::checked::ast_expr val) const;
1861  inline isl::checked::id_to_ast_expr set(const std::string &key, const isl::checked::ast_expr &val) const;
1862};
1863
1864// declarations for isl::id_to_id
1865inline id_to_id manage(__isl_take isl_id_to_id *ptr);
1866inline id_to_id manage_copy(__isl_keep isl_id_to_id *ptr);
1867
1868class id_to_id {
1869  friend inline id_to_id manage(__isl_take isl_id_to_id *ptr);
1870  friend inline id_to_id manage_copy(__isl_keep isl_id_to_id *ptr);
1871
1872protected:
1873  isl_id_to_id *ptr = nullptr;
1874
1875  inline explicit id_to_id(__isl_take isl_id_to_id *ptr);
1876
1877public:
1878  inline /* implicit */ id_to_id();
1879  inline /* implicit */ id_to_id(const id_to_id &obj);
1880  inline explicit id_to_id(isl::checked::ctx ctx, int min_size);
1881  inline explicit id_to_id(isl::checked::ctx ctx, const std::string &str);
1882  inline id_to_id &operator=(id_to_id obj);
1883  inline ~id_to_id();
1884  inline __isl_give isl_id_to_id *copy() const &;
1885  inline __isl_give isl_id_to_id *copy() && = delete;
1886  inline __isl_keep isl_id_to_id *get() const;
1887  inline __isl_give isl_id_to_id *release();
1888  inline bool is_null() const;
1889  inline isl::checked::ctx ctx() const;
1890
1891  inline boolean is_equal(const isl::checked::id_to_id &hmap2) const;
1892  inline isl::checked::id_to_id set(isl::checked::id key, isl::checked::id val) const;
1893  inline isl::checked::id_to_id set(const isl::checked::id &key, const std::string &val) const;
1894  inline isl::checked::id_to_id set(const std::string &key, const isl::checked::id &val) const;
1895  inline isl::checked::id_to_id set(const std::string &key, const std::string &val) const;
1896};
1897
1898// declarations for isl::map
1899inline map manage(__isl_take isl_map *ptr);
1900inline map manage_copy(__isl_keep isl_map *ptr);
1901
1902class map {
1903  friend inline map manage(__isl_take isl_map *ptr);
1904  friend inline map manage_copy(__isl_keep isl_map *ptr);
1905
1906protected:
1907  isl_map *ptr = nullptr;
1908
1909  inline explicit map(__isl_take isl_map *ptr);
1910
1911public:
1912  inline /* implicit */ map();
1913  inline /* implicit */ map(const map &obj);
1914  inline /* implicit */ map(isl::checked::basic_map bmap);
1915  inline explicit map(isl::checked::ctx ctx, const std::string &str);
1916  inline map &operator=(map obj);
1917  inline ~map();
1918  inline __isl_give isl_map *copy() const &;
1919  inline __isl_give isl_map *copy() && = delete;
1920  inline __isl_keep isl_map *get() const;
1921  inline __isl_give isl_map *release();
1922  inline bool is_null() const;
1923  inline isl::checked::ctx ctx() const;
1924
1925  inline isl::checked::basic_map affine_hull() const;
1926  inline isl::checked::map apply_domain(isl::checked::map map2) const;
1927  inline isl::checked::union_map apply_domain(const isl::checked::union_map &umap2) const;
1928  inline isl::checked::map apply_domain(const isl::checked::basic_map &map2) const;
1929  inline isl::checked::map apply_range(isl::checked::map map2) const;
1930  inline isl::checked::union_map apply_range(const isl::checked::union_map &umap2) const;
1931  inline isl::checked::map apply_range(const isl::checked::basic_map &map2) const;
1932  inline isl::checked::map as_map() const;
1933  inline isl::checked::multi_union_pw_aff as_multi_union_pw_aff() const;
1934  inline isl::checked::pw_multi_aff as_pw_multi_aff() const;
1935  inline isl::checked::union_pw_multi_aff as_union_pw_multi_aff() const;
1936  inline isl::checked::set bind_domain(isl::checked::multi_id tuple) const;
1937  inline isl::checked::set bind_range(isl::checked::multi_id tuple) const;
1938  inline isl::checked::map coalesce() const;
1939  inline isl::checked::map complement() const;
1940  inline isl::checked::union_map compute_divs() const;
1941  inline isl::checked::map curry() const;
1942  inline isl::checked::set deltas() const;
1943  inline isl::checked::map detect_equalities() const;
1944  inline isl::checked::set domain() const;
1945  inline isl::checked::map domain_factor_domain() const;
1946  inline isl::checked::map domain_factor_range() const;
1947  inline isl::checked::union_map domain_map() const;
1948  inline isl::checked::union_pw_multi_aff domain_map_union_pw_multi_aff() const;
1949  inline isl::checked::map domain_product(isl::checked::map map2) const;
1950  inline isl::checked::union_map domain_product(const isl::checked::union_map &umap2) const;
1951  inline isl::checked::map domain_product(const isl::checked::basic_map &map2) const;
1952  inline isl::checked::map domain_reverse() const;
1953  inline class size domain_tuple_dim() const;
1954  inline isl::checked::id domain_tuple_id() const;
1955  inline isl::checked::id get_domain_tuple_id() const;
1956  inline isl::checked::map drop_unused_params() const;
1957  static inline isl::checked::map empty(isl::checked::space space);
1958  inline isl::checked::map eq_at(isl::checked::multi_pw_aff mpa) const;
1959  inline isl::checked::union_map eq_at(const isl::checked::multi_union_pw_aff &mupa) const;
1960  inline isl::checked::map eq_at(const isl::checked::aff &mpa) const;
1961  inline isl::checked::map eq_at(const isl::checked::multi_aff &mpa) const;
1962  inline isl::checked::map eq_at(const isl::checked::pw_aff &mpa) const;
1963  inline isl::checked::map eq_at(const isl::checked::pw_multi_aff &mpa) const;
1964  inline boolean every_map(const std::function<boolean(isl::checked::map)> &test) const;
1965  inline isl::checked::map extract_map(const isl::checked::space &space) const;
1966  inline isl::checked::map factor_domain() const;
1967  inline isl::checked::map factor_range() const;
1968  inline isl::checked::map fixed_power(isl::checked::val exp) const;
1969  inline isl::checked::map fixed_power(long exp) const;
1970  inline isl::checked::map flatten() const;
1971  inline isl::checked::map flatten_domain() const;
1972  inline isl::checked::map flatten_range() const;
1973  inline stat foreach_basic_map(const std::function<stat(isl::checked::basic_map)> &fn) const;
1974  inline stat foreach_map(const std::function<stat(isl::checked::map)> &fn) const;
1975  inline isl::checked::map gist(isl::checked::map context) const;
1976  inline isl::checked::union_map gist(const isl::checked::union_map &context) const;
1977  inline isl::checked::map gist(const isl::checked::basic_map &context) const;
1978  inline isl::checked::map gist_domain(isl::checked::set context) const;
1979  inline isl::checked::union_map gist_domain(const isl::checked::union_set &uset) const;
1980  inline isl::checked::map gist_domain(const isl::checked::basic_set &context) const;
1981  inline isl::checked::map gist_domain(const isl::checked::point &context) const;
1982  inline isl::checked::map gist_params(isl::checked::set context) const;
1983  inline isl::checked::union_map gist_range(const isl::checked::union_set &uset) const;
1984  inline boolean has_domain_tuple_id() const;
1985  inline boolean has_range_tuple_id() const;
1986  inline isl::checked::map intersect(isl::checked::map map2) const;
1987  inline isl::checked::union_map intersect(const isl::checked::union_map &umap2) const;
1988  inline isl::checked::map intersect(const isl::checked::basic_map &map2) const;
1989  inline isl::checked::map intersect_domain(isl::checked::set set) const;
1990  inline isl::checked::union_map intersect_domain(const isl::checked::space &space) const;
1991  inline isl::checked::union_map intersect_domain(const isl::checked::union_set &uset) const;
1992  inline isl::checked::map intersect_domain(const isl::checked::basic_set &set) const;
1993  inline isl::checked::map intersect_domain(const isl::checked::point &set) const;
1994  inline isl::checked::map intersect_domain_factor_domain(isl::checked::map factor) const;
1995  inline isl::checked::union_map intersect_domain_factor_domain(const isl::checked::union_map &factor) const;
1996  inline isl::checked::map intersect_domain_factor_domain(const isl::checked::basic_map &factor) const;
1997  inline isl::checked::map intersect_domain_factor_range(isl::checked::map factor) const;
1998  inline isl::checked::union_map intersect_domain_factor_range(const isl::checked::union_map &factor) const;
1999  inline isl::checked::map intersect_domain_factor_range(const isl::checked::basic_map &factor) const;
2000  inline isl::checked::map intersect_domain_wrapped_domain(isl::checked::set domain) const;
2001  inline isl::checked::union_map intersect_domain_wrapped_domain(const isl::checked::union_set &domain) const;
2002  inline isl::checked::map intersect_domain_wrapped_domain(const isl::checked::basic_set &domain) const;
2003  inline isl::checked::map intersect_domain_wrapped_domain(const isl::checked::point &domain) const;
2004  inline isl::checked::map intersect_params(isl::checked::set params) const;
2005  inline isl::checked::map intersect_range(isl::checked::set set) const;
2006  inline isl::checked::union_map intersect_range(const isl::checked::space &space) const;
2007  inline isl::checked::union_map intersect_range(const isl::checked::union_set &uset) const;
2008  inline isl::checked::map intersect_range(const isl::checked::basic_set &set) const;
2009  inline isl::checked::map intersect_range(const isl::checked::point &set) const;
2010  inline isl::checked::map intersect_range_factor_domain(isl::checked::map factor) const;
2011  inline isl::checked::union_map intersect_range_factor_domain(const isl::checked::union_map &factor) const;
2012  inline isl::checked::map intersect_range_factor_domain(const isl::checked::basic_map &factor) const;
2013  inline isl::checked::map intersect_range_factor_range(isl::checked::map factor) const;
2014  inline isl::checked::union_map intersect_range_factor_range(const isl::checked::union_map &factor) const;
2015  inline isl::checked::map intersect_range_factor_range(const isl::checked::basic_map &factor) const;
2016  inline isl::checked::map intersect_range_wrapped_domain(isl::checked::set domain) const;
2017  inline isl::checked::union_map intersect_range_wrapped_domain(const isl::checked::union_set &domain) const;
2018  inline isl::checked::map intersect_range_wrapped_domain(const isl::checked::basic_set &domain) const;
2019  inline isl::checked::map intersect_range_wrapped_domain(const isl::checked::point &domain) const;
2020  inline boolean is_bijective() const;
2021  inline boolean is_disjoint(const isl::checked::map &map2) const;
2022  inline boolean is_disjoint(const isl::checked::union_map &umap2) const;
2023  inline boolean is_disjoint(const isl::checked::basic_map &map2) const;
2024  inline boolean is_empty() const;
2025  inline boolean is_equal(const isl::checked::map &map2) const;
2026  inline boolean is_equal(const isl::checked::union_map &umap2) const;
2027  inline boolean is_equal(const isl::checked::basic_map &map2) const;
2028  inline boolean is_injective() const;
2029  inline boolean is_single_valued() const;
2030  inline boolean is_strict_subset(const isl::checked::map &map2) const;
2031  inline boolean is_strict_subset(const isl::checked::union_map &umap2) const;
2032  inline boolean is_strict_subset(const isl::checked::basic_map &map2) const;
2033  inline boolean is_subset(const isl::checked::map &map2) const;
2034  inline boolean is_subset(const isl::checked::union_map &umap2) const;
2035  inline boolean is_subset(const isl::checked::basic_map &map2) const;
2036  inline boolean isa_map() const;
2037  inline isl::checked::map lex_ge_at(isl::checked::multi_pw_aff mpa) const;
2038  inline isl::checked::map lex_gt_at(isl::checked::multi_pw_aff mpa) const;
2039  inline isl::checked::map lex_le_at(isl::checked::multi_pw_aff mpa) const;
2040  inline isl::checked::map lex_lt_at(isl::checked::multi_pw_aff mpa) const;
2041  inline isl::checked::map lexmax() const;
2042  inline isl::checked::pw_multi_aff lexmax_pw_multi_aff() const;
2043  inline isl::checked::map lexmin() const;
2044  inline isl::checked::pw_multi_aff lexmin_pw_multi_aff() const;
2045  inline isl::checked::map lower_bound(isl::checked::multi_pw_aff lower) const;
2046  inline isl::checked::map_list map_list() const;
2047  inline isl::checked::multi_pw_aff max_multi_pw_aff() const;
2048  inline isl::checked::multi_pw_aff min_multi_pw_aff() const;
2049  inline class size n_basic_map() const;
2050  inline isl::checked::set params() const;
2051  inline isl::checked::basic_map polyhedral_hull() const;
2052  inline isl::checked::map preimage_domain(isl::checked::multi_aff ma) const;
2053  inline isl::checked::map preimage_domain(isl::checked::multi_pw_aff mpa) const;
2054  inline isl::checked::map preimage_domain(isl::checked::pw_multi_aff pma) const;
2055  inline isl::checked::union_map preimage_domain(const isl::checked::union_pw_multi_aff &upma) const;
2056  inline isl::checked::map preimage_range(isl::checked::multi_aff ma) const;
2057  inline isl::checked::map preimage_range(isl::checked::pw_multi_aff pma) const;
2058  inline isl::checked::union_map preimage_range(const isl::checked::union_pw_multi_aff &upma) const;
2059  inline isl::checked::map product(isl::checked::map map2) const;
2060  inline isl::checked::union_map product(const isl::checked::union_map &umap2) const;
2061  inline isl::checked::map product(const isl::checked::basic_map &map2) const;
2062  inline isl::checked::map project_out_all_params() const;
2063  inline isl::checked::map project_out_param(isl::checked::id id) const;
2064  inline isl::checked::map project_out_param(const std::string &id) const;
2065  inline isl::checked::map project_out_param(isl::checked::id_list list) const;
2066  inline isl::checked::set range() const;
2067  inline isl::checked::map range_factor_domain() const;
2068  inline isl::checked::map range_factor_range() const;
2069  inline isl::checked::fixed_box range_lattice_tile() const;
2070  inline isl::checked::fixed_box get_range_lattice_tile() const;
2071  inline isl::checked::union_map range_map() const;
2072  inline isl::checked::map range_product(isl::checked::map map2) const;
2073  inline isl::checked::union_map range_product(const isl::checked::union_map &umap2) const;
2074  inline isl::checked::map range_product(const isl::checked::basic_map &map2) const;
2075  inline isl::checked::map range_reverse() const;
2076  inline isl::checked::fixed_box range_simple_fixed_box_hull() const;
2077  inline isl::checked::fixed_box get_range_simple_fixed_box_hull() const;
2078  inline class size range_tuple_dim() const;
2079  inline isl::checked::id range_tuple_id() const;
2080  inline isl::checked::id get_range_tuple_id() const;
2081  inline isl::checked::map reverse() const;
2082  inline isl::checked::basic_map sample() const;
2083  inline isl::checked::map set_domain_tuple(isl::checked::id id) const;
2084  inline isl::checked::map set_domain_tuple(const std::string &id) const;
2085  inline isl::checked::map set_range_tuple(isl::checked::id id) const;
2086  inline isl::checked::map set_range_tuple(const std::string &id) const;
2087  inline isl::checked::space space() const;
2088  inline isl::checked::space get_space() const;
2089  inline isl::checked::map subtract(isl::checked::map map2) const;
2090  inline isl::checked::union_map subtract(const isl::checked::union_map &umap2) const;
2091  inline isl::checked::map subtract(const isl::checked::basic_map &map2) const;
2092  inline isl::checked::union_map subtract_domain(const isl::checked::union_set &dom) const;
2093  inline isl::checked::union_map subtract_range(const isl::checked::union_set &dom) const;
2094  inline isl::checked::map_list to_list() const;
2095  inline isl::checked::union_map to_union_map() const;
2096  inline isl::checked::map uncurry() const;
2097  inline isl::checked::map unite(isl::checked::map map2) const;
2098  inline isl::checked::union_map unite(const isl::checked::union_map &umap2) const;
2099  inline isl::checked::map unite(const isl::checked::basic_map &map2) const;
2100  static inline isl::checked::map universe(isl::checked::space space);
2101  inline isl::checked::basic_map unshifted_simple_hull() const;
2102  inline isl::checked::map upper_bound(isl::checked::multi_pw_aff upper) const;
2103  inline isl::checked::set wrap() const;
2104  inline isl::checked::map zip() const;
2105};
2106
2107// declarations for isl::map_list
2108inline map_list manage(__isl_take isl_map_list *ptr);
2109inline map_list manage_copy(__isl_keep isl_map_list *ptr);
2110
2111class map_list {
2112  friend inline map_list manage(__isl_take isl_map_list *ptr);
2113  friend inline map_list manage_copy(__isl_keep isl_map_list *ptr);
2114
2115protected:
2116  isl_map_list *ptr = nullptr;
2117
2118  inline explicit map_list(__isl_take isl_map_list *ptr);
2119
2120public:
2121  inline /* implicit */ map_list();
2122  inline /* implicit */ map_list(const map_list &obj);
2123  inline explicit map_list(isl::checked::ctx ctx, int n);
2124  inline explicit map_list(isl::checked::map el);
2125  inline explicit map_list(isl::checked::ctx ctx, const std::string &str);
2126  inline map_list &operator=(map_list obj);
2127  inline ~map_list();
2128  inline __isl_give isl_map_list *copy() const &;
2129  inline __isl_give isl_map_list *copy() && = delete;
2130  inline __isl_keep isl_map_list *get() const;
2131  inline __isl_give isl_map_list *release();
2132  inline bool is_null() const;
2133  inline isl::checked::ctx ctx() const;
2134
2135  inline isl::checked::map_list add(isl::checked::map el) const;
2136  inline isl::checked::map at(int index) const;
2137  inline isl::checked::map get_at(int index) const;
2138  inline isl::checked::map_list clear() const;
2139  inline isl::checked::map_list concat(isl::checked::map_list list2) const;
2140  inline isl::checked::map_list drop(unsigned int first, unsigned int n) const;
2141  inline stat foreach(const std::function<stat(isl::checked::map)> &fn) const;
2142  inline stat foreach_scc(const std::function<boolean(isl::checked::map, isl::checked::map)> &follows, const std::function<stat(isl::checked::map_list)> &fn) const;
2143  inline isl::checked::map_list insert(unsigned int pos, isl::checked::map el) const;
2144  inline isl::checked::map_list set_at(int index, isl::checked::map el) const;
2145  inline class size size() const;
2146};
2147
2148// declarations for isl::multi_aff
2149inline multi_aff manage(__isl_take isl_multi_aff *ptr);
2150inline multi_aff manage_copy(__isl_keep isl_multi_aff *ptr);
2151
2152class multi_aff {
2153  friend inline multi_aff manage(__isl_take isl_multi_aff *ptr);
2154  friend inline multi_aff manage_copy(__isl_keep isl_multi_aff *ptr);
2155
2156protected:
2157  isl_multi_aff *ptr = nullptr;
2158
2159  inline explicit multi_aff(__isl_take isl_multi_aff *ptr);
2160
2161public:
2162  inline /* implicit */ multi_aff();
2163  inline /* implicit */ multi_aff(const multi_aff &obj);
2164  inline /* implicit */ multi_aff(isl::checked::aff aff);
2165  inline explicit multi_aff(isl::checked::space space, isl::checked::aff_list list);
2166  inline explicit multi_aff(isl::checked::ctx ctx, const std::string &str);
2167  inline multi_aff &operator=(multi_aff obj);
2168  inline ~multi_aff();
2169  inline __isl_give isl_multi_aff *copy() const &;
2170  inline __isl_give isl_multi_aff *copy() && = delete;
2171  inline __isl_keep isl_multi_aff *get() const;
2172  inline __isl_give isl_multi_aff *release();
2173  inline bool is_null() const;
2174  inline isl::checked::ctx ctx() const;
2175
2176  inline isl::checked::multi_aff add(isl::checked::multi_aff multi2) const;
2177  inline isl::checked::multi_pw_aff add(const isl::checked::multi_pw_aff &multi2) const;
2178  inline isl::checked::multi_union_pw_aff add(const isl::checked::multi_union_pw_aff &multi2) const;
2179  inline isl::checked::pw_multi_aff add(const isl::checked::pw_multi_aff &pma2) const;
2180  inline isl::checked::union_pw_multi_aff add(const isl::checked::union_pw_multi_aff &upma2) const;
2181  inline isl::checked::multi_aff add(const isl::checked::aff &multi2) const;
2182  inline isl::checked::multi_aff add_constant(isl::checked::multi_val mv) const;
2183  inline isl::checked::multi_aff add_constant(isl::checked::val v) const;
2184  inline isl::checked::multi_aff add_constant(long v) const;
2185  inline isl::checked::union_pw_multi_aff apply(const isl::checked::union_pw_multi_aff &upma2) const;
2186  inline isl::checked::map as_map() const;
2187  inline isl::checked::multi_aff as_multi_aff() const;
2188  inline isl::checked::multi_union_pw_aff as_multi_union_pw_aff() const;
2189  inline isl::checked::pw_multi_aff as_pw_multi_aff() const;
2190  inline isl::checked::set as_set() const;
2191  inline isl::checked::union_map as_union_map() const;
2192  inline isl::checked::aff at(int pos) const;
2193  inline isl::checked::aff get_at(int pos) const;
2194  inline isl::checked::basic_set bind(isl::checked::multi_id tuple) const;
2195  inline isl::checked::multi_aff bind_domain(isl::checked::multi_id tuple) const;
2196  inline isl::checked::multi_aff bind_domain_wrapped_domain(isl::checked::multi_id tuple) const;
2197  inline isl::checked::pw_multi_aff coalesce() const;
2198  inline isl::checked::multi_val constant_multi_val() const;
2199  inline isl::checked::multi_val get_constant_multi_val() const;
2200  inline isl::checked::set domain() const;
2201  static inline isl::checked::multi_aff domain_map(isl::checked::space space);
2202  inline isl::checked::multi_aff domain_reverse() const;
2203  inline isl::checked::pw_multi_aff drop_unused_params() const;
2204  inline isl::checked::pw_multi_aff extract_pw_multi_aff(const isl::checked::space &space) const;
2205  inline isl::checked::multi_aff flat_range_product(isl::checked::multi_aff multi2) const;
2206  inline isl::checked::multi_pw_aff flat_range_product(const isl::checked::multi_pw_aff &multi2) const;
2207  inline isl::checked::multi_union_pw_aff flat_range_product(const isl::checked::multi_union_pw_aff &multi2) const;
2208  inline isl::checked::pw_multi_aff flat_range_product(const isl::checked::pw_multi_aff &pma2) const;
2209  inline isl::checked::union_pw_multi_aff flat_range_product(const isl::checked::union_pw_multi_aff &upma2) const;
2210  inline isl::checked::multi_aff flat_range_product(const isl::checked::aff &multi2) const;
2211  inline isl::checked::multi_aff floor() const;
2212  inline stat foreach_piece(const std::function<stat(isl::checked::set, isl::checked::multi_aff)> &fn) const;
2213  inline isl::checked::multi_aff gist(isl::checked::set context) const;
2214  inline isl::checked::union_pw_multi_aff gist(const isl::checked::union_set &context) const;
2215  inline isl::checked::multi_aff gist(const isl::checked::basic_set &context) const;
2216  inline isl::checked::multi_aff gist(const isl::checked::point &context) const;
2217  inline isl::checked::multi_aff gist_params(isl::checked::set context) const;
2218  inline boolean has_range_tuple_id() const;
2219  inline isl::checked::multi_aff identity() const;
2220  static inline isl::checked::multi_aff identity_on_domain(isl::checked::space space);
2221  inline isl::checked::multi_aff insert_domain(isl::checked::space domain) const;
2222  inline isl::checked::pw_multi_aff intersect_domain(const isl::checked::set &set) const;
2223  inline isl::checked::union_pw_multi_aff intersect_domain(const isl::checked::space &space) const;
2224  inline isl::checked::union_pw_multi_aff intersect_domain(const isl::checked::union_set &uset) const;
2225  inline isl::checked::union_pw_multi_aff intersect_domain_wrapped_domain(const isl::checked::union_set &uset) const;
2226  inline isl::checked::union_pw_multi_aff intersect_domain_wrapped_range(const isl::checked::union_set &uset) const;
2227  inline isl::checked::pw_multi_aff intersect_params(const isl::checked::set &set) const;
2228  inline boolean involves_locals() const;
2229  inline boolean involves_nan() const;
2230  inline boolean involves_param(const isl::checked::id &id) const;
2231  inline boolean involves_param(const std::string &id) const;
2232  inline boolean involves_param(const isl::checked::id_list &list) const;
2233  inline boolean isa_multi_aff() const;
2234  inline boolean isa_pw_multi_aff() const;
2235  inline isl::checked::aff_list list() const;
2236  inline isl::checked::aff_list get_list() const;
2237  inline isl::checked::multi_pw_aff max(const isl::checked::multi_pw_aff &multi2) const;
2238  inline isl::checked::multi_val max_multi_val() const;
2239  inline isl::checked::multi_pw_aff min(const isl::checked::multi_pw_aff &multi2) const;
2240  inline isl::checked::multi_val min_multi_val() const;
2241  static inline isl::checked::multi_aff multi_val_on_domain(isl::checked::space space, isl::checked::multi_val mv);
2242  inline class size n_piece() const;
2243  inline isl::checked::multi_aff neg() const;
2244  inline boolean plain_is_empty() const;
2245  inline boolean plain_is_equal(const isl::checked::multi_aff &multi2) const;
2246  inline boolean plain_is_equal(const isl::checked::multi_pw_aff &multi2) const;
2247  inline boolean plain_is_equal(const isl::checked::multi_union_pw_aff &multi2) const;
2248  inline boolean plain_is_equal(const isl::checked::pw_multi_aff &pma2) const;
2249  inline boolean plain_is_equal(const isl::checked::union_pw_multi_aff &upma2) const;
2250  inline boolean plain_is_equal(const isl::checked::aff &multi2) const;
2251  inline isl::checked::pw_multi_aff preimage_domain_wrapped_domain(const isl::checked::pw_multi_aff &pma2) const;
2252  inline isl::checked::union_pw_multi_aff preimage_domain_wrapped_domain(const isl::checked::union_pw_multi_aff &upma2) const;
2253  inline isl::checked::multi_aff product(isl::checked::multi_aff multi2) const;
2254  inline isl::checked::multi_pw_aff product(const isl::checked::multi_pw_aff &multi2) const;
2255  inline isl::checked::pw_multi_aff product(const isl::checked::pw_multi_aff &pma2) const;
2256  inline isl::checked::multi_aff product(const isl::checked::aff &multi2) const;
2257  inline isl::checked::multi_aff pullback(isl::checked::multi_aff ma2) const;
2258  inline isl::checked::multi_pw_aff pullback(const isl::checked::multi_pw_aff &mpa2) const;
2259  inline isl::checked::pw_multi_aff pullback(const isl::checked::pw_multi_aff &pma2) const;
2260  inline isl::checked::union_pw_multi_aff pullback(const isl::checked::union_pw_multi_aff &upma2) const;
2261  inline isl::checked::multi_aff pullback(const isl::checked::aff &ma2) const;
2262  inline isl::checked::pw_multi_aff_list pw_multi_aff_list() const;
2263  inline isl::checked::pw_multi_aff range_factor_domain() const;
2264  inline isl::checked::pw_multi_aff range_factor_range() const;
2265  static inline isl::checked::multi_aff range_map(isl::checked::space space);
2266  inline isl::checked::multi_aff range_product(isl::checked::multi_aff multi2) const;
2267  inline isl::checked::multi_pw_aff range_product(const isl::checked::multi_pw_aff &multi2) const;
2268  inline isl::checked::multi_union_pw_aff range_product(const isl::checked::multi_union_pw_aff &multi2) const;
2269  inline isl::checked::pw_multi_aff range_product(const isl::checked::pw_multi_aff &pma2) const;
2270  inline isl::checked::union_pw_multi_aff range_product(const isl::checked::union_pw_multi_aff &upma2) const;
2271  inline isl::checked::multi_aff range_product(const isl::checked::aff &multi2) const;
2272  inline isl::checked::id range_tuple_id() const;
2273  inline isl::checked::id get_range_tuple_id() const;
2274  inline isl::checked::multi_aff reset_range_tuple_id() const;
2275  inline isl::checked::multi_aff scale(isl::checked::multi_val mv) const;
2276  inline isl::checked::multi_aff scale(isl::checked::val v) const;
2277  inline isl::checked::multi_aff scale(long v) const;
2278  inline isl::checked::multi_aff scale_down(isl::checked::multi_val mv) const;
2279  inline isl::checked::multi_aff scale_down(isl::checked::val v) const;
2280  inline isl::checked::multi_aff scale_down(long v) const;
2281  inline isl::checked::multi_aff set_at(int pos, isl::checked::aff el) const;
2282  inline isl::checked::multi_pw_aff set_at(int pos, const isl::checked::pw_aff &el) const;
2283  inline isl::checked::multi_union_pw_aff set_at(int pos, const isl::checked::union_pw_aff &el) const;
2284  inline isl::checked::multi_aff set_range_tuple(isl::checked::id id) const;
2285  inline isl::checked::multi_aff set_range_tuple(const std::string &id) const;
2286  inline class size size() const;
2287  inline isl::checked::space space() const;
2288  inline isl::checked::space get_space() const;
2289  inline isl::checked::multi_aff sub(isl::checked::multi_aff multi2) const;
2290  inline isl::checked::multi_pw_aff sub(const isl::checked::multi_pw_aff &multi2) const;
2291  inline isl::checked::multi_union_pw_aff sub(const isl::checked::multi_union_pw_aff &multi2) const;
2292  inline isl::checked::pw_multi_aff sub(const isl::checked::pw_multi_aff &pma2) const;
2293  inline isl::checked::union_pw_multi_aff sub(const isl::checked::union_pw_multi_aff &upma2) const;
2294  inline isl::checked::multi_aff sub(const isl::checked::aff &multi2) const;
2295  inline isl::checked::pw_multi_aff subtract_domain(const isl::checked::set &set) const;
2296  inline isl::checked::union_pw_multi_aff subtract_domain(const isl::checked::space &space) const;
2297  inline isl::checked::union_pw_multi_aff subtract_domain(const isl::checked::union_set &uset) const;
2298  inline isl::checked::pw_multi_aff_list to_list() const;
2299  inline isl::checked::multi_pw_aff to_multi_pw_aff() const;
2300  inline isl::checked::multi_union_pw_aff to_multi_union_pw_aff() const;
2301  inline isl::checked::pw_multi_aff to_pw_multi_aff() const;
2302  inline isl::checked::union_pw_multi_aff to_union_pw_multi_aff() const;
2303  inline isl::checked::multi_aff unbind_params_insert_domain(isl::checked::multi_id domain) const;
2304  inline isl::checked::multi_pw_aff union_add(const isl::checked::multi_pw_aff &mpa2) const;
2305  inline isl::checked::multi_union_pw_aff union_add(const isl::checked::multi_union_pw_aff &mupa2) const;
2306  inline isl::checked::pw_multi_aff union_add(const isl::checked::pw_multi_aff &pma2) const;
2307  inline isl::checked::union_pw_multi_aff union_add(const isl::checked::union_pw_multi_aff &upma2) const;
2308  static inline isl::checked::multi_aff zero(isl::checked::space space);
2309};
2310
2311// declarations for isl::multi_id
2312inline multi_id manage(__isl_take isl_multi_id *ptr);
2313inline multi_id manage_copy(__isl_keep isl_multi_id *ptr);
2314
2315class multi_id {
2316  friend inline multi_id manage(__isl_take isl_multi_id *ptr);
2317  friend inline multi_id manage_copy(__isl_keep isl_multi_id *ptr);
2318
2319protected:
2320  isl_multi_id *ptr = nullptr;
2321
2322  inline explicit multi_id(__isl_take isl_multi_id *ptr);
2323
2324public:
2325  inline /* implicit */ multi_id();
2326  inline /* implicit */ multi_id(const multi_id &obj);
2327  inline explicit multi_id(isl::checked::space space, isl::checked::id_list list);
2328  inline explicit multi_id(isl::checked::ctx ctx, const std::string &str);
2329  inline multi_id &operator=(multi_id obj);
2330  inline ~multi_id();
2331  inline __isl_give isl_multi_id *copy() const &;
2332  inline __isl_give isl_multi_id *copy() && = delete;
2333  inline __isl_keep isl_multi_id *get() const;
2334  inline __isl_give isl_multi_id *release();
2335  inline bool is_null() const;
2336  inline isl::checked::ctx ctx() const;
2337
2338  inline isl::checked::id at(int pos) const;
2339  inline isl::checked::id get_at(int pos) const;
2340  inline isl::checked::multi_id flat_range_product(isl::checked::multi_id multi2) const;
2341  inline isl::checked::id_list list() const;
2342  inline isl::checked::id_list get_list() const;
2343  inline boolean plain_is_equal(const isl::checked::multi_id &multi2) const;
2344  inline isl::checked::multi_id range_product(isl::checked::multi_id multi2) const;
2345  inline isl::checked::multi_id set_at(int pos, isl::checked::id el) const;
2346  inline isl::checked::multi_id set_at(int pos, const std::string &el) const;
2347  inline class size size() const;
2348  inline isl::checked::space space() const;
2349  inline isl::checked::space get_space() const;
2350};
2351
2352// declarations for isl::multi_pw_aff
2353inline multi_pw_aff manage(__isl_take isl_multi_pw_aff *ptr);
2354inline multi_pw_aff manage_copy(__isl_keep isl_multi_pw_aff *ptr);
2355
2356class multi_pw_aff {
2357  friend inline multi_pw_aff manage(__isl_take isl_multi_pw_aff *ptr);
2358  friend inline multi_pw_aff manage_copy(__isl_keep isl_multi_pw_aff *ptr);
2359
2360protected:
2361  isl_multi_pw_aff *ptr = nullptr;
2362
2363  inline explicit multi_pw_aff(__isl_take isl_multi_pw_aff *ptr);
2364
2365public:
2366  inline /* implicit */ multi_pw_aff();
2367  inline /* implicit */ multi_pw_aff(const multi_pw_aff &obj);
2368  inline /* implicit */ multi_pw_aff(isl::checked::aff aff);
2369  inline /* implicit */ multi_pw_aff(isl::checked::multi_aff ma);
2370  inline /* implicit */ multi_pw_aff(isl::checked::pw_aff pa);
2371  inline explicit multi_pw_aff(isl::checked::space space, isl::checked::pw_aff_list list);
2372  inline /* implicit */ multi_pw_aff(isl::checked::pw_multi_aff pma);
2373  inline explicit multi_pw_aff(isl::checked::ctx ctx, const std::string &str);
2374  inline multi_pw_aff &operator=(multi_pw_aff obj);
2375  inline ~multi_pw_aff();
2376  inline __isl_give isl_multi_pw_aff *copy() const &;
2377  inline __isl_give isl_multi_pw_aff *copy() && = delete;
2378  inline __isl_keep isl_multi_pw_aff *get() const;
2379  inline __isl_give isl_multi_pw_aff *release();
2380  inline bool is_null() const;
2381  inline isl::checked::ctx ctx() const;
2382
2383  inline isl::checked::multi_pw_aff add(isl::checked::multi_pw_aff multi2) const;
2384  inline isl::checked::multi_union_pw_aff add(const isl::checked::multi_union_pw_aff &multi2) const;
2385  inline isl::checked::multi_pw_aff add(const isl::checked::aff &multi2) const;
2386  inline isl::checked::multi_pw_aff add(const isl::checked::multi_aff &multi2) const;
2387  inline isl::checked::multi_pw_aff add(const isl::checked::pw_aff &multi2) const;
2388  inline isl::checked::multi_pw_aff add(const isl::checked::pw_multi_aff &multi2) const;
2389  inline isl::checked::multi_pw_aff add_constant(isl::checked::multi_val mv) const;
2390  inline isl::checked::multi_pw_aff add_constant(isl::checked::val v) const;
2391  inline isl::checked::multi_pw_aff add_constant(long v) const;
2392  inline isl::checked::map as_map() const;
2393  inline isl::checked::multi_aff as_multi_aff() const;
2394  inline isl::checked::set as_set() const;
2395  inline isl::checked::pw_aff at(int pos) const;
2396  inline isl::checked::pw_aff get_at(int pos) const;
2397  inline isl::checked::set bind(isl::checked::multi_id tuple) const;
2398  inline isl::checked::multi_pw_aff bind_domain(isl::checked::multi_id tuple) const;
2399  inline isl::checked::multi_pw_aff bind_domain_wrapped_domain(isl::checked::multi_id tuple) const;
2400  inline isl::checked::multi_pw_aff coalesce() const;
2401  inline isl::checked::set domain() const;
2402  inline isl::checked::multi_pw_aff domain_reverse() const;
2403  inline isl::checked::multi_pw_aff flat_range_product(isl::checked::multi_pw_aff multi2) const;
2404  inline isl::checked::multi_union_pw_aff flat_range_product(const isl::checked::multi_union_pw_aff &multi2) const;
2405  inline isl::checked::multi_pw_aff flat_range_product(const isl::checked::aff &multi2) const;
2406  inline isl::checked::multi_pw_aff flat_range_product(const isl::checked::multi_aff &multi2) const;
2407  inline isl::checked::multi_pw_aff flat_range_product(const isl::checked::pw_aff &multi2) const;
2408  inline isl::checked::multi_pw_aff flat_range_product(const isl::checked::pw_multi_aff &multi2) const;
2409  inline isl::checked::multi_pw_aff gist(isl::checked::set set) const;
2410  inline isl::checked::multi_union_pw_aff gist(const isl::checked::union_set &context) const;
2411  inline isl::checked::multi_pw_aff gist(const isl::checked::basic_set &set) const;
2412  inline isl::checked::multi_pw_aff gist(const isl::checked::point &set) const;
2413  inline isl::checked::multi_pw_aff gist_params(isl::checked::set set) const;
2414  inline boolean has_range_tuple_id() const;
2415  inline isl::checked::multi_pw_aff identity() const;
2416  static inline isl::checked::multi_pw_aff identity_on_domain(isl::checked::space space);
2417  inline isl::checked::multi_pw_aff insert_domain(isl::checked::space domain) const;
2418  inline isl::checked::multi_pw_aff intersect_domain(isl::checked::set domain) const;
2419  inline isl::checked::multi_union_pw_aff intersect_domain(const isl::checked::union_set &uset) const;
2420  inline isl::checked::multi_pw_aff intersect_domain(const isl::checked::basic_set &domain) const;
2421  inline isl::checked::multi_pw_aff intersect_domain(const isl::checked::point &domain) const;
2422  inline isl::checked::multi_pw_aff intersect_params(isl::checked::set set) const;
2423  inline boolean involves_nan() const;
2424  inline boolean involves_param(const isl::checked::id &id) const;
2425  inline boolean involves_param(const std::string &id) const;
2426  inline boolean involves_param(const isl::checked::id_list &list) const;
2427  inline boolean isa_multi_aff() const;
2428  inline isl::checked::pw_aff_list list() const;
2429  inline isl::checked::pw_aff_list get_list() const;
2430  inline isl::checked::multi_pw_aff max(isl::checked::multi_pw_aff multi2) const;
2431  inline isl::checked::multi_val max_multi_val() const;
2432  inline isl::checked::multi_pw_aff min(isl::checked::multi_pw_aff multi2) const;
2433  inline isl::checked::multi_val min_multi_val() const;
2434  inline isl::checked::multi_pw_aff neg() const;
2435  inline boolean plain_is_equal(const isl::checked::multi_pw_aff &multi2) const;
2436  inline boolean plain_is_equal(const isl::checked::multi_union_pw_aff &multi2) const;
2437  inline boolean plain_is_equal(const isl::checked::aff &multi2) const;
2438  inline boolean plain_is_equal(const isl::checked::multi_aff &multi2) const;
2439  inline boolean plain_is_equal(const isl::checked::pw_aff &multi2) const;
2440  inline boolean plain_is_equal(const isl::checked::pw_multi_aff &multi2) const;
2441  inline isl::checked::multi_pw_aff product(isl::checked::multi_pw_aff multi2) const;
2442  inline isl::checked::multi_pw_aff pullback(isl::checked::multi_aff ma) const;
2443  inline isl::checked::multi_pw_aff pullback(isl::checked::multi_pw_aff mpa2) const;
2444  inline isl::checked::multi_pw_aff pullback(isl::checked::pw_multi_aff pma) const;
2445  inline isl::checked::multi_union_pw_aff pullback(const isl::checked::union_pw_multi_aff &upma) const;
2446  inline isl::checked::multi_pw_aff range_product(isl::checked::multi_pw_aff multi2) const;
2447  inline isl::checked::multi_union_pw_aff range_product(const isl::checked::multi_union_pw_aff &multi2) const;
2448  inline isl::checked::multi_pw_aff range_product(const isl::checked::aff &multi2) const;
2449  inline isl::checked::multi_pw_aff range_product(const isl::checked::multi_aff &multi2) const;
2450  inline isl::checked::multi_pw_aff range_product(const isl::checked::pw_aff &multi2) const;
2451  inline isl::checked::multi_pw_aff range_product(const isl::checked::pw_multi_aff &multi2) const;
2452  inline isl::checked::id range_tuple_id() const;
2453  inline isl::checked::id get_range_tuple_id() const;
2454  inline isl::checked::multi_pw_aff reset_range_tuple_id() const;
2455  inline isl::checked::multi_pw_aff scale(isl::checked::multi_val mv) const;
2456  inline isl::checked::multi_pw_aff scale(isl::checked::val v) const;
2457  inline isl::checked::multi_pw_aff scale(long v) const;
2458  inline isl::checked::multi_pw_aff scale_down(isl::checked::multi_val mv) const;
2459  inline isl::checked::multi_pw_aff scale_down(isl::checked::val v) const;
2460  inline isl::checked::multi_pw_aff scale_down(long v) const;
2461  inline isl::checked::multi_pw_aff set_at(int pos, isl::checked::pw_aff el) const;
2462  inline isl::checked::multi_union_pw_aff set_at(int pos, const isl::checked::union_pw_aff &el) const;
2463  inline isl::checked::multi_pw_aff set_range_tuple(isl::checked::id id) const;
2464  inline isl::checked::multi_pw_aff set_range_tuple(const std::string &id) const;
2465  inline class size size() const;
2466  inline isl::checked::space space() const;
2467  inline isl::checked::space get_space() const;
2468  inline isl::checked::multi_pw_aff sub(isl::checked::multi_pw_aff multi2) const;
2469  inline isl::checked::multi_union_pw_aff sub(const isl::checked::multi_union_pw_aff &multi2) const;
2470  inline isl::checked::multi_pw_aff sub(const isl::checked::aff &multi2) const;
2471  inline isl::checked::multi_pw_aff sub(const isl::checked::multi_aff &multi2) const;
2472  inline isl::checked::multi_pw_aff sub(const isl::checked::pw_aff &multi2) const;
2473  inline isl::checked::multi_pw_aff sub(const isl::checked::pw_multi_aff &multi2) const;
2474  inline isl::checked::multi_pw_aff unbind_params_insert_domain(isl::checked::multi_id domain) const;
2475  inline isl::checked::multi_pw_aff union_add(isl::checked::multi_pw_aff mpa2) const;
2476  inline isl::checked::multi_union_pw_aff union_add(const isl::checked::multi_union_pw_aff &mupa2) const;
2477  inline isl::checked::multi_pw_aff union_add(const isl::checked::aff &mpa2) const;
2478  inline isl::checked::multi_pw_aff union_add(const isl::checked::multi_aff &mpa2) const;
2479  inline isl::checked::multi_pw_aff union_add(const isl::checked::pw_aff &mpa2) const;
2480  inline isl::checked::multi_pw_aff union_add(const isl::checked::pw_multi_aff &mpa2) const;
2481  static inline isl::checked::multi_pw_aff zero(isl::checked::space space);
2482};
2483
2484// declarations for isl::multi_union_pw_aff
2485inline multi_union_pw_aff manage(__isl_take isl_multi_union_pw_aff *ptr);
2486inline multi_union_pw_aff manage_copy(__isl_keep isl_multi_union_pw_aff *ptr);
2487
2488class multi_union_pw_aff {
2489  friend inline multi_union_pw_aff manage(__isl_take isl_multi_union_pw_aff *ptr);
2490  friend inline multi_union_pw_aff manage_copy(__isl_keep isl_multi_union_pw_aff *ptr);
2491
2492protected:
2493  isl_multi_union_pw_aff *ptr = nullptr;
2494
2495  inline explicit multi_union_pw_aff(__isl_take isl_multi_union_pw_aff *ptr);
2496
2497public:
2498  inline /* implicit */ multi_union_pw_aff();
2499  inline /* implicit */ multi_union_pw_aff(const multi_union_pw_aff &obj);
2500  inline /* implicit */ multi_union_pw_aff(isl::checked::multi_pw_aff mpa);
2501  inline /* implicit */ multi_union_pw_aff(isl::checked::union_pw_aff upa);
2502  inline explicit multi_union_pw_aff(isl::checked::space space, isl::checked::union_pw_aff_list list);
2503  inline explicit multi_union_pw_aff(isl::checked::ctx ctx, const std::string &str);
2504  inline multi_union_pw_aff &operator=(multi_union_pw_aff obj);
2505  inline ~multi_union_pw_aff();
2506  inline __isl_give isl_multi_union_pw_aff *copy() const &;
2507  inline __isl_give isl_multi_union_pw_aff *copy() && = delete;
2508  inline __isl_keep isl_multi_union_pw_aff *get() const;
2509  inline __isl_give isl_multi_union_pw_aff *release();
2510  inline bool is_null() const;
2511  inline isl::checked::ctx ctx() const;
2512
2513  inline isl::checked::multi_union_pw_aff add(isl::checked::multi_union_pw_aff multi2) const;
2514  inline isl::checked::union_pw_aff at(int pos) const;
2515  inline isl::checked::union_pw_aff get_at(int pos) const;
2516  inline isl::checked::union_set bind(isl::checked::multi_id tuple) const;
2517  inline isl::checked::multi_union_pw_aff coalesce() const;
2518  inline isl::checked::union_set domain() const;
2519  inline isl::checked::multi_union_pw_aff flat_range_product(isl::checked::multi_union_pw_aff multi2) const;
2520  inline isl::checked::multi_union_pw_aff gist(isl::checked::union_set context) const;
2521  inline isl::checked::multi_union_pw_aff gist_params(isl::checked::set context) const;
2522  inline boolean has_range_tuple_id() const;
2523  inline isl::checked::multi_union_pw_aff intersect_domain(isl::checked::union_set uset) const;
2524  inline isl::checked::multi_union_pw_aff intersect_params(isl::checked::set params) const;
2525  inline boolean involves_nan() const;
2526  inline isl::checked::union_pw_aff_list list() const;
2527  inline isl::checked::union_pw_aff_list get_list() const;
2528  inline isl::checked::multi_union_pw_aff neg() const;
2529  inline boolean plain_is_equal(const isl::checked::multi_union_pw_aff &multi2) const;
2530  inline isl::checked::multi_union_pw_aff pullback(isl::checked::union_pw_multi_aff upma) const;
2531  inline isl::checked::multi_union_pw_aff range_product(isl::checked::multi_union_pw_aff multi2) const;
2532  inline isl::checked::id range_tuple_id() const;
2533  inline isl::checked::id get_range_tuple_id() const;
2534  inline isl::checked::multi_union_pw_aff reset_range_tuple_id() const;
2535  inline isl::checked::multi_union_pw_aff scale(isl::checked::multi_val mv) const;
2536  inline isl::checked::multi_union_pw_aff scale(isl::checked::val v) const;
2537  inline isl::checked::multi_union_pw_aff scale(long v) const;
2538  inline isl::checked::multi_union_pw_aff scale_down(isl::checked::multi_val mv) const;
2539  inline isl::checked::multi_union_pw_aff scale_down(isl::checked::val v) const;
2540  inline isl::checked::multi_union_pw_aff scale_down(long v) const;
2541  inline isl::checked::multi_union_pw_aff set_at(int pos, isl::checked::union_pw_aff el) const;
2542  inline isl::checked::multi_union_pw_aff set_range_tuple(isl::checked::id id) const;
2543  inline isl::checked::multi_union_pw_aff set_range_tuple(const std::string &id) const;
2544  inline class size size() const;
2545  inline isl::checked::space space() const;
2546  inline isl::checked::space get_space() const;
2547  inline isl::checked::multi_union_pw_aff sub(isl::checked::multi_union_pw_aff multi2) const;
2548  inline isl::checked::multi_union_pw_aff union_add(isl::checked::multi_union_pw_aff mupa2) const;
2549  static inline isl::checked::multi_union_pw_aff zero(isl::checked::space space);
2550};
2551
2552// declarations for isl::multi_val
2553inline multi_val manage(__isl_take isl_multi_val *ptr);
2554inline multi_val manage_copy(__isl_keep isl_multi_val *ptr);
2555
2556class multi_val {
2557  friend inline multi_val manage(__isl_take isl_multi_val *ptr);
2558  friend inline multi_val manage_copy(__isl_keep isl_multi_val *ptr);
2559
2560protected:
2561  isl_multi_val *ptr = nullptr;
2562
2563  inline explicit multi_val(__isl_take isl_multi_val *ptr);
2564
2565public:
2566  inline /* implicit */ multi_val();
2567  inline /* implicit */ multi_val(const multi_val &obj);
2568  inline explicit multi_val(isl::checked::space space, isl::checked::val_list list);
2569  inline explicit multi_val(isl::checked::ctx ctx, const std::string &str);
2570  inline multi_val &operator=(multi_val obj);
2571  inline ~multi_val();
2572  inline __isl_give isl_multi_val *copy() const &;
2573  inline __isl_give isl_multi_val *copy() && = delete;
2574  inline __isl_keep isl_multi_val *get() const;
2575  inline __isl_give isl_multi_val *release();
2576  inline bool is_null() const;
2577  inline isl::checked::ctx ctx() const;
2578
2579  inline isl::checked::multi_val add(isl::checked::multi_val multi2) const;
2580  inline isl::checked::multi_val add(isl::checked::val v) const;
2581  inline isl::checked::multi_val add(long v) const;
2582  inline isl::checked::val at(int pos) const;
2583  inline isl::checked::val get_at(int pos) const;
2584  inline isl::checked::multi_val flat_range_product(isl::checked::multi_val multi2) const;
2585  inline boolean has_range_tuple_id() const;
2586  inline boolean involves_nan() const;
2587  inline isl::checked::val_list list() const;
2588  inline isl::checked::val_list get_list() const;
2589  inline isl::checked::multi_val max(isl::checked::multi_val multi2) const;
2590  inline isl::checked::multi_val min(isl::checked::multi_val multi2) const;
2591  inline isl::checked::multi_val neg() const;
2592  inline boolean plain_is_equal(const isl::checked::multi_val &multi2) const;
2593  inline isl::checked::multi_val product(isl::checked::multi_val multi2) const;
2594  inline isl::checked::multi_val range_product(isl::checked::multi_val multi2) const;
2595  inline isl::checked::id range_tuple_id() const;
2596  inline isl::checked::id get_range_tuple_id() const;
2597  inline isl::checked::multi_val reset_range_tuple_id() const;
2598  inline isl::checked::multi_val scale(isl::checked::multi_val mv) const;
2599  inline isl::checked::multi_val scale(isl::checked::val v) const;
2600  inline isl::checked::multi_val scale(long v) const;
2601  inline isl::checked::multi_val scale_down(isl::checked::multi_val mv) const;
2602  inline isl::checked::multi_val scale_down(isl::checked::val v) const;
2603  inline isl::checked::multi_val scale_down(long v) const;
2604  inline isl::checked::multi_val set_at(int pos, isl::checked::val el) const;
2605  inline isl::checked::multi_val set_at(int pos, long el) const;
2606  inline isl::checked::multi_val set_range_tuple(isl::checked::id id) const;
2607  inline isl::checked::multi_val set_range_tuple(const std::string &id) const;
2608  inline class size size() const;
2609  inline isl::checked::space space() const;
2610  inline isl::checked::space get_space() const;
2611  inline isl::checked::multi_val sub(isl::checked::multi_val multi2) const;
2612  static inline isl::checked::multi_val zero(isl::checked::space space);
2613};
2614
2615// declarations for isl::point
2616inline point manage(__isl_take isl_point *ptr);
2617inline point manage_copy(__isl_keep isl_point *ptr);
2618
2619class point {
2620  friend inline point manage(__isl_take isl_point *ptr);
2621  friend inline point manage_copy(__isl_keep isl_point *ptr);
2622
2623protected:
2624  isl_point *ptr = nullptr;
2625
2626  inline explicit point(__isl_take isl_point *ptr);
2627
2628public:
2629  inline /* implicit */ point();
2630  inline /* implicit */ point(const point &obj);
2631  inline point &operator=(point obj);
2632  inline ~point();
2633  inline __isl_give isl_point *copy() const &;
2634  inline __isl_give isl_point *copy() && = delete;
2635  inline __isl_keep isl_point *get() const;
2636  inline __isl_give isl_point *release();
2637  inline bool is_null() const;
2638  inline isl::checked::ctx ctx() const;
2639
2640  inline isl::checked::basic_set affine_hull() const;
2641  inline isl::checked::basic_set apply(const isl::checked::basic_map &bmap) const;
2642  inline isl::checked::set apply(const isl::checked::map &map) const;
2643  inline isl::checked::union_set apply(const isl::checked::union_map &umap) const;
2644  inline isl::checked::pw_multi_aff as_pw_multi_aff() const;
2645  inline isl::checked::set as_set() const;
2646  inline isl::checked::set bind(const isl::checked::multi_id &tuple) const;
2647  inline isl::checked::set coalesce() const;
2648  inline isl::checked::set complement() const;
2649  inline isl::checked::union_set compute_divs() const;
2650  inline isl::checked::basic_set detect_equalities() const;
2651  inline isl::checked::val dim_max_val(int pos) const;
2652  inline isl::checked::val dim_min_val(int pos) const;
2653  inline isl::checked::set drop_unused_params() const;
2654  inline boolean every_set(const std::function<boolean(isl::checked::set)> &test) const;
2655  inline isl::checked::set extract_set(const isl::checked::space &space) const;
2656  inline isl::checked::basic_set flatten() const;
2657  inline stat foreach_basic_set(const std::function<stat(isl::checked::basic_set)> &fn) const;
2658  inline stat foreach_point(const std::function<stat(isl::checked::point)> &fn) const;
2659  inline stat foreach_set(const std::function<stat(isl::checked::set)> &fn) const;
2660  inline isl::checked::basic_set gist(const isl::checked::basic_set &context) const;
2661  inline isl::checked::set gist(const isl::checked::set &context) const;
2662  inline isl::checked::union_set gist(const isl::checked::union_set &context) const;
2663  inline isl::checked::set gist_params(const isl::checked::set &context) const;
2664  inline isl::checked::map identity() const;
2665  inline isl::checked::pw_aff indicator_function() const;
2666  inline isl::checked::map insert_domain(const isl::checked::space &domain) const;
2667  inline isl::checked::basic_set intersect(const isl::checked::basic_set &bset2) const;
2668  inline isl::checked::set intersect(const isl::checked::set &set2) const;
2669  inline isl::checked::union_set intersect(const isl::checked::union_set &uset2) const;
2670  inline isl::checked::basic_set intersect_params(const isl::checked::basic_set &bset2) const;
2671  inline isl::checked::set intersect_params(const isl::checked::set &params) const;
2672  inline boolean involves_locals() const;
2673  inline boolean is_disjoint(const isl::checked::set &set2) const;
2674  inline boolean is_disjoint(const isl::checked::union_set &uset2) const;
2675  inline boolean is_empty() const;
2676  inline boolean is_equal(const isl::checked::basic_set &bset2) const;
2677  inline boolean is_equal(const isl::checked::set &set2) const;
2678  inline boolean is_equal(const isl::checked::union_set &uset2) const;
2679  inline boolean is_singleton() const;
2680  inline boolean is_strict_subset(const isl::checked::set &set2) const;
2681  inline boolean is_strict_subset(const isl::checked::union_set &uset2) const;
2682  inline boolean is_subset(const isl::checked::basic_set &bset2) const;
2683  inline boolean is_subset(const isl::checked::set &set2) const;
2684  inline boolean is_subset(const isl::checked::union_set &uset2) const;
2685  inline boolean is_wrapping() const;
2686  inline boolean isa_set() const;
2687  inline isl::checked::fixed_box lattice_tile() const;
2688  inline isl::checked::set lexmax() const;
2689  inline isl::checked::pw_multi_aff lexmax_pw_multi_aff() const;
2690  inline isl::checked::set lexmin() const;
2691  inline isl::checked::pw_multi_aff lexmin_pw_multi_aff() const;
2692  inline isl::checked::set lower_bound(const isl::checked::multi_pw_aff &lower) const;
2693  inline isl::checked::set lower_bound(const isl::checked::multi_val &lower) const;
2694  inline isl::checked::multi_pw_aff max_multi_pw_aff() const;
2695  inline isl::checked::val max_val(const isl::checked::aff &obj) const;
2696  inline isl::checked::multi_pw_aff min_multi_pw_aff() const;
2697  inline isl::checked::val min_val(const isl::checked::aff &obj) const;
2698  inline isl::checked::multi_val multi_val() const;
2699  inline isl::checked::multi_val get_multi_val() const;
2700  inline class size n_basic_set() const;
2701  inline isl::checked::pw_aff param_pw_aff_on_domain(const isl::checked::id &id) const;
2702  inline isl::checked::pw_aff param_pw_aff_on_domain(const std::string &id) const;
2703  inline isl::checked::basic_set params() const;
2704  inline isl::checked::multi_val plain_multi_val_if_fixed() const;
2705  inline isl::checked::basic_set polyhedral_hull() const;
2706  inline isl::checked::set preimage(const isl::checked::multi_aff &ma) const;
2707  inline isl::checked::set preimage(const isl::checked::multi_pw_aff &mpa) const;
2708  inline isl::checked::set preimage(const isl::checked::pw_multi_aff &pma) const;
2709  inline isl::checked::union_set preimage(const isl::checked::union_pw_multi_aff &upma) const;
2710  inline isl::checked::set product(const isl::checked::set &set2) const;
2711  inline isl::checked::set project_out_all_params() const;
2712  inline isl::checked::set project_out_param(const isl::checked::id &id) const;
2713  inline isl::checked::set project_out_param(const std::string &id) const;
2714  inline isl::checked::set project_out_param(const isl::checked::id_list &list) const;
2715  inline isl::checked::pw_aff pw_aff_on_domain(const isl::checked::val &v) const;
2716  inline isl::checked::pw_aff pw_aff_on_domain(long v) const;
2717  inline isl::checked::pw_multi_aff pw_multi_aff_on_domain(const isl::checked::multi_val &mv) const;
2718  inline isl::checked::basic_set sample() const;
2719  inline isl::checked::point sample_point() const;
2720  inline isl::checked::set_list set_list() const;
2721  inline isl::checked::fixed_box simple_fixed_box_hull() const;
2722  inline isl::checked::space space() const;
2723  inline isl::checked::val stride(int pos) const;
2724  inline isl::checked::set subtract(const isl::checked::set &set2) const;
2725  inline isl::checked::union_set subtract(const isl::checked::union_set &uset2) const;
2726  inline isl::checked::set_list to_list() const;
2727  inline isl::checked::set to_set() const;
2728  inline isl::checked::union_set to_union_set() const;
2729  inline isl::checked::map translation() const;
2730  inline class size tuple_dim() const;
2731  inline isl::checked::set unbind_params(const isl::checked::multi_id &tuple) const;
2732  inline isl::checked::map unbind_params_insert_domain(const isl::checked::multi_id &domain) const;
2733  inline isl::checked::set unite(const isl::checked::basic_set &bset2) const;
2734  inline isl::checked::set unite(const isl::checked::set &set2) const;
2735  inline isl::checked::union_set unite(const isl::checked::union_set &uset2) const;
2736  inline isl::checked::basic_set unshifted_simple_hull() const;
2737  inline isl::checked::map unwrap() const;
2738  inline isl::checked::set upper_bound(const isl::checked::multi_pw_aff &upper) const;
2739  inline isl::checked::set upper_bound(const isl::checked::multi_val &upper) const;
2740  inline isl::checked::set wrapped_reverse() const;
2741};
2742
2743// declarations for isl::pw_aff
2744inline pw_aff manage(__isl_take isl_pw_aff *ptr);
2745inline pw_aff manage_copy(__isl_keep isl_pw_aff *ptr);
2746
2747class pw_aff {
2748  friend inline pw_aff manage(__isl_take isl_pw_aff *ptr);
2749  friend inline pw_aff manage_copy(__isl_keep isl_pw_aff *ptr);
2750
2751protected:
2752  isl_pw_aff *ptr = nullptr;
2753
2754  inline explicit pw_aff(__isl_take isl_pw_aff *ptr);
2755
2756public:
2757  inline /* implicit */ pw_aff();
2758  inline /* implicit */ pw_aff(const pw_aff &obj);
2759  inline /* implicit */ pw_aff(isl::checked::aff aff);
2760  inline explicit pw_aff(isl::checked::ctx ctx, const std::string &str);
2761  inline pw_aff &operator=(pw_aff obj);
2762  inline ~pw_aff();
2763  inline __isl_give isl_pw_aff *copy() const &;
2764  inline __isl_give isl_pw_aff *copy() && = delete;
2765  inline __isl_keep isl_pw_aff *get() const;
2766  inline __isl_give isl_pw_aff *release();
2767  inline bool is_null() const;
2768  inline isl::checked::ctx ctx() const;
2769
2770  inline isl::checked::multi_pw_aff add(const isl::checked::multi_pw_aff &multi2) const;
2771  inline isl::checked::multi_union_pw_aff add(const isl::checked::multi_union_pw_aff &multi2) const;
2772  inline isl::checked::pw_aff add(isl::checked::pw_aff pwaff2) const;
2773  inline isl::checked::pw_multi_aff add(const isl::checked::pw_multi_aff &pma2) const;
2774  inline isl::checked::union_pw_aff add(const isl::checked::union_pw_aff &upa2) const;
2775  inline isl::checked::union_pw_multi_aff add(const isl::checked::union_pw_multi_aff &upma2) const;
2776  inline isl::checked::pw_aff add(const isl::checked::aff &pwaff2) const;
2777  inline isl::checked::pw_aff add_constant(isl::checked::val v) const;
2778  inline isl::checked::pw_aff add_constant(long v) const;
2779  inline isl::checked::pw_multi_aff add_constant(const isl::checked::multi_val &mv) const;
2780  inline isl::checked::union_pw_multi_aff apply(const isl::checked::union_pw_multi_aff &upma2) const;
2781  inline isl::checked::aff as_aff() const;
2782  inline isl::checked::map as_map() const;
2783  inline isl::checked::multi_aff as_multi_aff() const;
2784  inline isl::checked::multi_union_pw_aff as_multi_union_pw_aff() const;
2785  inline isl::checked::pw_multi_aff as_pw_multi_aff() const;
2786  inline isl::checked::set as_set() const;
2787  inline isl::checked::union_map as_union_map() const;
2788  inline isl::checked::pw_aff at(int pos) const;
2789  inline isl::checked::set bind(const isl::checked::multi_id &tuple) const;
2790  inline isl::checked::set bind(isl::checked::id id) const;
2791  inline isl::checked::set bind(const std::string &id) const;
2792  inline isl::checked::pw_aff bind_domain(isl::checked::multi_id tuple) const;
2793  inline isl::checked::pw_aff bind_domain_wrapped_domain(isl::checked::multi_id tuple) const;
2794  inline isl::checked::pw_aff ceil() const;
2795  inline isl::checked::pw_aff coalesce() const;
2796  inline isl::checked::pw_aff cond(isl::checked::pw_aff pwaff_true, isl::checked::pw_aff pwaff_false) const;
2797  inline isl::checked::pw_aff div(isl::checked::pw_aff pa2) const;
2798  inline isl::checked::set domain() const;
2799  inline isl::checked::pw_aff domain_reverse() const;
2800  inline isl::checked::pw_aff drop_unused_params() const;
2801  inline isl::checked::set eq_set(isl::checked::pw_aff pwaff2) const;
2802  inline isl::checked::val eval(isl::checked::point pnt) const;
2803  inline isl::checked::pw_multi_aff extract_pw_multi_aff(const isl::checked::space &space) const;
2804  inline isl::checked::multi_pw_aff flat_range_product(const isl::checked::multi_pw_aff &multi2) const;
2805  inline isl::checked::multi_union_pw_aff flat_range_product(const isl::checked::multi_union_pw_aff &multi2) const;
2806  inline isl::checked::pw_multi_aff flat_range_product(const isl::checked::pw_multi_aff &pma2) const;
2807  inline isl::checked::union_pw_multi_aff flat_range_product(const isl::checked::union_pw_multi_aff &upma2) const;
2808  inline isl::checked::pw_aff floor() const;
2809  inline stat foreach_piece(const std::function<stat(isl::checked::set, isl::checked::multi_aff)> &fn) const;
2810  inline isl::checked::set ge_set(isl::checked::pw_aff pwaff2) const;
2811  inline isl::checked::pw_aff gist(isl::checked::set context) const;
2812  inline isl::checked::union_pw_aff gist(const isl::checked::union_set &context) const;
2813  inline isl::checked::pw_aff gist(const isl::checked::basic_set &context) const;
2814  inline isl::checked::pw_aff gist(const isl::checked::point &context) const;
2815  inline isl::checked::pw_aff gist_params(isl::checked::set context) const;
2816  inline isl::checked::set gt_set(isl::checked::pw_aff pwaff2) const;
2817  inline boolean has_range_tuple_id() const;
2818  inline isl::checked::multi_pw_aff identity() const;
2819  inline isl::checked::pw_aff insert_domain(isl::checked::space domain) const;
2820  inline isl::checked::pw_aff intersect_domain(isl::checked::set set) const;
2821  inline isl::checked::union_pw_aff intersect_domain(const isl::checked::space &space) const;
2822  inline isl::checked::union_pw_aff intersect_domain(const isl::checked::union_set &uset) const;
2823  inline isl::checked::pw_aff intersect_domain(const isl::checked::basic_set &set) const;
2824  inline isl::checked::pw_aff intersect_domain(const isl::checked::point &set) const;
2825  inline isl::checked::union_pw_aff intersect_domain_wrapped_domain(const isl::checked::union_set &uset) const;
2826  inline isl::checked::union_pw_aff intersect_domain_wrapped_range(const isl::checked::union_set &uset) const;
2827  inline isl::checked::pw_aff intersect_params(isl::checked::set set) const;
2828  inline boolean involves_locals() const;
2829  inline boolean involves_nan() const;
2830  inline boolean involves_param(const isl::checked::id &id) const;
2831  inline boolean involves_param(const std::string &id) const;
2832  inline boolean involves_param(const isl::checked::id_list &list) const;
2833  inline boolean isa_aff() const;
2834  inline boolean isa_multi_aff() const;
2835  inline boolean isa_pw_multi_aff() const;
2836  inline isl::checked::set le_set(isl::checked::pw_aff pwaff2) const;
2837  inline isl::checked::pw_aff_list list() const;
2838  inline isl::checked::set lt_set(isl::checked::pw_aff pwaff2) const;
2839  inline isl::checked::multi_pw_aff max(const isl::checked::multi_pw_aff &multi2) const;
2840  inline isl::checked::pw_aff max(isl::checked::pw_aff pwaff2) const;
2841  inline isl::checked::pw_aff max(const isl::checked::aff &pwaff2) const;
2842  inline isl::checked::multi_val max_multi_val() const;
2843  inline isl::checked::val max_val() const;
2844  inline isl::checked::multi_pw_aff min(const isl::checked::multi_pw_aff &multi2) const;
2845  inline isl::checked::pw_aff min(isl::checked::pw_aff pwaff2) const;
2846  inline isl::checked::pw_aff min(const isl::checked::aff &pwaff2) const;
2847  inline isl::checked::multi_val min_multi_val() const;
2848  inline isl::checked::val min_val() const;
2849  inline isl::checked::pw_aff mod(isl::checked::val mod) const;
2850  inline isl::checked::pw_aff mod(long mod) const;
2851  inline isl::checked::pw_aff mul(isl::checked::pw_aff pwaff2) const;
2852  inline class size n_piece() const;
2853  inline isl::checked::set ne_set(isl::checked::pw_aff pwaff2) const;
2854  inline isl::checked::pw_aff neg() const;
2855  static inline isl::checked::pw_aff param_on_domain(isl::checked::set domain, isl::checked::id id);
2856  inline isl::checked::set params() const;
2857  inline boolean plain_is_empty() const;
2858  inline boolean plain_is_equal(const isl::checked::multi_pw_aff &multi2) const;
2859  inline boolean plain_is_equal(const isl::checked::multi_union_pw_aff &multi2) const;
2860  inline boolean plain_is_equal(const isl::checked::pw_aff &pwaff2) const;
2861  inline boolean plain_is_equal(const isl::checked::pw_multi_aff &pma2) const;
2862  inline boolean plain_is_equal(const isl::checked::union_pw_aff &upa2) const;
2863  inline boolean plain_is_equal(const isl::checked::union_pw_multi_aff &upma2) const;
2864  inline boolean plain_is_equal(const isl::checked::aff &pwaff2) const;
2865  inline isl::checked::pw_multi_aff preimage_domain_wrapped_domain(const isl::checked::pw_multi_aff &pma2) const;
2866  inline isl::checked::union_pw_multi_aff preimage_domain_wrapped_domain(const isl::checked::union_pw_multi_aff &upma2) const;
2867  inline isl::checked::multi_pw_aff product(const isl::checked::multi_pw_aff &multi2) const;
2868  inline isl::checked::pw_multi_aff product(const isl::checked::pw_multi_aff &pma2) const;
2869  inline isl::checked::pw_aff pullback(isl::checked::multi_aff ma) const;
2870  inline isl::checked::pw_aff pullback(isl::checked::multi_pw_aff mpa) const;
2871  inline isl::checked::pw_aff pullback(isl::checked::pw_multi_aff pma) const;
2872  inline isl::checked::union_pw_aff pullback(const isl::checked::union_pw_multi_aff &upma) const;
2873  inline isl::checked::pw_multi_aff_list pw_multi_aff_list() const;
2874  inline isl::checked::pw_multi_aff range_factor_domain() const;
2875  inline isl::checked::pw_multi_aff range_factor_range() const;
2876  inline isl::checked::multi_pw_aff range_product(const isl::checked::multi_pw_aff &multi2) const;
2877  inline isl::checked::multi_union_pw_aff range_product(const isl::checked::multi_union_pw_aff &multi2) const;
2878  inline isl::checked::pw_multi_aff range_product(const isl::checked::pw_multi_aff &pma2) const;
2879  inline isl::checked::union_pw_multi_aff range_product(const isl::checked::union_pw_multi_aff &upma2) const;
2880  inline isl::checked::id range_tuple_id() const;
2881  inline isl::checked::multi_pw_aff reset_range_tuple_id() const;
2882  inline isl::checked::pw_aff scale(isl::checked::val v) const;
2883  inline isl::checked::pw_aff scale(long v) const;
2884  inline isl::checked::pw_multi_aff scale(const isl::checked::multi_val &mv) const;
2885  inline isl::checked::pw_aff scale_down(isl::checked::val f) const;
2886  inline isl::checked::pw_aff scale_down(long f) const;
2887  inline isl::checked::pw_multi_aff scale_down(const isl::checked::multi_val &mv) const;
2888  inline isl::checked::multi_pw_aff set_at(int pos, const isl::checked::pw_aff &el) const;
2889  inline isl::checked::multi_union_pw_aff set_at(int pos, const isl::checked::union_pw_aff &el) const;
2890  inline isl::checked::pw_multi_aff set_range_tuple(const isl::checked::id &id) const;
2891  inline isl::checked::pw_multi_aff set_range_tuple(const std::string &id) const;
2892  inline class size size() const;
2893  inline isl::checked::space space() const;
2894  inline isl::checked::space get_space() const;
2895  inline isl::checked::multi_pw_aff sub(const isl::checked::multi_pw_aff &multi2) const;
2896  inline isl::checked::multi_union_pw_aff sub(const isl::checked::multi_union_pw_aff &multi2) const;
2897  inline isl::checked::pw_aff sub(isl::checked::pw_aff pwaff2) const;
2898  inline isl::checked::pw_multi_aff sub(const isl::checked::pw_multi_aff &pma2) const;
2899  inline isl::checked::union_pw_aff sub(const isl::checked::union_pw_aff &upa2) const;
2900  inline isl::checked::union_pw_multi_aff sub(const isl::checked::union_pw_multi_aff &upma2) const;
2901  inline isl::checked::pw_aff sub(const isl::checked::aff &pwaff2) const;
2902  inline isl::checked::pw_aff subtract_domain(isl::checked::set set) const;
2903  inline isl::checked::union_pw_aff subtract_domain(const isl::checked::space &space) const;
2904  inline isl::checked::union_pw_aff subtract_domain(const isl::checked::union_set &uset) const;
2905  inline isl::checked::pw_aff subtract_domain(const isl::checked::basic_set &set) const;
2906  inline isl::checked::pw_aff subtract_domain(const isl::checked::point &set) const;
2907  inline isl::checked::pw_aff tdiv_q(isl::checked::pw_aff pa2) const;
2908  inline isl::checked::pw_aff tdiv_r(isl::checked::pw_aff pa2) const;
2909  inline isl::checked::pw_aff_list to_list() const;
2910  inline isl::checked::multi_pw_aff to_multi_pw_aff() const;
2911  inline isl::checked::union_pw_aff to_union_pw_aff() const;
2912  inline isl::checked::union_pw_multi_aff to_union_pw_multi_aff() const;
2913  inline isl::checked::multi_pw_aff unbind_params_insert_domain(const isl::checked::multi_id &domain) const;
2914  inline isl::checked::multi_pw_aff union_add(const isl::checked::multi_pw_aff &mpa2) const;
2915  inline isl::checked::multi_union_pw_aff union_add(const isl::checked::multi_union_pw_aff &mupa2) const;
2916  inline isl::checked::pw_aff union_add(isl::checked::pw_aff pwaff2) const;
2917  inline isl::checked::pw_multi_aff union_add(const isl::checked::pw_multi_aff &pma2) const;
2918  inline isl::checked::union_pw_aff union_add(const isl::checked::union_pw_aff &upa2) const;
2919  inline isl::checked::union_pw_multi_aff union_add(const isl::checked::union_pw_multi_aff &upma2) const;
2920  inline isl::checked::pw_aff union_add(const isl::checked::aff &pwaff2) const;
2921};
2922
2923// declarations for isl::pw_aff_list
2924inline pw_aff_list manage(__isl_take isl_pw_aff_list *ptr);
2925inline pw_aff_list manage_copy(__isl_keep isl_pw_aff_list *ptr);
2926
2927class pw_aff_list {
2928  friend inline pw_aff_list manage(__isl_take isl_pw_aff_list *ptr);
2929  friend inline pw_aff_list manage_copy(__isl_keep isl_pw_aff_list *ptr);
2930
2931protected:
2932  isl_pw_aff_list *ptr = nullptr;
2933
2934  inline explicit pw_aff_list(__isl_take isl_pw_aff_list *ptr);
2935
2936public:
2937  inline /* implicit */ pw_aff_list();
2938  inline /* implicit */ pw_aff_list(const pw_aff_list &obj);
2939  inline explicit pw_aff_list(isl::checked::ctx ctx, int n);
2940  inline explicit pw_aff_list(isl::checked::pw_aff el);
2941  inline explicit pw_aff_list(isl::checked::ctx ctx, const std::string &str);
2942  inline pw_aff_list &operator=(pw_aff_list obj);
2943  inline ~pw_aff_list();
2944  inline __isl_give isl_pw_aff_list *copy() const &;
2945  inline __isl_give isl_pw_aff_list *copy() && = delete;
2946  inline __isl_keep isl_pw_aff_list *get() const;
2947  inline __isl_give isl_pw_aff_list *release();
2948  inline bool is_null() const;
2949  inline isl::checked::ctx ctx() const;
2950
2951  inline isl::checked::pw_aff_list add(isl::checked::pw_aff el) const;
2952  inline isl::checked::pw_aff at(int index) const;
2953  inline isl::checked::pw_aff get_at(int index) const;
2954  inline isl::checked::pw_aff_list clear() const;
2955  inline isl::checked::pw_aff_list concat(isl::checked::pw_aff_list list2) const;
2956  inline isl::checked::pw_aff_list drop(unsigned int first, unsigned int n) const;
2957  inline stat foreach(const std::function<stat(isl::checked::pw_aff)> &fn) const;
2958  inline stat foreach_scc(const std::function<boolean(isl::checked::pw_aff, isl::checked::pw_aff)> &follows, const std::function<stat(isl::checked::pw_aff_list)> &fn) const;
2959  inline isl::checked::pw_aff_list insert(unsigned int pos, isl::checked::pw_aff el) const;
2960  inline isl::checked::pw_aff_list set_at(int index, isl::checked::pw_aff el) const;
2961  inline class size size() const;
2962};
2963
2964// declarations for isl::pw_multi_aff
2965inline pw_multi_aff manage(__isl_take isl_pw_multi_aff *ptr);
2966inline pw_multi_aff manage_copy(__isl_keep isl_pw_multi_aff *ptr);
2967
2968class pw_multi_aff {
2969  friend inline pw_multi_aff manage(__isl_take isl_pw_multi_aff *ptr);
2970  friend inline pw_multi_aff manage_copy(__isl_keep isl_pw_multi_aff *ptr);
2971
2972protected:
2973  isl_pw_multi_aff *ptr = nullptr;
2974
2975  inline explicit pw_multi_aff(__isl_take isl_pw_multi_aff *ptr);
2976
2977public:
2978  inline /* implicit */ pw_multi_aff();
2979  inline /* implicit */ pw_multi_aff(const pw_multi_aff &obj);
2980  inline /* implicit */ pw_multi_aff(isl::checked::multi_aff ma);
2981  inline /* implicit */ pw_multi_aff(isl::checked::pw_aff pa);
2982  inline explicit pw_multi_aff(isl::checked::ctx ctx, const std::string &str);
2983  inline pw_multi_aff &operator=(pw_multi_aff obj);
2984  inline ~pw_multi_aff();
2985  inline __isl_give isl_pw_multi_aff *copy() const &;
2986  inline __isl_give isl_pw_multi_aff *copy() && = delete;
2987  inline __isl_keep isl_pw_multi_aff *get() const;
2988  inline __isl_give isl_pw_multi_aff *release();
2989  inline bool is_null() const;
2990  inline isl::checked::ctx ctx() const;
2991
2992  inline isl::checked::multi_pw_aff add(const isl::checked::multi_pw_aff &multi2) const;
2993  inline isl::checked::multi_union_pw_aff add(const isl::checked::multi_union_pw_aff &multi2) const;
2994  inline isl::checked::pw_multi_aff add(isl::checked::pw_multi_aff pma2) const;
2995  inline isl::checked::union_pw_multi_aff add(const isl::checked::union_pw_multi_aff &upma2) const;
2996  inline isl::checked::pw_multi_aff add(const isl::checked::multi_aff &pma2) const;
2997  inline isl::checked::pw_multi_aff add(const isl::checked::pw_aff &pma2) const;
2998  inline isl::checked::pw_multi_aff add_constant(isl::checked::multi_val mv) const;
2999  inline isl::checked::pw_multi_aff add_constant(isl::checked::val v) const;
3000  inline isl::checked::pw_multi_aff add_constant(long v) const;
3001  inline isl::checked::union_pw_multi_aff apply(const isl::checked::union_pw_multi_aff &upma2) const;
3002  inline isl::checked::map as_map() const;
3003  inline isl::checked::multi_aff as_multi_aff() const;
3004  inline isl::checked::multi_union_pw_aff as_multi_union_pw_aff() const;
3005  inline isl::checked::pw_multi_aff as_pw_multi_aff() const;
3006  inline isl::checked::set as_set() const;
3007  inline isl::checked::union_map as_union_map() const;
3008  inline isl::checked::pw_aff at(int pos) const;
3009  inline isl::checked::pw_aff get_at(int pos) const;
3010  inline isl::checked::set bind(const isl::checked::multi_id &tuple) const;
3011  inline isl::checked::pw_multi_aff bind_domain(isl::checked::multi_id tuple) const;
3012  inline isl::checked::pw_multi_aff bind_domain_wrapped_domain(isl::checked::multi_id tuple) const;
3013  inline isl::checked::pw_multi_aff coalesce() const;
3014  inline isl::checked::set domain() const;
3015  static inline isl::checked::pw_multi_aff domain_map(isl::checked::space space);
3016  inline isl::checked::pw_multi_aff domain_reverse() const;
3017  inline isl::checked::pw_multi_aff drop_unused_params() const;
3018  inline isl::checked::pw_multi_aff extract_pw_multi_aff(const isl::checked::space &space) const;
3019  inline isl::checked::multi_pw_aff flat_range_product(const isl::checked::multi_pw_aff &multi2) const;
3020  inline isl::checked::multi_union_pw_aff flat_range_product(const isl::checked::multi_union_pw_aff &multi2) const;
3021  inline isl::checked::pw_multi_aff flat_range_product(isl::checked::pw_multi_aff pma2) const;
3022  inline isl::checked::union_pw_multi_aff flat_range_product(const isl::checked::union_pw_multi_aff &upma2) const;
3023  inline isl::checked::pw_multi_aff flat_range_product(const isl::checked::multi_aff &pma2) const;
3024  inline isl::checked::pw_multi_aff flat_range_product(const isl::checked::pw_aff &pma2) const;
3025  inline stat foreach_piece(const std::function<stat(isl::checked::set, isl::checked::multi_aff)> &fn) const;
3026  inline isl::checked::pw_multi_aff gist(isl::checked::set set) const;
3027  inline isl::checked::union_pw_multi_aff gist(const isl::checked::union_set &context) const;
3028  inline isl::checked::pw_multi_aff gist(const isl::checked::basic_set &set) const;
3029  inline isl::checked::pw_multi_aff gist(const isl::checked::point &set) const;
3030  inline isl::checked::pw_multi_aff gist_params(isl::checked::set set) const;
3031  inline boolean has_range_tuple_id() const;
3032  inline isl::checked::multi_pw_aff identity() const;
3033  static inline isl::checked::pw_multi_aff identity_on_domain(isl::checked::space space);
3034  inline isl::checked::pw_multi_aff insert_domain(isl::checked::space domain) const;
3035  inline isl::checked::pw_multi_aff intersect_domain(isl::checked::set set) const;
3036  inline isl::checked::union_pw_multi_aff intersect_domain(const isl::checked::space &space) const;
3037  inline isl::checked::union_pw_multi_aff intersect_domain(const isl::checked::union_set &uset) const;
3038  inline isl::checked::pw_multi_aff intersect_domain(const isl::checked::basic_set &set) const;
3039  inline isl::checked::pw_multi_aff intersect_domain(const isl::checked::point &set) const;
3040  inline isl::checked::union_pw_multi_aff intersect_domain_wrapped_domain(const isl::checked::union_set &uset) const;
3041  inline isl::checked::union_pw_multi_aff intersect_domain_wrapped_range(const isl::checked::union_set &uset) const;
3042  inline isl::checked::pw_multi_aff intersect_params(isl::checked::set set) const;
3043  inline boolean involves_locals() const;
3044  inline boolean involves_nan() const;
3045  inline boolean involves_param(const isl::checked::id &id) const;
3046  inline boolean involves_param(const std::string &id) const;
3047  inline boolean involves_param(const isl::checked::id_list &list) const;
3048  inline boolean isa_multi_aff() const;
3049  inline boolean isa_pw_multi_aff() const;
3050  inline isl::checked::pw_aff_list list() const;
3051  inline isl::checked::multi_pw_aff max(const isl::checked::multi_pw_aff &multi2) const;
3052  inline isl::checked::multi_val max_multi_val() const;
3053  inline isl::checked::multi_pw_aff min(const isl::checked::multi_pw_aff &multi2) const;
3054  inline isl::checked::multi_val min_multi_val() const;
3055  static inline isl::checked::pw_multi_aff multi_val_on_domain(isl::checked::set domain, isl::checked::multi_val mv);
3056  inline class size n_piece() const;
3057  inline isl::checked::multi_pw_aff neg() const;
3058  inline boolean plain_is_empty() const;
3059  inline boolean plain_is_equal(const isl::checked::multi_pw_aff &multi2) const;
3060  inline boolean plain_is_equal(const isl::checked::multi_union_pw_aff &multi2) const;
3061  inline boolean plain_is_equal(const isl::checked::pw_multi_aff &pma2) const;
3062  inline boolean plain_is_equal(const isl::checked::union_pw_multi_aff &upma2) const;
3063  inline boolean plain_is_equal(const isl::checked::multi_aff &pma2) const;
3064  inline boolean plain_is_equal(const isl::checked::pw_aff &pma2) const;
3065  inline isl::checked::pw_multi_aff preimage_domain_wrapped_domain(isl::checked::pw_multi_aff pma2) const;
3066  inline isl::checked::union_pw_multi_aff preimage_domain_wrapped_domain(const isl::checked::union_pw_multi_aff &upma2) const;
3067  inline isl::checked::pw_multi_aff preimage_domain_wrapped_domain(const isl::checked::multi_aff &pma2) const;
3068  inline isl::checked::pw_multi_aff preimage_domain_wrapped_domain(const isl::checked::pw_aff &pma2) const;
3069  inline isl::checked::multi_pw_aff product(const isl::checked::multi_pw_aff &multi2) const;
3070  inline isl::checked::pw_multi_aff product(isl::checked::pw_multi_aff pma2) const;
3071  inline isl::checked::pw_multi_aff product(const isl::checked::multi_aff &pma2) const;
3072  inline isl::checked::pw_multi_aff product(const isl::checked::pw_aff &pma2) const;
3073  inline isl::checked::multi_pw_aff pullback(const isl::checked::multi_pw_aff &mpa2) const;
3074  inline isl::checked::pw_multi_aff pullback(isl::checked::multi_aff ma) const;
3075  inline isl::checked::pw_multi_aff pullback(isl::checked::pw_multi_aff pma2) const;
3076  inline isl::checked::union_pw_multi_aff pullback(const isl::checked::union_pw_multi_aff &upma2) const;
3077  inline isl::checked::pw_multi_aff_list pw_multi_aff_list() const;
3078  inline isl::checked::pw_multi_aff range_factor_domain() const;
3079  inline isl::checked::pw_multi_aff range_factor_range() const;
3080  static inline isl::checked::pw_multi_aff range_map(isl::checked::space space);
3081  inline isl::checked::multi_pw_aff range_product(const isl::checked::multi_pw_aff &multi2) const;
3082  inline isl::checked::multi_union_pw_aff range_product(const isl::checked::multi_union_pw_aff &multi2) const;
3083  inline isl::checked::pw_multi_aff range_product(isl::checked::pw_multi_aff pma2) const;
3084  inline isl::checked::union_pw_multi_aff range_product(const isl::checked::union_pw_multi_aff &upma2) const;
3085  inline isl::checked::pw_multi_aff range_product(const isl::checked::multi_aff &pma2) const;
3086  inline isl::checked::pw_multi_aff range_product(const isl::checked::pw_aff &pma2) const;
3087  inline isl::checked::id range_tuple_id() const;
3088  inline isl::checked::id get_range_tuple_id() const;
3089  inline isl::checked::multi_pw_aff reset_range_tuple_id() const;
3090  inline isl::checked::pw_multi_aff scale(isl::checked::multi_val mv) const;
3091  inline isl::checked::pw_multi_aff scale(isl::checked::val v) const;
3092  inline isl::checked::pw_multi_aff scale(long v) const;
3093  inline isl::checked::pw_multi_aff scale_down(isl::checked::multi_val mv) const;
3094  inline isl::checked::pw_multi_aff scale_down(isl::checked::val v) const;
3095  inline isl::checked::pw_multi_aff scale_down(long v) const;
3096  inline isl::checked::multi_pw_aff set_at(int pos, const isl::checked::pw_aff &el) const;
3097  inline isl::checked::multi_union_pw_aff set_at(int pos, const isl::checked::union_pw_aff &el) const;
3098  inline isl::checked::pw_multi_aff set_range_tuple(isl::checked::id id) const;
3099  inline isl::checked::pw_multi_aff set_range_tuple(const std::string &id) const;
3100  inline class size size() const;
3101  inline isl::checked::space space() const;
3102  inline isl::checked::space get_space() const;
3103  inline isl::checked::multi_pw_aff sub(const isl::checked::multi_pw_aff &multi2) const;
3104  inline isl::checked::multi_union_pw_aff sub(const isl::checked::multi_union_pw_aff &multi2) const;
3105  inline isl::checked::pw_multi_aff sub(isl::checked::pw_multi_aff pma2) const;
3106  inline isl::checked::union_pw_multi_aff sub(const isl::checked::union_pw_multi_aff &upma2) const;
3107  inline isl::checked::pw_multi_aff sub(const isl::checked::multi_aff &pma2) const;
3108  inline isl::checked::pw_multi_aff sub(const isl::checked::pw_aff &pma2) const;
3109  inline isl::checked::pw_multi_aff subtract_domain(isl::checked::set set) const;
3110  inline isl::checked::union_pw_multi_aff subtract_domain(const isl::checked::space &space) const;
3111  inline isl::checked::union_pw_multi_aff subtract_domain(const isl::checked::union_set &uset) const;
3112  inline isl::checked::pw_multi_aff subtract_domain(const isl::checked::basic_set &set) const;
3113  inline isl::checked::pw_multi_aff subtract_domain(const isl::checked::point &set) const;
3114  inline isl::checked::pw_multi_aff_list to_list() const;
3115  inline isl::checked::multi_pw_aff to_multi_pw_aff() const;
3116  inline isl::checked::union_pw_multi_aff to_union_pw_multi_aff() const;
3117  inline isl::checked::multi_pw_aff unbind_params_insert_domain(const isl::checked::multi_id &domain) const;
3118  inline isl::checked::multi_pw_aff union_add(const isl::checked::multi_pw_aff &mpa2) const;
3119  inline isl::checked::multi_union_pw_aff union_add(const isl::checked::multi_union_pw_aff &mupa2) const;
3120  inline isl::checked::pw_multi_aff union_add(isl::checked::pw_multi_aff pma2) const;
3121  inline isl::checked::union_pw_multi_aff union_add(const isl::checked::union_pw_multi_aff &upma2) const;
3122  inline isl::checked::pw_multi_aff union_add(const isl::checked::multi_aff &pma2) const;
3123  inline isl::checked::pw_multi_aff union_add(const isl::checked::pw_aff &pma2) const;
3124  static inline isl::checked::pw_multi_aff zero(isl::checked::space space);
3125};
3126
3127// declarations for isl::pw_multi_aff_list
3128inline pw_multi_aff_list manage(__isl_take isl_pw_multi_aff_list *ptr);
3129inline pw_multi_aff_list manage_copy(__isl_keep isl_pw_multi_aff_list *ptr);
3130
3131class pw_multi_aff_list {
3132  friend inline pw_multi_aff_list manage(__isl_take isl_pw_multi_aff_list *ptr);
3133  friend inline pw_multi_aff_list manage_copy(__isl_keep isl_pw_multi_aff_list *ptr);
3134
3135protected:
3136  isl_pw_multi_aff_list *ptr = nullptr;
3137
3138  inline explicit pw_multi_aff_list(__isl_take isl_pw_multi_aff_list *ptr);
3139
3140public:
3141  inline /* implicit */ pw_multi_aff_list();
3142  inline /* implicit */ pw_multi_aff_list(const pw_multi_aff_list &obj);
3143  inline explicit pw_multi_aff_list(isl::checked::ctx ctx, int n);
3144  inline explicit pw_multi_aff_list(isl::checked::pw_multi_aff el);
3145  inline explicit pw_multi_aff_list(isl::checked::ctx ctx, const std::string &str);
3146  inline pw_multi_aff_list &operator=(pw_multi_aff_list obj);
3147  inline ~pw_multi_aff_list();
3148  inline __isl_give isl_pw_multi_aff_list *copy() const &;
3149  inline __isl_give isl_pw_multi_aff_list *copy() && = delete;
3150  inline __isl_keep isl_pw_multi_aff_list *get() const;
3151  inline __isl_give isl_pw_multi_aff_list *release();
3152  inline bool is_null() const;
3153  inline isl::checked::ctx ctx() const;
3154
3155  inline isl::checked::pw_multi_aff_list add(isl::checked::pw_multi_aff el) const;
3156  inline isl::checked::pw_multi_aff at(int index) const;
3157  inline isl::checked::pw_multi_aff get_at(int index) const;
3158  inline isl::checked::pw_multi_aff_list clear() const;
3159  inline isl::checked::pw_multi_aff_list concat(isl::checked::pw_multi_aff_list list2) const;
3160  inline isl::checked::pw_multi_aff_list drop(unsigned int first, unsigned int n) const;
3161  inline stat foreach(const std::function<stat(isl::checked::pw_multi_aff)> &fn) const;
3162  inline stat foreach_scc(const std::function<boolean(isl::checked::pw_multi_aff, isl::checked::pw_multi_aff)> &follows, const std::function<stat(isl::checked::pw_multi_aff_list)> &fn) const;
3163  inline isl::checked::pw_multi_aff_list insert(unsigned int pos, isl::checked::pw_multi_aff el) const;
3164  inline isl::checked::pw_multi_aff_list set_at(int index, isl::checked::pw_multi_aff el) const;
3165  inline class size size() const;
3166};
3167
3168// declarations for isl::schedule
3169inline schedule manage(__isl_take isl_schedule *ptr);
3170inline schedule manage_copy(__isl_keep isl_schedule *ptr);
3171
3172class schedule {
3173  friend inline schedule manage(__isl_take isl_schedule *ptr);
3174  friend inline schedule manage_copy(__isl_keep isl_schedule *ptr);
3175
3176protected:
3177  isl_schedule *ptr = nullptr;
3178
3179  inline explicit schedule(__isl_take isl_schedule *ptr);
3180
3181public:
3182  inline /* implicit */ schedule();
3183  inline /* implicit */ schedule(const schedule &obj);
3184  inline explicit schedule(isl::checked::ctx ctx, const std::string &str);
3185  inline schedule &operator=(schedule obj);
3186  inline ~schedule();
3187  inline __isl_give isl_schedule *copy() const &;
3188  inline __isl_give isl_schedule *copy() && = delete;
3189  inline __isl_keep isl_schedule *get() const;
3190  inline __isl_give isl_schedule *release();
3191  inline bool is_null() const;
3192  inline isl::checked::ctx ctx() const;
3193
3194  inline isl::checked::union_set domain() const;
3195  inline isl::checked::union_set get_domain() const;
3196  static inline isl::checked::schedule from_domain(isl::checked::union_set domain);
3197  inline isl::checked::union_map map() const;
3198  inline isl::checked::union_map get_map() const;
3199  inline isl::checked::schedule pullback(isl::checked::union_pw_multi_aff upma) const;
3200  inline isl::checked::schedule_node root() const;
3201  inline isl::checked::schedule_node get_root() const;
3202};
3203
3204// declarations for isl::schedule_constraints
3205inline schedule_constraints manage(__isl_take isl_schedule_constraints *ptr);
3206inline schedule_constraints manage_copy(__isl_keep isl_schedule_constraints *ptr);
3207
3208class schedule_constraints {
3209  friend inline schedule_constraints manage(__isl_take isl_schedule_constraints *ptr);
3210  friend inline schedule_constraints manage_copy(__isl_keep isl_schedule_constraints *ptr);
3211
3212protected:
3213  isl_schedule_constraints *ptr = nullptr;
3214
3215  inline explicit schedule_constraints(__isl_take isl_schedule_constraints *ptr);
3216
3217public:
3218  inline /* implicit */ schedule_constraints();
3219  inline /* implicit */ schedule_constraints(const schedule_constraints &obj);
3220  inline explicit schedule_constraints(isl::checked::ctx ctx, const std::string &str);
3221  inline schedule_constraints &operator=(schedule_constraints obj);
3222  inline ~schedule_constraints();
3223  inline __isl_give isl_schedule_constraints *copy() const &;
3224  inline __isl_give isl_schedule_constraints *copy() && = delete;
3225  inline __isl_keep isl_schedule_constraints *get() const;
3226  inline __isl_give isl_schedule_constraints *release();
3227  inline bool is_null() const;
3228  inline isl::checked::ctx ctx() const;
3229
3230  inline isl::checked::union_map coincidence() const;
3231  inline isl::checked::union_map get_coincidence() const;
3232  inline isl::checked::schedule compute_schedule() const;
3233  inline isl::checked::union_map conditional_validity() const;
3234  inline isl::checked::union_map get_conditional_validity() const;
3235  inline isl::checked::union_map conditional_validity_condition() const;
3236  inline isl::checked::union_map get_conditional_validity_condition() const;
3237  inline isl::checked::set context() const;
3238  inline isl::checked::set get_context() const;
3239  inline isl::checked::union_set domain() const;
3240  inline isl::checked::union_set get_domain() const;
3241  static inline isl::checked::schedule_constraints on_domain(isl::checked::union_set domain);
3242  inline isl::checked::union_map proximity() const;
3243  inline isl::checked::union_map get_proximity() const;
3244  inline isl::checked::schedule_constraints set_coincidence(isl::checked::union_map coincidence) const;
3245  inline isl::checked::schedule_constraints set_conditional_validity(isl::checked::union_map condition, isl::checked::union_map validity) const;
3246  inline isl::checked::schedule_constraints set_context(isl::checked::set context) const;
3247  inline isl::checked::schedule_constraints set_proximity(isl::checked::union_map proximity) const;
3248  inline isl::checked::schedule_constraints set_validity(isl::checked::union_map validity) const;
3249  inline isl::checked::union_map validity() const;
3250  inline isl::checked::union_map get_validity() const;
3251};
3252
3253// declarations for isl::schedule_node
3254inline schedule_node manage(__isl_take isl_schedule_node *ptr);
3255inline schedule_node manage_copy(__isl_keep isl_schedule_node *ptr);
3256
3257class schedule_node {
3258  friend inline schedule_node manage(__isl_take isl_schedule_node *ptr);
3259  friend inline schedule_node manage_copy(__isl_keep isl_schedule_node *ptr);
3260
3261protected:
3262  isl_schedule_node *ptr = nullptr;
3263
3264  inline explicit schedule_node(__isl_take isl_schedule_node *ptr);
3265
3266public:
3267  inline /* implicit */ schedule_node();
3268  inline /* implicit */ schedule_node(const schedule_node &obj);
3269  inline schedule_node &operator=(schedule_node obj);
3270  inline ~schedule_node();
3271  inline __isl_give isl_schedule_node *copy() const &;
3272  inline __isl_give isl_schedule_node *copy() && = delete;
3273  inline __isl_keep isl_schedule_node *get() const;
3274  inline __isl_give isl_schedule_node *release();
3275  inline bool is_null() const;
3276private:
3277  template <typename T,
3278          typename = typename std::enable_if<std::is_same<
3279                  const decltype(isl_schedule_node_get_type(NULL)),
3280                  const T>::value>::type>
3281  inline boolean isa_type(T subtype) const;
3282public:
3283  template <class T> inline boolean isa() const;
3284  template <class T> inline T as() const;
3285  inline isl::checked::ctx ctx() const;
3286
3287  inline isl::checked::schedule_node ancestor(int generation) const;
3288  inline class size ancestor_child_position(const isl::checked::schedule_node &ancestor) const;
3289  inline class size get_ancestor_child_position(const isl::checked::schedule_node &ancestor) const;
3290  inline isl::checked::schedule_node child(int pos) const;
3291  inline class size child_position() const;
3292  inline class size get_child_position() const;
3293  inline boolean every_descendant(const std::function<boolean(isl::checked::schedule_node)> &test) const;
3294  inline isl::checked::schedule_node first_child() const;
3295  inline stat foreach_ancestor_top_down(const std::function<stat(isl::checked::schedule_node)> &fn) const;
3296  inline stat foreach_descendant_top_down(const std::function<boolean(isl::checked::schedule_node)> &fn) const;
3297  static inline isl::checked::schedule_node from_domain(isl::checked::union_set domain);
3298  static inline isl::checked::schedule_node from_extension(isl::checked::union_map extension);
3299  inline isl::checked::schedule_node graft_after(isl::checked::schedule_node graft) const;
3300  inline isl::checked::schedule_node graft_before(isl::checked::schedule_node graft) const;
3301  inline boolean has_children() const;
3302  inline boolean has_next_sibling() const;
3303  inline boolean has_parent() const;
3304  inline boolean has_previous_sibling() const;
3305  inline isl::checked::schedule_node insert_context(isl::checked::set context) const;
3306  inline isl::checked::schedule_node insert_filter(isl::checked::union_set filter) const;
3307  inline isl::checked::schedule_node insert_guard(isl::checked::set context) const;
3308  inline isl::checked::schedule_node insert_mark(isl::checked::id mark) const;
3309  inline isl::checked::schedule_node insert_mark(const std::string &mark) const;
3310  inline isl::checked::schedule_node insert_partial_schedule(isl::checked::multi_union_pw_aff schedule) const;
3311  inline isl::checked::schedule_node insert_sequence(isl::checked::union_set_list filters) const;
3312  inline isl::checked::schedule_node insert_set(isl::checked::union_set_list filters) const;
3313  inline boolean is_equal(const isl::checked::schedule_node &node2) const;
3314  inline boolean is_subtree_anchored() const;
3315  inline isl::checked::schedule_node map_descendant_bottom_up(const std::function<isl::checked::schedule_node(isl::checked::schedule_node)> &fn) const;
3316  inline class size n_children() const;
3317  inline isl::checked::schedule_node next_sibling() const;
3318  inline isl::checked::schedule_node order_after(isl::checked::union_set filter) const;
3319  inline isl::checked::schedule_node order_before(isl::checked::union_set filter) const;
3320  inline isl::checked::schedule_node parent() const;
3321  inline isl::checked::multi_union_pw_aff prefix_schedule_multi_union_pw_aff() const;
3322  inline isl::checked::multi_union_pw_aff get_prefix_schedule_multi_union_pw_aff() const;
3323  inline isl::checked::union_map prefix_schedule_union_map() const;
3324  inline isl::checked::union_map get_prefix_schedule_union_map() const;
3325  inline isl::checked::union_pw_multi_aff prefix_schedule_union_pw_multi_aff() const;
3326  inline isl::checked::union_pw_multi_aff get_prefix_schedule_union_pw_multi_aff() const;
3327  inline isl::checked::schedule_node previous_sibling() const;
3328  inline isl::checked::schedule_node root() const;
3329  inline isl::checked::schedule schedule() const;
3330  inline isl::checked::schedule get_schedule() const;
3331  inline isl::checked::schedule_node shared_ancestor(const isl::checked::schedule_node &node2) const;
3332  inline isl::checked::schedule_node get_shared_ancestor(const isl::checked::schedule_node &node2) const;
3333  inline class size tree_depth() const;
3334  inline class size get_tree_depth() const;
3335};
3336
3337// declarations for isl::schedule_node_band
3338
3339class schedule_node_band : public schedule_node {
3340  template <class T>
3341  friend boolean schedule_node::isa() const;
3342  friend schedule_node_band schedule_node::as<schedule_node_band>() const;
3343  static const auto type = isl_schedule_node_band;
3344
3345protected:
3346  inline explicit schedule_node_band(__isl_take isl_schedule_node *ptr);
3347
3348public:
3349  inline /* implicit */ schedule_node_band();
3350  inline /* implicit */ schedule_node_band(const schedule_node_band &obj);
3351  inline schedule_node_band &operator=(schedule_node_band obj);
3352  inline isl::checked::ctx ctx() const;
3353
3354  inline isl::checked::union_set ast_build_options() const;
3355  inline isl::checked::union_set get_ast_build_options() const;
3356  inline isl::checked::set ast_isolate_option() const;
3357  inline isl::checked::set get_ast_isolate_option() const;
3358  inline boolean member_get_coincident(int pos) const;
3359  inline schedule_node_band member_set_coincident(int pos, int coincident) const;
3360  inline schedule_node_band mod(isl::checked::multi_val mv) const;
3361  inline class size n_member() const;
3362  inline isl::checked::multi_union_pw_aff partial_schedule() const;
3363  inline isl::checked::multi_union_pw_aff get_partial_schedule() const;
3364  inline boolean permutable() const;
3365  inline boolean get_permutable() const;
3366  inline schedule_node_band scale(isl::checked::multi_val mv) const;
3367  inline schedule_node_band scale_down(isl::checked::multi_val mv) const;
3368  inline schedule_node_band set_ast_build_options(isl::checked::union_set options) const;
3369  inline schedule_node_band set_permutable(int permutable) const;
3370  inline schedule_node_band shift(isl::checked::multi_union_pw_aff shift) const;
3371  inline schedule_node_band split(int pos) const;
3372  inline schedule_node_band tile(isl::checked::multi_val sizes) const;
3373  inline schedule_node_band member_set_ast_loop_default(int pos) const;
3374  inline schedule_node_band member_set_ast_loop_atomic(int pos) const;
3375  inline schedule_node_band member_set_ast_loop_unroll(int pos) const;
3376  inline schedule_node_band member_set_ast_loop_separate(int pos) const;
3377};
3378
3379// declarations for isl::schedule_node_context
3380
3381class schedule_node_context : public schedule_node {
3382  template <class T>
3383  friend boolean schedule_node::isa() const;
3384  friend schedule_node_context schedule_node::as<schedule_node_context>() const;
3385  static const auto type = isl_schedule_node_context;
3386
3387protected:
3388  inline explicit schedule_node_context(__isl_take isl_schedule_node *ptr);
3389
3390public:
3391  inline /* implicit */ schedule_node_context();
3392  inline /* implicit */ schedule_node_context(const schedule_node_context &obj);
3393  inline schedule_node_context &operator=(schedule_node_context obj);
3394  inline isl::checked::ctx ctx() const;
3395
3396  inline isl::checked::set context() const;
3397  inline isl::checked::set get_context() const;
3398};
3399
3400// declarations for isl::schedule_node_domain
3401
3402class schedule_node_domain : public schedule_node {
3403  template <class T>
3404  friend boolean schedule_node::isa() const;
3405  friend schedule_node_domain schedule_node::as<schedule_node_domain>() const;
3406  static const auto type = isl_schedule_node_domain;
3407
3408protected:
3409  inline explicit schedule_node_domain(__isl_take isl_schedule_node *ptr);
3410
3411public:
3412  inline /* implicit */ schedule_node_domain();
3413  inline /* implicit */ schedule_node_domain(const schedule_node_domain &obj);
3414  inline schedule_node_domain &operator=(schedule_node_domain obj);
3415  inline isl::checked::ctx ctx() const;
3416
3417  inline isl::checked::union_set domain() const;
3418  inline isl::checked::union_set get_domain() const;
3419};
3420
3421// declarations for isl::schedule_node_expansion
3422
3423class schedule_node_expansion : public schedule_node {
3424  template <class T>
3425  friend boolean schedule_node::isa() const;
3426  friend schedule_node_expansion schedule_node::as<schedule_node_expansion>() const;
3427  static const auto type = isl_schedule_node_expansion;
3428
3429protected:
3430  inline explicit schedule_node_expansion(__isl_take isl_schedule_node *ptr);
3431
3432public:
3433  inline /* implicit */ schedule_node_expansion();
3434  inline /* implicit */ schedule_node_expansion(const schedule_node_expansion &obj);
3435  inline schedule_node_expansion &operator=(schedule_node_expansion obj);
3436  inline isl::checked::ctx ctx() const;
3437
3438  inline isl::checked::union_pw_multi_aff contraction() const;
3439  inline isl::checked::union_pw_multi_aff get_contraction() const;
3440  inline isl::checked::union_map expansion() const;
3441  inline isl::checked::union_map get_expansion() const;
3442};
3443
3444// declarations for isl::schedule_node_extension
3445
3446class schedule_node_extension : public schedule_node {
3447  template <class T>
3448  friend boolean schedule_node::isa() const;
3449  friend schedule_node_extension schedule_node::as<schedule_node_extension>() const;
3450  static const auto type = isl_schedule_node_extension;
3451
3452protected:
3453  inline explicit schedule_node_extension(__isl_take isl_schedule_node *ptr);
3454
3455public:
3456  inline /* implicit */ schedule_node_extension();
3457  inline /* implicit */ schedule_node_extension(const schedule_node_extension &obj);
3458  inline schedule_node_extension &operator=(schedule_node_extension obj);
3459  inline isl::checked::ctx ctx() const;
3460
3461  inline isl::checked::union_map extension() const;
3462  inline isl::checked::union_map get_extension() const;
3463};
3464
3465// declarations for isl::schedule_node_filter
3466
3467class schedule_node_filter : public schedule_node {
3468  template <class T>
3469  friend boolean schedule_node::isa() const;
3470  friend schedule_node_filter schedule_node::as<schedule_node_filter>() const;
3471  static const auto type = isl_schedule_node_filter;
3472
3473protected:
3474  inline explicit schedule_node_filter(__isl_take isl_schedule_node *ptr);
3475
3476public:
3477  inline /* implicit */ schedule_node_filter();
3478  inline /* implicit */ schedule_node_filter(const schedule_node_filter &obj);
3479  inline schedule_node_filter &operator=(schedule_node_filter obj);
3480  inline isl::checked::ctx ctx() const;
3481
3482  inline isl::checked::union_set filter() const;
3483  inline isl::checked::union_set get_filter() const;
3484};
3485
3486// declarations for isl::schedule_node_guard
3487
3488class schedule_node_guard : public schedule_node {
3489  template <class T>
3490  friend boolean schedule_node::isa() const;
3491  friend schedule_node_guard schedule_node::as<schedule_node_guard>() const;
3492  static const auto type = isl_schedule_node_guard;
3493
3494protected:
3495  inline explicit schedule_node_guard(__isl_take isl_schedule_node *ptr);
3496
3497public:
3498  inline /* implicit */ schedule_node_guard();
3499  inline /* implicit */ schedule_node_guard(const schedule_node_guard &obj);
3500  inline schedule_node_guard &operator=(schedule_node_guard obj);
3501  inline isl::checked::ctx ctx() const;
3502
3503  inline isl::checked::set guard() const;
3504  inline isl::checked::set get_guard() const;
3505};
3506
3507// declarations for isl::schedule_node_leaf
3508
3509class schedule_node_leaf : public schedule_node {
3510  template <class T>
3511  friend boolean schedule_node::isa() const;
3512  friend schedule_node_leaf schedule_node::as<schedule_node_leaf>() const;
3513  static const auto type = isl_schedule_node_leaf;
3514
3515protected:
3516  inline explicit schedule_node_leaf(__isl_take isl_schedule_node *ptr);
3517
3518public:
3519  inline /* implicit */ schedule_node_leaf();
3520  inline /* implicit */ schedule_node_leaf(const schedule_node_leaf &obj);
3521  inline schedule_node_leaf &operator=(schedule_node_leaf obj);
3522  inline isl::checked::ctx ctx() const;
3523
3524};
3525
3526// declarations for isl::schedule_node_mark
3527
3528class schedule_node_mark : public schedule_node {
3529  template <class T>
3530  friend boolean schedule_node::isa() const;
3531  friend schedule_node_mark schedule_node::as<schedule_node_mark>() const;
3532  static const auto type = isl_schedule_node_mark;
3533
3534protected:
3535  inline explicit schedule_node_mark(__isl_take isl_schedule_node *ptr);
3536
3537public:
3538  inline /* implicit */ schedule_node_mark();
3539  inline /* implicit */ schedule_node_mark(const schedule_node_mark &obj);
3540  inline schedule_node_mark &operator=(schedule_node_mark obj);
3541  inline isl::checked::ctx ctx() const;
3542
3543};
3544
3545// declarations for isl::schedule_node_sequence
3546
3547class schedule_node_sequence : public schedule_node {
3548  template <class T>
3549  friend boolean schedule_node::isa() const;
3550  friend schedule_node_sequence schedule_node::as<schedule_node_sequence>() const;
3551  static const auto type = isl_schedule_node_sequence;
3552
3553protected:
3554  inline explicit schedule_node_sequence(__isl_take isl_schedule_node *ptr);
3555
3556public:
3557  inline /* implicit */ schedule_node_sequence();
3558  inline /* implicit */ schedule_node_sequence(const schedule_node_sequence &obj);
3559  inline schedule_node_sequence &operator=(schedule_node_sequence obj);
3560  inline isl::checked::ctx ctx() const;
3561
3562};
3563
3564// declarations for isl::schedule_node_set
3565
3566class schedule_node_set : public schedule_node {
3567  template <class T>
3568  friend boolean schedule_node::isa() const;
3569  friend schedule_node_set schedule_node::as<schedule_node_set>() const;
3570  static const auto type = isl_schedule_node_set;
3571
3572protected:
3573  inline explicit schedule_node_set(__isl_take isl_schedule_node *ptr);
3574
3575public:
3576  inline /* implicit */ schedule_node_set();
3577  inline /* implicit */ schedule_node_set(const schedule_node_set &obj);
3578  inline schedule_node_set &operator=(schedule_node_set obj);
3579  inline isl::checked::ctx ctx() const;
3580
3581};
3582
3583// declarations for isl::set
3584inline set manage(__isl_take isl_set *ptr);
3585inline set manage_copy(__isl_keep isl_set *ptr);
3586
3587class set {
3588  friend inline set manage(__isl_take isl_set *ptr);
3589  friend inline set manage_copy(__isl_keep isl_set *ptr);
3590
3591protected:
3592  isl_set *ptr = nullptr;
3593
3594  inline explicit set(__isl_take isl_set *ptr);
3595
3596public:
3597  inline /* implicit */ set();
3598  inline /* implicit */ set(const set &obj);
3599  inline /* implicit */ set(isl::checked::basic_set bset);
3600  inline /* implicit */ set(isl::checked::point pnt);
3601  inline explicit set(isl::checked::ctx ctx, const std::string &str);
3602  inline set &operator=(set obj);
3603  inline ~set();
3604  inline __isl_give isl_set *copy() const &;
3605  inline __isl_give isl_set *copy() && = delete;
3606  inline __isl_keep isl_set *get() const;
3607  inline __isl_give isl_set *release();
3608  inline bool is_null() const;
3609  inline isl::checked::ctx ctx() const;
3610
3611  inline isl::checked::basic_set affine_hull() const;
3612  inline isl::checked::set apply(isl::checked::map map) const;
3613  inline isl::checked::union_set apply(const isl::checked::union_map &umap) const;
3614  inline isl::checked::set apply(const isl::checked::basic_map &map) const;
3615  inline isl::checked::pw_multi_aff as_pw_multi_aff() const;
3616  inline isl::checked::set as_set() const;
3617  inline isl::checked::set bind(isl::checked::multi_id tuple) const;
3618  inline isl::checked::set coalesce() const;
3619  inline isl::checked::set complement() const;
3620  inline isl::checked::union_set compute_divs() const;
3621  inline isl::checked::set detect_equalities() const;
3622  inline isl::checked::val dim_max_val(int pos) const;
3623  inline isl::checked::val dim_min_val(int pos) const;
3624  inline isl::checked::set drop_unused_params() const;
3625  static inline isl::checked::set empty(isl::checked::space space);
3626  inline boolean every_set(const std::function<boolean(isl::checked::set)> &test) const;
3627  inline isl::checked::set extract_set(const isl::checked::space &space) const;
3628  inline isl::checked::set flatten() const;
3629  inline stat foreach_basic_set(const std::function<stat(isl::checked::basic_set)> &fn) const;
3630  inline stat foreach_point(const std::function<stat(isl::checked::point)> &fn) const;
3631  inline stat foreach_set(const std::function<stat(isl::checked::set)> &fn) const;
3632  inline isl::checked::set gist(isl::checked::set context) const;
3633  inline isl::checked::union_set gist(const isl::checked::union_set &context) const;
3634  inline isl::checked::set gist(const isl::checked::basic_set &context) const;
3635  inline isl::checked::set gist(const isl::checked::point &context) const;
3636  inline isl::checked::set gist_params(isl::checked::set context) const;
3637  inline isl::checked::map identity() const;
3638  inline isl::checked::pw_aff indicator_function() const;
3639  inline isl::checked::map insert_domain(isl::checked::space domain) const;
3640  inline isl::checked::set intersect(isl::checked::set set2) const;
3641  inline isl::checked::union_set intersect(const isl::checked::union_set &uset2) const;
3642  inline isl::checked::set intersect(const isl::checked::basic_set &set2) const;
3643  inline isl::checked::set intersect(const isl::checked::point &set2) const;
3644  inline isl::checked::set intersect_params(isl::checked::set params) const;
3645  inline boolean involves_locals() const;
3646  inline boolean is_disjoint(const isl::checked::set &set2) const;
3647  inline boolean is_disjoint(const isl::checked::union_set &uset2) const;
3648  inline boolean is_disjoint(const isl::checked::basic_set &set2) const;
3649  inline boolean is_disjoint(const isl::checked::point &set2) const;
3650  inline boolean is_empty() const;
3651  inline boolean is_equal(const isl::checked::set &set2) const;
3652  inline boolean is_equal(const isl::checked::union_set &uset2) const;
3653  inline boolean is_equal(const isl::checked::basic_set &set2) const;
3654  inline boolean is_equal(const isl::checked::point &set2) const;
3655  inline boolean is_singleton() const;
3656  inline boolean is_strict_subset(const isl::checked::set &set2) const;
3657  inline boolean is_strict_subset(const isl::checked::union_set &uset2) const;
3658  inline boolean is_strict_subset(const isl::checked::basic_set &set2) const;
3659  inline boolean is_strict_subset(const isl::checked::point &set2) const;
3660  inline boolean is_subset(const isl::checked::set &set2) const;
3661  inline boolean is_subset(const isl::checked::union_set &uset2) const;
3662  inline boolean is_subset(const isl::checked::basic_set &set2) const;
3663  inline boolean is_subset(const isl::checked::point &set2) const;
3664  inline boolean is_wrapping() const;
3665  inline boolean isa_set() const;
3666  inline isl::checked::fixed_box lattice_tile() const;
3667  inline isl::checked::fixed_box get_lattice_tile() const;
3668  inline isl::checked::set lexmax() const;
3669  inline isl::checked::pw_multi_aff lexmax_pw_multi_aff() const;
3670  inline isl::checked::set lexmin() const;
3671  inline isl::checked::pw_multi_aff lexmin_pw_multi_aff() const;
3672  inline isl::checked::set lower_bound(isl::checked::multi_pw_aff lower) const;
3673  inline isl::checked::set lower_bound(isl::checked::multi_val lower) const;
3674  inline isl::checked::multi_pw_aff max_multi_pw_aff() const;
3675  inline isl::checked::val max_val(const isl::checked::aff &obj) const;
3676  inline isl::checked::multi_pw_aff min_multi_pw_aff() const;
3677  inline isl::checked::val min_val(const isl::checked::aff &obj) const;
3678  inline class size n_basic_set() const;
3679  inline isl::checked::pw_aff param_pw_aff_on_domain(isl::checked::id id) const;
3680  inline isl::checked::pw_aff param_pw_aff_on_domain(const std::string &id) const;
3681  inline isl::checked::set params() const;
3682  inline isl::checked::multi_val plain_multi_val_if_fixed() const;
3683  inline isl::checked::multi_val get_plain_multi_val_if_fixed() const;
3684  inline isl::checked::basic_set polyhedral_hull() const;
3685  inline isl::checked::set preimage(isl::checked::multi_aff ma) const;
3686  inline isl::checked::set preimage(isl::checked::multi_pw_aff mpa) const;
3687  inline isl::checked::set preimage(isl::checked::pw_multi_aff pma) const;
3688  inline isl::checked::union_set preimage(const isl::checked::union_pw_multi_aff &upma) const;
3689  inline isl::checked::set product(isl::checked::set set2) const;
3690  inline isl::checked::set project_out_all_params() const;
3691  inline isl::checked::set project_out_param(isl::checked::id id) const;
3692  inline isl::checked::set project_out_param(const std::string &id) const;
3693  inline isl::checked::set project_out_param(isl::checked::id_list list) const;
3694  inline isl::checked::pw_aff pw_aff_on_domain(isl::checked::val v) const;
3695  inline isl::checked::pw_aff pw_aff_on_domain(long v) const;
3696  inline isl::checked::pw_multi_aff pw_multi_aff_on_domain(isl::checked::multi_val mv) const;
3697  inline isl::checked::basic_set sample() const;
3698  inline isl::checked::point sample_point() const;
3699  inline isl::checked::set_list set_list() const;
3700  inline isl::checked::fixed_box simple_fixed_box_hull() const;
3701  inline isl::checked::fixed_box get_simple_fixed_box_hull() const;
3702  inline isl::checked::space space() const;
3703  inline isl::checked::space get_space() const;
3704  inline isl::checked::val stride(int pos) const;
3705  inline isl::checked::val get_stride(int pos) const;
3706  inline isl::checked::set subtract(isl::checked::set set2) const;
3707  inline isl::checked::union_set subtract(const isl::checked::union_set &uset2) const;
3708  inline isl::checked::set subtract(const isl::checked::basic_set &set2) const;
3709  inline isl::checked::set subtract(const isl::checked::point &set2) const;
3710  inline isl::checked::set_list to_list() const;
3711  inline isl::checked::union_set to_union_set() const;
3712  inline isl::checked::map translation() const;
3713  inline class size tuple_dim() const;
3714  inline isl::checked::set unbind_params(isl::checked::multi_id tuple) const;
3715  inline isl::checked::map unbind_params_insert_domain(isl::checked::multi_id domain) const;
3716  inline isl::checked::set unite(isl::checked::set set2) const;
3717  inline isl::checked::union_set unite(const isl::checked::union_set &uset2) const;
3718  inline isl::checked::set unite(const isl::checked::basic_set &set2) const;
3719  inline isl::checked::set unite(const isl::checked::point &set2) const;
3720  static inline isl::checked::set universe(isl::checked::space space);
3721  inline isl::checked::basic_set unshifted_simple_hull() const;
3722  inline isl::checked::map unwrap() const;
3723  inline isl::checked::set upper_bound(isl::checked::multi_pw_aff upper) const;
3724  inline isl::checked::set upper_bound(isl::checked::multi_val upper) const;
3725  inline isl::checked::set wrapped_reverse() const;
3726};
3727
3728// declarations for isl::set_list
3729inline set_list manage(__isl_take isl_set_list *ptr);
3730inline set_list manage_copy(__isl_keep isl_set_list *ptr);
3731
3732class set_list {
3733  friend inline set_list manage(__isl_take isl_set_list *ptr);
3734  friend inline set_list manage_copy(__isl_keep isl_set_list *ptr);
3735
3736protected:
3737  isl_set_list *ptr = nullptr;
3738
3739  inline explicit set_list(__isl_take isl_set_list *ptr);
3740
3741public:
3742  inline /* implicit */ set_list();
3743  inline /* implicit */ set_list(const set_list &obj);
3744  inline explicit set_list(isl::checked::ctx ctx, int n);
3745  inline explicit set_list(isl::checked::set el);
3746  inline explicit set_list(isl::checked::ctx ctx, const std::string &str);
3747  inline set_list &operator=(set_list obj);
3748  inline ~set_list();
3749  inline __isl_give isl_set_list *copy() const &;
3750  inline __isl_give isl_set_list *copy() && = delete;
3751  inline __isl_keep isl_set_list *get() const;
3752  inline __isl_give isl_set_list *release();
3753  inline bool is_null() const;
3754  inline isl::checked::ctx ctx() const;
3755
3756  inline isl::checked::set_list add(isl::checked::set el) const;
3757  inline isl::checked::set at(int index) const;
3758  inline isl::checked::set get_at(int index) const;
3759  inline isl::checked::set_list clear() const;
3760  inline isl::checked::set_list concat(isl::checked::set_list list2) const;
3761  inline isl::checked::set_list drop(unsigned int first, unsigned int n) const;
3762  inline stat foreach(const std::function<stat(isl::checked::set)> &fn) const;
3763  inline stat foreach_scc(const std::function<boolean(isl::checked::set, isl::checked::set)> &follows, const std::function<stat(isl::checked::set_list)> &fn) const;
3764  inline isl::checked::set_list insert(unsigned int pos, isl::checked::set el) const;
3765  inline isl::checked::set_list set_at(int index, isl::checked::set el) const;
3766  inline class size size() const;
3767};
3768
3769// declarations for isl::space
3770inline space manage(__isl_take isl_space *ptr);
3771inline space manage_copy(__isl_keep isl_space *ptr);
3772
3773class space {
3774  friend inline space manage(__isl_take isl_space *ptr);
3775  friend inline space manage_copy(__isl_keep isl_space *ptr);
3776
3777protected:
3778  isl_space *ptr = nullptr;
3779
3780  inline explicit space(__isl_take isl_space *ptr);
3781
3782public:
3783  inline /* implicit */ space();
3784  inline /* implicit */ space(const space &obj);
3785  inline explicit space(isl::checked::ctx ctx, const std::string &str);
3786  inline space &operator=(space obj);
3787  inline ~space();
3788  inline __isl_give isl_space *copy() const &;
3789  inline __isl_give isl_space *copy() && = delete;
3790  inline __isl_keep isl_space *get() const;
3791  inline __isl_give isl_space *release();
3792  inline bool is_null() const;
3793  inline isl::checked::ctx ctx() const;
3794
3795  inline isl::checked::space add_named_tuple(isl::checked::id tuple_id, unsigned int dim) const;
3796  inline isl::checked::space add_named_tuple(const std::string &tuple_id, unsigned int dim) const;
3797  inline isl::checked::space add_param(isl::checked::id id) const;
3798  inline isl::checked::space add_param(const std::string &id) const;
3799  inline isl::checked::space add_unnamed_tuple(unsigned int dim) const;
3800  inline isl::checked::space curry() const;
3801  inline isl::checked::space domain() const;
3802  inline isl::checked::multi_aff domain_map_multi_aff() const;
3803  inline isl::checked::pw_multi_aff domain_map_pw_multi_aff() const;
3804  inline isl::checked::space domain_reverse() const;
3805  inline isl::checked::id domain_tuple_id() const;
3806  inline isl::checked::id get_domain_tuple_id() const;
3807  inline isl::checked::space drop_all_params() const;
3808  inline isl::checked::space flatten_domain() const;
3809  inline isl::checked::space flatten_range() const;
3810  inline boolean has_domain_tuple_id() const;
3811  inline boolean has_range_tuple_id() const;
3812  inline isl::checked::multi_aff identity_multi_aff_on_domain() const;
3813  inline isl::checked::multi_pw_aff identity_multi_pw_aff_on_domain() const;
3814  inline isl::checked::pw_multi_aff identity_pw_multi_aff_on_domain() const;
3815  inline boolean is_equal(const isl::checked::space &space2) const;
3816  inline boolean is_wrapping() const;
3817  inline isl::checked::space map_from_set() const;
3818  inline isl::checked::multi_aff multi_aff(isl::checked::aff_list list) const;
3819  inline isl::checked::multi_aff multi_aff_on_domain(isl::checked::multi_val mv) const;
3820  inline isl::checked::multi_id multi_id(isl::checked::id_list list) const;
3821  inline isl::checked::multi_pw_aff multi_pw_aff(isl::checked::pw_aff_list list) const;
3822  inline isl::checked::multi_union_pw_aff multi_union_pw_aff(isl::checked::union_pw_aff_list list) const;
3823  inline isl::checked::multi_val multi_val(isl::checked::val_list list) const;
3824  inline isl::checked::aff param_aff_on_domain(isl::checked::id id) const;
3825  inline isl::checked::aff param_aff_on_domain(const std::string &id) const;
3826  inline isl::checked::space params() const;
3827  inline isl::checked::space product(isl::checked::space right) const;
3828  inline isl::checked::space range() const;
3829  inline isl::checked::multi_aff range_map_multi_aff() const;
3830  inline isl::checked::pw_multi_aff range_map_pw_multi_aff() const;
3831  inline isl::checked::space range_reverse() const;
3832  inline isl::checked::id range_tuple_id() const;
3833  inline isl::checked::id get_range_tuple_id() const;
3834  inline isl::checked::space reverse() const;
3835  inline isl::checked::space set_domain_tuple(isl::checked::id id) const;
3836  inline isl::checked::space set_domain_tuple(const std::string &id) const;
3837  inline isl::checked::space set_range_tuple(isl::checked::id id) const;
3838  inline isl::checked::space set_range_tuple(const std::string &id) const;
3839  inline isl::checked::space uncurry() const;
3840  static inline isl::checked::space unit(isl::checked::ctx ctx);
3841  inline isl::checked::map universe_map() const;
3842  inline isl::checked::set universe_set() const;
3843  inline isl::checked::space unwrap() const;
3844  inline isl::checked::space wrap() const;
3845  inline isl::checked::space wrapped_reverse() const;
3846  inline isl::checked::aff zero_aff_on_domain() const;
3847  inline isl::checked::multi_aff zero_multi_aff() const;
3848  inline isl::checked::multi_pw_aff zero_multi_pw_aff() const;
3849  inline isl::checked::multi_union_pw_aff zero_multi_union_pw_aff() const;
3850  inline isl::checked::multi_val zero_multi_val() const;
3851};
3852
3853// declarations for isl::union_access_info
3854inline union_access_info manage(__isl_take isl_union_access_info *ptr);
3855inline union_access_info manage_copy(__isl_keep isl_union_access_info *ptr);
3856
3857class union_access_info {
3858  friend inline union_access_info manage(__isl_take isl_union_access_info *ptr);
3859  friend inline union_access_info manage_copy(__isl_keep isl_union_access_info *ptr);
3860
3861protected:
3862  isl_union_access_info *ptr = nullptr;
3863
3864  inline explicit union_access_info(__isl_take isl_union_access_info *ptr);
3865
3866public:
3867  inline /* implicit */ union_access_info();
3868  inline /* implicit */ union_access_info(const union_access_info &obj);
3869  inline explicit union_access_info(isl::checked::union_map sink);
3870  inline union_access_info &operator=(union_access_info obj);
3871  inline ~union_access_info();
3872  inline __isl_give isl_union_access_info *copy() const &;
3873  inline __isl_give isl_union_access_info *copy() && = delete;
3874  inline __isl_keep isl_union_access_info *get() const;
3875  inline __isl_give isl_union_access_info *release();
3876  inline bool is_null() const;
3877  inline isl::checked::ctx ctx() const;
3878
3879  inline isl::checked::union_flow compute_flow() const;
3880  inline isl::checked::union_access_info set_kill(isl::checked::union_map kill) const;
3881  inline isl::checked::union_access_info set_may_source(isl::checked::union_map may_source) const;
3882  inline isl::checked::union_access_info set_must_source(isl::checked::union_map must_source) const;
3883  inline isl::checked::union_access_info set_schedule(isl::checked::schedule schedule) const;
3884  inline isl::checked::union_access_info set_schedule_map(isl::checked::union_map schedule_map) const;
3885};
3886
3887// declarations for isl::union_flow
3888inline union_flow manage(__isl_take isl_union_flow *ptr);
3889inline union_flow manage_copy(__isl_keep isl_union_flow *ptr);
3890
3891class union_flow {
3892  friend inline union_flow manage(__isl_take isl_union_flow *ptr);
3893  friend inline union_flow manage_copy(__isl_keep isl_union_flow *ptr);
3894
3895protected:
3896  isl_union_flow *ptr = nullptr;
3897
3898  inline explicit union_flow(__isl_take isl_union_flow *ptr);
3899
3900public:
3901  inline /* implicit */ union_flow();
3902  inline /* implicit */ union_flow(const union_flow &obj);
3903  inline union_flow &operator=(union_flow obj);
3904  inline ~union_flow();
3905  inline __isl_give isl_union_flow *copy() const &;
3906  inline __isl_give isl_union_flow *copy() && = delete;
3907  inline __isl_keep isl_union_flow *get() const;
3908  inline __isl_give isl_union_flow *release();
3909  inline bool is_null() const;
3910  inline isl::checked::ctx ctx() const;
3911
3912  inline isl::checked::union_map full_may_dependence() const;
3913  inline isl::checked::union_map get_full_may_dependence() const;
3914  inline isl::checked::union_map full_must_dependence() const;
3915  inline isl::checked::union_map get_full_must_dependence() const;
3916  inline isl::checked::union_map may_dependence() const;
3917  inline isl::checked::union_map get_may_dependence() const;
3918  inline isl::checked::union_map may_no_source() const;
3919  inline isl::checked::union_map get_may_no_source() const;
3920  inline isl::checked::union_map must_dependence() const;
3921  inline isl::checked::union_map get_must_dependence() const;
3922  inline isl::checked::union_map must_no_source() const;
3923  inline isl::checked::union_map get_must_no_source() const;
3924};
3925
3926// declarations for isl::union_map
3927inline union_map manage(__isl_take isl_union_map *ptr);
3928inline union_map manage_copy(__isl_keep isl_union_map *ptr);
3929
3930class union_map {
3931  friend inline union_map manage(__isl_take isl_union_map *ptr);
3932  friend inline union_map manage_copy(__isl_keep isl_union_map *ptr);
3933
3934protected:
3935  isl_union_map *ptr = nullptr;
3936
3937  inline explicit union_map(__isl_take isl_union_map *ptr);
3938
3939public:
3940  inline /* implicit */ union_map();
3941  inline /* implicit */ union_map(const union_map &obj);
3942  inline /* implicit */ union_map(isl::checked::basic_map bmap);
3943  inline /* implicit */ union_map(isl::checked::map map);
3944  inline explicit union_map(isl::checked::ctx ctx, const std::string &str);
3945  inline union_map &operator=(union_map obj);
3946  inline ~union_map();
3947  inline __isl_give isl_union_map *copy() const &;
3948  inline __isl_give isl_union_map *copy() && = delete;
3949  inline __isl_keep isl_union_map *get() const;
3950  inline __isl_give isl_union_map *release();
3951  inline bool is_null() const;
3952  inline isl::checked::ctx ctx() const;
3953
3954  inline isl::checked::union_map affine_hull() const;
3955  inline isl::checked::union_map apply_domain(isl::checked::union_map umap2) const;
3956  inline isl::checked::union_map apply_range(isl::checked::union_map umap2) const;
3957  inline isl::checked::map as_map() const;
3958  inline isl::checked::multi_union_pw_aff as_multi_union_pw_aff() const;
3959  inline isl::checked::union_pw_multi_aff as_union_pw_multi_aff() const;
3960  inline isl::checked::union_set bind_range(isl::checked::multi_id tuple) const;
3961  inline isl::checked::union_map coalesce() const;
3962  inline isl::checked::union_map compute_divs() const;
3963  inline isl::checked::union_map curry() const;
3964  inline isl::checked::union_set deltas() const;
3965  inline isl::checked::union_map detect_equalities() const;
3966  inline isl::checked::union_set domain() const;
3967  inline isl::checked::union_map domain_factor_domain() const;
3968  inline isl::checked::union_map domain_factor_range() const;
3969  inline isl::checked::union_map domain_map() const;
3970  inline isl::checked::union_pw_multi_aff domain_map_union_pw_multi_aff() const;
3971  inline isl::checked::union_map domain_product(isl::checked::union_map umap2) const;
3972  inline isl::checked::union_map domain_reverse() const;
3973  inline isl::checked::union_map drop_unused_params() const;
3974  static inline isl::checked::union_map empty(isl::checked::ctx ctx);
3975  inline isl::checked::union_map eq_at(isl::checked::multi_union_pw_aff mupa) const;
3976  inline boolean every_map(const std::function<boolean(isl::checked::map)> &test) const;
3977  inline isl::checked::map extract_map(isl::checked::space space) const;
3978  inline isl::checked::union_map factor_domain() const;
3979  inline isl::checked::union_map factor_range() const;
3980  inline isl::checked::union_map fixed_power(isl::checked::val exp) const;
3981  inline isl::checked::union_map fixed_power(long exp) const;
3982  inline stat foreach_map(const std::function<stat(isl::checked::map)> &fn) const;
3983  static inline isl::checked::union_map from(isl::checked::multi_union_pw_aff mupa);
3984  static inline isl::checked::union_map from(isl::checked::union_pw_multi_aff upma);
3985  static inline isl::checked::union_map from_domain(isl::checked::union_set uset);
3986  static inline isl::checked::union_map from_domain_and_range(isl::checked::union_set domain, isl::checked::union_set range);
3987  static inline isl::checked::union_map from_range(isl::checked::union_set uset);
3988  inline isl::checked::union_map gist(isl::checked::union_map context) const;
3989  inline isl::checked::union_map gist_domain(isl::checked::union_set uset) const;
3990  inline isl::checked::union_map gist_params(isl::checked::set set) const;
3991  inline isl::checked::union_map gist_range(isl::checked::union_set uset) const;
3992  inline isl::checked::union_map intersect(isl::checked::union_map umap2) const;
3993  inline isl::checked::union_map intersect_domain(isl::checked::space space) const;
3994  inline isl::checked::union_map intersect_domain(isl::checked::union_set uset) const;
3995  inline isl::checked::union_map intersect_domain_factor_domain(isl::checked::union_map factor) const;
3996  inline isl::checked::union_map intersect_domain_factor_range(isl::checked::union_map factor) const;
3997  inline isl::checked::union_map intersect_domain_wrapped_domain(isl::checked::union_set domain) const;
3998  inline isl::checked::union_map intersect_params(isl::checked::set set) const;
3999  inline isl::checked::union_map intersect_range(isl::checked::space space) const;
4000  inline isl::checked::union_map intersect_range(isl::checked::union_set uset) const;
4001  inline isl::checked::union_map intersect_range_factor_domain(isl::checked::union_map factor) const;
4002  inline isl::checked::union_map intersect_range_factor_range(isl::checked::union_map factor) const;
4003  inline isl::checked::union_map intersect_range_wrapped_domain(isl::checked::union_set domain) const;
4004  inline boolean is_bijective() const;
4005  inline boolean is_disjoint(const isl::checked::union_map &umap2) const;
4006  inline boolean is_empty() const;
4007  inline boolean is_equal(const isl::checked::union_map &umap2) const;
4008  inline boolean is_injective() const;
4009  inline boolean is_single_valued() const;
4010  inline boolean is_strict_subset(const isl::checked::union_map &umap2) const;
4011  inline boolean is_subset(const isl::checked::union_map &umap2) const;
4012  inline boolean isa_map() const;
4013  inline isl::checked::union_map lexmax() const;
4014  inline isl::checked::union_map lexmin() const;
4015  inline isl::checked::map_list map_list() const;
4016  inline isl::checked::map_list get_map_list() const;
4017  inline isl::checked::set params() const;
4018  inline isl::checked::union_map polyhedral_hull() const;
4019  inline isl::checked::union_map preimage_domain(isl::checked::multi_aff ma) const;
4020  inline isl::checked::union_map preimage_domain(isl::checked::multi_pw_aff mpa) const;
4021  inline isl::checked::union_map preimage_domain(isl::checked::pw_multi_aff pma) const;
4022  inline isl::checked::union_map preimage_domain(isl::checked::union_pw_multi_aff upma) const;
4023  inline isl::checked::union_map preimage_range(isl::checked::multi_aff ma) const;
4024  inline isl::checked::union_map preimage_range(isl::checked::pw_multi_aff pma) const;
4025  inline isl::checked::union_map preimage_range(isl::checked::union_pw_multi_aff upma) const;
4026  inline isl::checked::union_map product(isl::checked::union_map umap2) const;
4027  inline isl::checked::union_map project_out_all_params() const;
4028  inline isl::checked::union_map project_out_param(isl::checked::id id) const;
4029  inline isl::checked::union_map project_out_param(const std::string &id) const;
4030  inline isl::checked::union_map project_out_param(isl::checked::id_list list) const;
4031  inline isl::checked::union_set range() const;
4032  inline isl::checked::union_map range_factor_domain() const;
4033  inline isl::checked::union_map range_factor_range() const;
4034  inline isl::checked::union_map range_map() const;
4035  inline isl::checked::union_map range_product(isl::checked::union_map umap2) const;
4036  inline isl::checked::union_map range_reverse() const;
4037  inline isl::checked::union_map reverse() const;
4038  inline isl::checked::space space() const;
4039  inline isl::checked::space get_space() const;
4040  inline isl::checked::union_map subtract(isl::checked::union_map umap2) const;
4041  inline isl::checked::union_map subtract_domain(isl::checked::union_set dom) const;
4042  inline isl::checked::union_map subtract_range(isl::checked::union_set dom) const;
4043  inline isl::checked::union_map uncurry() const;
4044  inline isl::checked::union_map unite(isl::checked::union_map umap2) const;
4045  inline isl::checked::union_map universe() const;
4046  inline isl::checked::union_set wrap() const;
4047  inline isl::checked::union_map zip() const;
4048};
4049
4050// declarations for isl::union_pw_aff
4051inline union_pw_aff manage(__isl_take isl_union_pw_aff *ptr);
4052inline union_pw_aff manage_copy(__isl_keep isl_union_pw_aff *ptr);
4053
4054class union_pw_aff {
4055  friend inline union_pw_aff manage(__isl_take isl_union_pw_aff *ptr);
4056  friend inline union_pw_aff manage_copy(__isl_keep isl_union_pw_aff *ptr);
4057
4058protected:
4059  isl_union_pw_aff *ptr = nullptr;
4060
4061  inline explicit union_pw_aff(__isl_take isl_union_pw_aff *ptr);
4062
4063public:
4064  inline /* implicit */ union_pw_aff();
4065  inline /* implicit */ union_pw_aff(const union_pw_aff &obj);
4066  inline /* implicit */ union_pw_aff(isl::checked::aff aff);
4067  inline /* implicit */ union_pw_aff(isl::checked::pw_aff pa);
4068  inline explicit union_pw_aff(isl::checked::ctx ctx, const std::string &str);
4069  inline union_pw_aff &operator=(union_pw_aff obj);
4070  inline ~union_pw_aff();
4071  inline __isl_give isl_union_pw_aff *copy() const &;
4072  inline __isl_give isl_union_pw_aff *copy() && = delete;
4073  inline __isl_keep isl_union_pw_aff *get() const;
4074  inline __isl_give isl_union_pw_aff *release();
4075  inline bool is_null() const;
4076  inline isl::checked::ctx ctx() const;
4077
4078  inline isl::checked::multi_union_pw_aff add(const isl::checked::multi_union_pw_aff &multi2) const;
4079  inline isl::checked::union_pw_aff add(isl::checked::union_pw_aff upa2) const;
4080  inline isl::checked::union_pw_multi_aff add(const isl::checked::union_pw_multi_aff &upma2) const;
4081  inline isl::checked::union_pw_aff add(const isl::checked::aff &upa2) const;
4082  inline isl::checked::union_pw_aff add(const isl::checked::pw_aff &upa2) const;
4083  inline isl::checked::union_pw_multi_aff apply(const isl::checked::union_pw_multi_aff &upma2) const;
4084  inline isl::checked::multi_union_pw_aff as_multi_union_pw_aff() const;
4085  inline isl::checked::pw_multi_aff as_pw_multi_aff() const;
4086  inline isl::checked::union_map as_union_map() const;
4087  inline isl::checked::union_pw_aff at(int pos) const;
4088  inline isl::checked::union_set bind(const isl::checked::multi_id &tuple) const;
4089  inline isl::checked::union_set bind(isl::checked::id id) const;
4090  inline isl::checked::union_set bind(const std::string &id) const;
4091  inline isl::checked::union_pw_aff coalesce() const;
4092  inline isl::checked::union_set domain() const;
4093  inline isl::checked::union_pw_aff drop_unused_params() const;
4094  inline isl::checked::pw_multi_aff extract_pw_multi_aff(const isl::checked::space &space) const;
4095  inline isl::checked::multi_union_pw_aff flat_range_product(const isl::checked::multi_union_pw_aff &multi2) const;
4096  inline isl::checked::union_pw_multi_aff flat_range_product(const isl::checked::union_pw_multi_aff &upma2) const;
4097  inline isl::checked::union_pw_aff gist(isl::checked::union_set context) const;
4098  inline isl::checked::multi_union_pw_aff gist_params(const isl::checked::set &context) const;
4099  inline boolean has_range_tuple_id() const;
4100  inline isl::checked::union_pw_aff intersect_domain(isl::checked::space space) const;
4101  inline isl::checked::union_pw_aff intersect_domain(isl::checked::union_set uset) const;
4102  inline isl::checked::union_pw_aff intersect_domain_wrapped_domain(isl::checked::union_set uset) const;
4103  inline isl::checked::union_pw_aff intersect_domain_wrapped_range(isl::checked::union_set uset) const;
4104  inline isl::checked::union_pw_aff intersect_params(isl::checked::set set) const;
4105  inline boolean involves_locals() const;
4106  inline boolean involves_nan() const;
4107  inline boolean isa_pw_multi_aff() const;
4108  inline isl::checked::union_pw_aff_list list() const;
4109  inline isl::checked::multi_union_pw_aff neg() const;
4110  inline boolean plain_is_empty() const;
4111  inline boolean plain_is_equal(const isl::checked::multi_union_pw_aff &multi2) const;
4112  inline boolean plain_is_equal(const isl::checked::union_pw_aff &upa2) const;
4113  inline boolean plain_is_equal(const isl::checked::union_pw_multi_aff &upma2) const;
4114  inline boolean plain_is_equal(const isl::checked::aff &upa2) const;
4115  inline boolean plain_is_equal(const isl::checked::pw_aff &upa2) const;
4116  inline isl::checked::union_pw_multi_aff preimage_domain_wrapped_domain(const isl::checked::union_pw_multi_aff &upma2) const;
4117  inline isl::checked::union_pw_aff pullback(isl::checked::union_pw_multi_aff upma) const;
4118  inline isl::checked::pw_multi_aff_list pw_multi_aff_list() const;
4119  inline isl::checked::union_pw_multi_aff range_factor_domain() const;
4120  inline isl::checked::union_pw_multi_aff range_factor_range() const;
4121  inline isl::checked::multi_union_pw_aff range_product(const isl::checked::multi_union_pw_aff &multi2) const;
4122  inline isl::checked::union_pw_multi_aff range_product(const isl::checked::union_pw_multi_aff &upma2) const;
4123  inline isl::checked::id range_tuple_id() const;
4124  inline isl::checked::multi_union_pw_aff reset_range_tuple_id() const;
4125  inline isl::checked::multi_union_pw_aff scale(const isl::checked::multi_val &mv) const;
4126  inline isl::checked::multi_union_pw_aff scale(const isl::checked::val &v) const;
4127  inline isl::checked::multi_union_pw_aff scale(long v) const;
4128  inline isl::checked::multi_union_pw_aff scale_down(const isl::checked::multi_val &mv) const;
4129  inline isl::checked::multi_union_pw_aff scale_down(const isl::checked::val &v) const;
4130  inline isl::checked::multi_union_pw_aff scale_down(long v) const;
4131  inline isl::checked::multi_union_pw_aff set_at(int pos, const isl::checked::union_pw_aff &el) const;
4132  inline isl::checked::multi_union_pw_aff set_range_tuple(const isl::checked::id &id) const;
4133  inline isl::checked::multi_union_pw_aff set_range_tuple(const std::string &id) const;
4134  inline class size size() const;
4135  inline isl::checked::space space() const;
4136  inline isl::checked::space get_space() const;
4137  inline isl::checked::multi_union_pw_aff sub(const isl::checked::multi_union_pw_aff &multi2) const;
4138  inline isl::checked::union_pw_aff sub(isl::checked::union_pw_aff upa2) const;
4139  inline isl::checked::union_pw_multi_aff sub(const isl::checked::union_pw_multi_aff &upma2) const;
4140  inline isl::checked::union_pw_aff sub(const isl::checked::aff &upa2) const;
4141  inline isl::checked::union_pw_aff sub(const isl::checked::pw_aff &upa2) const;
4142  inline isl::checked::union_pw_aff subtract_domain(isl::checked::space space) const;
4143  inline isl::checked::union_pw_aff subtract_domain(isl::checked::union_set uset) const;
4144  inline isl::checked::union_pw_aff_list to_list() const;
4145  inline isl::checked::multi_union_pw_aff union_add(const isl::checked::multi_union_pw_aff &mupa2) const;
4146  inline isl::checked::union_pw_aff union_add(isl::checked::union_pw_aff upa2) const;
4147  inline isl::checked::union_pw_multi_aff union_add(const isl::checked::union_pw_multi_aff &upma2) const;
4148  inline isl::checked::union_pw_aff union_add(const isl::checked::aff &upa2) const;
4149  inline isl::checked::union_pw_aff union_add(const isl::checked::pw_aff &upa2) const;
4150};
4151
4152// declarations for isl::union_pw_aff_list
4153inline union_pw_aff_list manage(__isl_take isl_union_pw_aff_list *ptr);
4154inline union_pw_aff_list manage_copy(__isl_keep isl_union_pw_aff_list *ptr);
4155
4156class union_pw_aff_list {
4157  friend inline union_pw_aff_list manage(__isl_take isl_union_pw_aff_list *ptr);
4158  friend inline union_pw_aff_list manage_copy(__isl_keep isl_union_pw_aff_list *ptr);
4159
4160protected:
4161  isl_union_pw_aff_list *ptr = nullptr;
4162
4163  inline explicit union_pw_aff_list(__isl_take isl_union_pw_aff_list *ptr);
4164
4165public:
4166  inline /* implicit */ union_pw_aff_list();
4167  inline /* implicit */ union_pw_aff_list(const union_pw_aff_list &obj);
4168  inline explicit union_pw_aff_list(isl::checked::ctx ctx, int n);
4169  inline explicit union_pw_aff_list(isl::checked::union_pw_aff el);
4170  inline explicit union_pw_aff_list(isl::checked::ctx ctx, const std::string &str);
4171  inline union_pw_aff_list &operator=(union_pw_aff_list obj);
4172  inline ~union_pw_aff_list();
4173  inline __isl_give isl_union_pw_aff_list *copy() const &;
4174  inline __isl_give isl_union_pw_aff_list *copy() && = delete;
4175  inline __isl_keep isl_union_pw_aff_list *get() const;
4176  inline __isl_give isl_union_pw_aff_list *release();
4177  inline bool is_null() const;
4178  inline isl::checked::ctx ctx() const;
4179
4180  inline isl::checked::union_pw_aff_list add(isl::checked::union_pw_aff el) const;
4181  inline isl::checked::union_pw_aff at(int index) const;
4182  inline isl::checked::union_pw_aff get_at(int index) const;
4183  inline isl::checked::union_pw_aff_list clear() const;
4184  inline isl::checked::union_pw_aff_list concat(isl::checked::union_pw_aff_list list2) const;
4185  inline isl::checked::union_pw_aff_list drop(unsigned int first, unsigned int n) const;
4186  inline stat foreach(const std::function<stat(isl::checked::union_pw_aff)> &fn) const;
4187  inline stat foreach_scc(const std::function<boolean(isl::checked::union_pw_aff, isl::checked::union_pw_aff)> &follows, const std::function<stat(isl::checked::union_pw_aff_list)> &fn) const;
4188  inline isl::checked::union_pw_aff_list insert(unsigned int pos, isl::checked::union_pw_aff el) const;
4189  inline isl::checked::union_pw_aff_list set_at(int index, isl::checked::union_pw_aff el) const;
4190  inline class size size() const;
4191};
4192
4193// declarations for isl::union_pw_multi_aff
4194inline union_pw_multi_aff manage(__isl_take isl_union_pw_multi_aff *ptr);
4195inline union_pw_multi_aff manage_copy(__isl_keep isl_union_pw_multi_aff *ptr);
4196
4197class union_pw_multi_aff {
4198  friend inline union_pw_multi_aff manage(__isl_take isl_union_pw_multi_aff *ptr);
4199  friend inline union_pw_multi_aff manage_copy(__isl_keep isl_union_pw_multi_aff *ptr);
4200
4201protected:
4202  isl_union_pw_multi_aff *ptr = nullptr;
4203
4204  inline explicit union_pw_multi_aff(__isl_take isl_union_pw_multi_aff *ptr);
4205
4206public:
4207  inline /* implicit */ union_pw_multi_aff();
4208  inline /* implicit */ union_pw_multi_aff(const union_pw_multi_aff &obj);
4209  inline /* implicit */ union_pw_multi_aff(isl::checked::multi_aff ma);
4210  inline /* implicit */ union_pw_multi_aff(isl::checked::pw_multi_aff pma);
4211  inline /* implicit */ union_pw_multi_aff(isl::checked::union_pw_aff upa);
4212  inline explicit union_pw_multi_aff(isl::checked::ctx ctx, const std::string &str);
4213  inline union_pw_multi_aff &operator=(union_pw_multi_aff obj);
4214  inline ~union_pw_multi_aff();
4215  inline __isl_give isl_union_pw_multi_aff *copy() const &;
4216  inline __isl_give isl_union_pw_multi_aff *copy() && = delete;
4217  inline __isl_keep isl_union_pw_multi_aff *get() const;
4218  inline __isl_give isl_union_pw_multi_aff *release();
4219  inline bool is_null() const;
4220  inline isl::checked::ctx ctx() const;
4221
4222  inline isl::checked::union_pw_multi_aff add(isl::checked::union_pw_multi_aff upma2) const;
4223  inline isl::checked::union_pw_multi_aff apply(isl::checked::union_pw_multi_aff upma2) const;
4224  inline isl::checked::multi_union_pw_aff as_multi_union_pw_aff() const;
4225  inline isl::checked::pw_multi_aff as_pw_multi_aff() const;
4226  inline isl::checked::union_map as_union_map() const;
4227  inline isl::checked::union_pw_multi_aff coalesce() const;
4228  inline isl::checked::union_set domain() const;
4229  inline isl::checked::union_pw_multi_aff drop_unused_params() const;
4230  static inline isl::checked::union_pw_multi_aff empty(isl::checked::ctx ctx);
4231  inline isl::checked::pw_multi_aff extract_pw_multi_aff(isl::checked::space space) const;
4232  inline isl::checked::union_pw_multi_aff flat_range_product(isl::checked::union_pw_multi_aff upma2) const;
4233  inline isl::checked::union_pw_multi_aff gist(isl::checked::union_set context) const;
4234  inline isl::checked::union_pw_multi_aff intersect_domain(isl::checked::space space) const;
4235  inline isl::checked::union_pw_multi_aff intersect_domain(isl::checked::union_set uset) const;
4236  inline isl::checked::union_pw_multi_aff intersect_domain_wrapped_domain(isl::checked::union_set uset) const;
4237  inline isl::checked::union_pw_multi_aff intersect_domain_wrapped_range(isl::checked::union_set uset) const;
4238  inline isl::checked::union_pw_multi_aff intersect_params(isl::checked::set set) const;
4239  inline boolean involves_locals() const;
4240  inline boolean isa_pw_multi_aff() const;
4241  inline boolean plain_is_empty() const;
4242  inline boolean plain_is_equal(const isl::checked::union_pw_multi_aff &upma2) const;
4243  inline isl::checked::union_pw_multi_aff preimage_domain_wrapped_domain(isl::checked::union_pw_multi_aff upma2) const;
4244  inline isl::checked::union_pw_multi_aff pullback(isl::checked::union_pw_multi_aff upma2) const;
4245  inline isl::checked::pw_multi_aff_list pw_multi_aff_list() const;
4246  inline isl::checked::pw_multi_aff_list get_pw_multi_aff_list() const;
4247  inline isl::checked::union_pw_multi_aff range_factor_domain() const;
4248  inline isl::checked::union_pw_multi_aff range_factor_range() const;
4249  inline isl::checked::union_pw_multi_aff range_product(isl::checked::union_pw_multi_aff upma2) const;
4250  inline isl::checked::space space() const;
4251  inline isl::checked::space get_space() const;
4252  inline isl::checked::union_pw_multi_aff sub(isl::checked::union_pw_multi_aff upma2) const;
4253  inline isl::checked::union_pw_multi_aff subtract_domain(isl::checked::space space) const;
4254  inline isl::checked::union_pw_multi_aff subtract_domain(isl::checked::union_set uset) const;
4255  inline isl::checked::union_pw_multi_aff union_add(isl::checked::union_pw_multi_aff upma2) const;
4256};
4257
4258// declarations for isl::union_set
4259inline union_set manage(__isl_take isl_union_set *ptr);
4260inline union_set manage_copy(__isl_keep isl_union_set *ptr);
4261
4262class union_set {
4263  friend inline union_set manage(__isl_take isl_union_set *ptr);
4264  friend inline union_set manage_copy(__isl_keep isl_union_set *ptr);
4265
4266protected:
4267  isl_union_set *ptr = nullptr;
4268
4269  inline explicit union_set(__isl_take isl_union_set *ptr);
4270
4271public:
4272  inline /* implicit */ union_set();
4273  inline /* implicit */ union_set(const union_set &obj);
4274  inline /* implicit */ union_set(isl::checked::basic_set bset);
4275  inline /* implicit */ union_set(isl::checked::point pnt);
4276  inline /* implicit */ union_set(isl::checked::set set);
4277  inline explicit union_set(isl::checked::ctx ctx, const std::string &str);
4278  inline union_set &operator=(union_set obj);
4279  inline ~union_set();
4280  inline __isl_give isl_union_set *copy() const &;
4281  inline __isl_give isl_union_set *copy() && = delete;
4282  inline __isl_keep isl_union_set *get() const;
4283  inline __isl_give isl_union_set *release();
4284  inline bool is_null() const;
4285  inline isl::checked::ctx ctx() const;
4286
4287  inline isl::checked::union_set affine_hull() const;
4288  inline isl::checked::union_set apply(isl::checked::union_map umap) const;
4289  inline isl::checked::set as_set() const;
4290  inline isl::checked::union_set coalesce() const;
4291  inline isl::checked::union_set compute_divs() const;
4292  inline isl::checked::union_set detect_equalities() const;
4293  inline isl::checked::union_set drop_unused_params() const;
4294  static inline isl::checked::union_set empty(isl::checked::ctx ctx);
4295  inline boolean every_set(const std::function<boolean(isl::checked::set)> &test) const;
4296  inline isl::checked::set extract_set(isl::checked::space space) const;
4297  inline stat foreach_point(const std::function<stat(isl::checked::point)> &fn) const;
4298  inline stat foreach_set(const std::function<stat(isl::checked::set)> &fn) const;
4299  inline isl::checked::union_set gist(isl::checked::union_set context) const;
4300  inline isl::checked::union_set gist_params(isl::checked::set set) const;
4301  inline isl::checked::union_map identity() const;
4302  inline isl::checked::union_set intersect(isl::checked::union_set uset2) const;
4303  inline isl::checked::union_set intersect_params(isl::checked::set set) const;
4304  inline boolean is_disjoint(const isl::checked::union_set &uset2) const;
4305  inline boolean is_empty() const;
4306  inline boolean is_equal(const isl::checked::union_set &uset2) const;
4307  inline boolean is_strict_subset(const isl::checked::union_set &uset2) const;
4308  inline boolean is_subset(const isl::checked::union_set &uset2) const;
4309  inline boolean isa_set() const;
4310  inline isl::checked::union_set lexmax() const;
4311  inline isl::checked::union_set lexmin() const;
4312  inline isl::checked::set params() const;
4313  inline isl::checked::union_set polyhedral_hull() const;
4314  inline isl::checked::union_set preimage(isl::checked::multi_aff ma) const;
4315  inline isl::checked::union_set preimage(isl::checked::pw_multi_aff pma) const;
4316  inline isl::checked::union_set preimage(isl::checked::union_pw_multi_aff upma) const;
4317  inline isl::checked::union_set project_out_all_params() const;
4318  inline isl::checked::point sample_point() const;
4319  inline isl::checked::set_list set_list() const;
4320  inline isl::checked::set_list get_set_list() const;
4321  inline isl::checked::space space() const;
4322  inline isl::checked::space get_space() const;
4323  inline isl::checked::union_set subtract(isl::checked::union_set uset2) const;
4324  inline isl::checked::union_set_list to_list() const;
4325  inline isl::checked::union_set unite(isl::checked::union_set uset2) const;
4326  inline isl::checked::union_set universe() const;
4327  inline isl::checked::union_map unwrap() const;
4328};
4329
4330// declarations for isl::union_set_list
4331inline union_set_list manage(__isl_take isl_union_set_list *ptr);
4332inline union_set_list manage_copy(__isl_keep isl_union_set_list *ptr);
4333
4334class union_set_list {
4335  friend inline union_set_list manage(__isl_take isl_union_set_list *ptr);
4336  friend inline union_set_list manage_copy(__isl_keep isl_union_set_list *ptr);
4337
4338protected:
4339  isl_union_set_list *ptr = nullptr;
4340
4341  inline explicit union_set_list(__isl_take isl_union_set_list *ptr);
4342
4343public:
4344  inline /* implicit */ union_set_list();
4345  inline /* implicit */ union_set_list(const union_set_list &obj);
4346  inline explicit union_set_list(isl::checked::ctx ctx, int n);
4347  inline explicit union_set_list(isl::checked::union_set el);
4348  inline explicit union_set_list(isl::checked::ctx ctx, const std::string &str);
4349  inline union_set_list &operator=(union_set_list obj);
4350  inline ~union_set_list();
4351  inline __isl_give isl_union_set_list *copy() const &;
4352  inline __isl_give isl_union_set_list *copy() && = delete;
4353  inline __isl_keep isl_union_set_list *get() const;
4354  inline __isl_give isl_union_set_list *release();
4355  inline bool is_null() const;
4356  inline isl::checked::ctx ctx() const;
4357
4358  inline isl::checked::union_set_list add(isl::checked::union_set el) const;
4359  inline isl::checked::union_set at(int index) const;
4360  inline isl::checked::union_set get_at(int index) const;
4361  inline isl::checked::union_set_list clear() const;
4362  inline isl::checked::union_set_list concat(isl::checked::union_set_list list2) const;
4363  inline isl::checked::union_set_list drop(unsigned int first, unsigned int n) const;
4364  inline stat foreach(const std::function<stat(isl::checked::union_set)> &fn) const;
4365  inline stat foreach_scc(const std::function<boolean(isl::checked::union_set, isl::checked::union_set)> &follows, const std::function<stat(isl::checked::union_set_list)> &fn) const;
4366  inline isl::checked::union_set_list insert(unsigned int pos, isl::checked::union_set el) const;
4367  inline isl::checked::union_set_list set_at(int index, isl::checked::union_set el) const;
4368  inline class size size() const;
4369};
4370
4371// declarations for isl::val
4372inline val manage(__isl_take isl_val *ptr);
4373inline val manage_copy(__isl_keep isl_val *ptr);
4374
4375class val {
4376  friend inline val manage(__isl_take isl_val *ptr);
4377  friend inline val manage_copy(__isl_keep isl_val *ptr);
4378
4379protected:
4380  isl_val *ptr = nullptr;
4381
4382  inline explicit val(__isl_take isl_val *ptr);
4383
4384public:
4385  inline /* implicit */ val();
4386  inline /* implicit */ val(const val &obj);
4387  inline explicit val(isl::checked::ctx ctx, long i);
4388  inline explicit val(isl::checked::ctx ctx, const std::string &str);
4389  inline val &operator=(val obj);
4390  inline ~val();
4391  inline __isl_give isl_val *copy() const &;
4392  inline __isl_give isl_val *copy() && = delete;
4393  inline __isl_keep isl_val *get() const;
4394  inline __isl_give isl_val *release();
4395  inline bool is_null() const;
4396  inline isl::checked::ctx ctx() const;
4397
4398  inline isl::checked::val abs() const;
4399  inline boolean abs_eq(const isl::checked::val &v2) const;
4400  inline boolean abs_eq(long v2) const;
4401  inline isl::checked::val add(isl::checked::val v2) const;
4402  inline isl::checked::val add(long v2) const;
4403  inline isl::checked::val ceil() const;
4404  inline int cmp_si(long i) const;
4405  inline long den_si() const;
4406  inline long get_den_si() const;
4407  inline isl::checked::val div(isl::checked::val v2) const;
4408  inline isl::checked::val div(long v2) const;
4409  inline boolean eq(const isl::checked::val &v2) const;
4410  inline boolean eq(long v2) const;
4411  inline isl::checked::val floor() const;
4412  inline isl::checked::val gcd(isl::checked::val v2) const;
4413  inline isl::checked::val gcd(long v2) const;
4414  inline boolean ge(const isl::checked::val &v2) const;
4415  inline boolean ge(long v2) const;
4416  inline boolean gt(const isl::checked::val &v2) const;
4417  inline boolean gt(long v2) const;
4418  static inline isl::checked::val infty(isl::checked::ctx ctx);
4419  inline isl::checked::val inv() const;
4420  inline boolean is_divisible_by(const isl::checked::val &v2) const;
4421  inline boolean is_divisible_by(long v2) const;
4422  inline boolean is_infty() const;
4423  inline boolean is_int() const;
4424  inline boolean is_nan() const;
4425  inline boolean is_neg() const;
4426  inline boolean is_neginfty() const;
4427  inline boolean is_negone() const;
4428  inline boolean is_nonneg() const;
4429  inline boolean is_nonpos() const;
4430  inline boolean is_one() const;
4431  inline boolean is_pos() const;
4432  inline boolean is_rat() const;
4433  inline boolean is_zero() const;
4434  inline boolean le(const isl::checked::val &v2) const;
4435  inline boolean le(long v2) const;
4436  inline boolean lt(const isl::checked::val &v2) const;
4437  inline boolean lt(long v2) const;
4438  inline isl::checked::val max(isl::checked::val v2) const;
4439  inline isl::checked::val max(long v2) const;
4440  inline isl::checked::val min(isl::checked::val v2) const;
4441  inline isl::checked::val min(long v2) const;
4442  inline isl::checked::val mod(isl::checked::val v2) const;
4443  inline isl::checked::val mod(long v2) const;
4444  inline isl::checked::val mul(isl::checked::val v2) const;
4445  inline isl::checked::val mul(long v2) const;
4446  static inline isl::checked::val nan(isl::checked::ctx ctx);
4447  inline boolean ne(const isl::checked::val &v2) const;
4448  inline boolean ne(long v2) const;
4449  inline isl::checked::val neg() const;
4450  static inline isl::checked::val neginfty(isl::checked::ctx ctx);
4451  static inline isl::checked::val negone(isl::checked::ctx ctx);
4452  inline long num_si() const;
4453  inline long get_num_si() const;
4454  static inline isl::checked::val one(isl::checked::ctx ctx);
4455  inline isl::checked::val pow2() const;
4456  inline int sgn() const;
4457  inline isl::checked::val sub(isl::checked::val v2) const;
4458  inline isl::checked::val sub(long v2) const;
4459  inline isl::checked::val_list to_list() const;
4460  inline isl::checked::val trunc() const;
4461  static inline isl::checked::val zero(isl::checked::ctx ctx);
4462};
4463
4464// declarations for isl::val_list
4465inline val_list manage(__isl_take isl_val_list *ptr);
4466inline val_list manage_copy(__isl_keep isl_val_list *ptr);
4467
4468class val_list {
4469  friend inline val_list manage(__isl_take isl_val_list *ptr);
4470  friend inline val_list manage_copy(__isl_keep isl_val_list *ptr);
4471
4472protected:
4473  isl_val_list *ptr = nullptr;
4474
4475  inline explicit val_list(__isl_take isl_val_list *ptr);
4476
4477public:
4478  inline /* implicit */ val_list();
4479  inline /* implicit */ val_list(const val_list &obj);
4480  inline explicit val_list(isl::checked::ctx ctx, int n);
4481  inline explicit val_list(isl::checked::val el);
4482  inline explicit val_list(isl::checked::ctx ctx, const std::string &str);
4483  inline val_list &operator=(val_list obj);
4484  inline ~val_list();
4485  inline __isl_give isl_val_list *copy() const &;
4486  inline __isl_give isl_val_list *copy() && = delete;
4487  inline __isl_keep isl_val_list *get() const;
4488  inline __isl_give isl_val_list *release();
4489  inline bool is_null() const;
4490  inline isl::checked::ctx ctx() const;
4491
4492  inline isl::checked::val_list add(isl::checked::val el) const;
4493  inline isl::checked::val_list add(long el) const;
4494  inline isl::checked::val at(int index) const;
4495  inline isl::checked::val get_at(int index) const;
4496  inline isl::checked::val_list clear() const;
4497  inline isl::checked::val_list concat(isl::checked::val_list list2) const;
4498  inline isl::checked::val_list drop(unsigned int first, unsigned int n) const;
4499  inline stat foreach(const std::function<stat(isl::checked::val)> &fn) const;
4500  inline stat foreach_scc(const std::function<boolean(isl::checked::val, isl::checked::val)> &follows, const std::function<stat(isl::checked::val_list)> &fn) const;
4501  inline isl::checked::val_list insert(unsigned int pos, isl::checked::val el) const;
4502  inline isl::checked::val_list insert(unsigned int pos, long el) const;
4503  inline isl::checked::val_list set_at(int index, isl::checked::val el) const;
4504  inline isl::checked::val_list set_at(int index, long el) const;
4505  inline class size size() const;
4506};
4507
4508// implementations for isl::aff
4509aff manage(__isl_take isl_aff *ptr) {
4510  return aff(ptr);
4511}
4512aff manage_copy(__isl_keep isl_aff *ptr) {
4513  ptr = isl_aff_copy(ptr);
4514  return aff(ptr);
4515}
4516
4517aff::aff(__isl_take isl_aff *ptr)
4518    : ptr(ptr) {}
4519
4520aff::aff()
4521    : ptr(nullptr) {}
4522
4523aff::aff(const aff &obj)
4524    : ptr(nullptr)
4525{
4526  ptr = obj.copy();
4527}
4528
4529aff::aff(isl::checked::ctx ctx, const std::string &str)
4530{
4531  auto res = isl_aff_read_from_str(ctx.release(), str.c_str());
4532  ptr = res;
4533}
4534
4535aff &aff::operator=(aff obj) {
4536  std::swap(this->ptr, obj.ptr);
4537  return *this;
4538}
4539
4540aff::~aff() {
4541  if (ptr)
4542    isl_aff_free(ptr);
4543}
4544
4545__isl_give isl_aff *aff::copy() const & {
4546  return isl_aff_copy(ptr);
4547}
4548
4549__isl_keep isl_aff *aff::get() const {
4550  return ptr;
4551}
4552
4553__isl_give isl_aff *aff::release() {
4554  isl_aff *tmp = ptr;
4555  ptr = nullptr;
4556  return tmp;
4557}
4558
4559bool aff::is_null() const {
4560  return ptr == nullptr;
4561}
4562
4563isl::checked::ctx aff::ctx() const {
4564  return isl::checked::ctx(isl_aff_get_ctx(ptr));
4565}
4566
4567isl::checked::aff aff::add(isl::checked::aff aff2) const
4568{
4569  auto res = isl_aff_add(copy(), aff2.release());
4570  return manage(res);
4571}
4572
4573isl::checked::multi_aff aff::add(const isl::checked::multi_aff &multi2) const
4574{
4575  return isl::checked::multi_aff(*this).add(multi2);
4576}
4577
4578isl::checked::multi_pw_aff aff::add(const isl::checked::multi_pw_aff &multi2) const
4579{
4580  return isl::checked::pw_aff(*this).add(multi2);
4581}
4582
4583isl::checked::multi_union_pw_aff aff::add(const isl::checked::multi_union_pw_aff &multi2) const
4584{
4585  return isl::checked::pw_aff(*this).add(multi2);
4586}
4587
4588isl::checked::pw_aff aff::add(const isl::checked::pw_aff &pwaff2) const
4589{
4590  return isl::checked::pw_aff(*this).add(pwaff2);
4591}
4592
4593isl::checked::pw_multi_aff aff::add(const isl::checked::pw_multi_aff &pma2) const
4594{
4595  return isl::checked::pw_aff(*this).add(pma2);
4596}
4597
4598isl::checked::union_pw_aff aff::add(const isl::checked::union_pw_aff &upa2) const
4599{
4600  return isl::checked::pw_aff(*this).add(upa2);
4601}
4602
4603isl::checked::union_pw_multi_aff aff::add(const isl::checked::union_pw_multi_aff &upma2) const
4604{
4605  return isl::checked::pw_aff(*this).add(upma2);
4606}
4607
4608isl::checked::aff aff::add_constant(isl::checked::val v) const
4609{
4610  auto res = isl_aff_add_constant_val(copy(), v.release());
4611  return manage(res);
4612}
4613
4614isl::checked::aff aff::add_constant(long v) const
4615{
4616  return this->add_constant(isl::checked::val(ctx(), v));
4617}
4618
4619isl::checked::multi_aff aff::add_constant(const isl::checked::multi_val &mv) const
4620{
4621  return isl::checked::multi_aff(*this).add_constant(mv);
4622}
4623
4624isl::checked::union_pw_multi_aff aff::apply(const isl::checked::union_pw_multi_aff &upma2) const
4625{
4626  return isl::checked::pw_aff(*this).apply(upma2);
4627}
4628
4629isl::checked::aff aff::as_aff() const
4630{
4631  return isl::checked::pw_aff(*this).as_aff();
4632}
4633
4634isl::checked::map aff::as_map() const
4635{
4636  return isl::checked::pw_aff(*this).as_map();
4637}
4638
4639isl::checked::multi_aff aff::as_multi_aff() const
4640{
4641  return isl::checked::pw_aff(*this).as_multi_aff();
4642}
4643
4644isl::checked::multi_union_pw_aff aff::as_multi_union_pw_aff() const
4645{
4646  return isl::checked::pw_aff(*this).as_multi_union_pw_aff();
4647}
4648
4649isl::checked::pw_multi_aff aff::as_pw_multi_aff() const
4650{
4651  return isl::checked::pw_aff(*this).as_pw_multi_aff();
4652}
4653
4654isl::checked::set aff::as_set() const
4655{
4656  return isl::checked::multi_aff(*this).as_set();
4657}
4658
4659isl::checked::union_map aff::as_union_map() const
4660{
4661  return isl::checked::pw_aff(*this).as_union_map();
4662}
4663
4664isl::checked::aff aff::at(int pos) const
4665{
4666  return isl::checked::multi_aff(*this).at(pos);
4667}
4668
4669isl::checked::basic_set aff::bind(isl::checked::id id) const
4670{
4671  auto res = isl_aff_bind_id(copy(), id.release());
4672  return manage(res);
4673}
4674
4675isl::checked::basic_set aff::bind(const std::string &id) const
4676{
4677  return this->bind(isl::checked::id(ctx(), id));
4678}
4679
4680isl::checked::basic_set aff::bind(const isl::checked::multi_id &tuple) const
4681{
4682  return isl::checked::multi_aff(*this).bind(tuple);
4683}
4684
4685isl::checked::pw_aff aff::bind_domain(const isl::checked::multi_id &tuple) const
4686{
4687  return isl::checked::pw_aff(*this).bind_domain(tuple);
4688}
4689
4690isl::checked::pw_aff aff::bind_domain_wrapped_domain(const isl::checked::multi_id &tuple) const
4691{
4692  return isl::checked::pw_aff(*this).bind_domain_wrapped_domain(tuple);
4693}
4694
4695isl::checked::aff aff::ceil() const
4696{
4697  auto res = isl_aff_ceil(copy());
4698  return manage(res);
4699}
4700
4701isl::checked::pw_aff aff::coalesce() const
4702{
4703  return isl::checked::pw_aff(*this).coalesce();
4704}
4705
4706isl::checked::pw_aff aff::cond(const isl::checked::pw_aff &pwaff_true, const isl::checked::pw_aff &pwaff_false) const
4707{
4708  return isl::checked::pw_aff(*this).cond(pwaff_true, pwaff_false);
4709}
4710
4711isl::checked::multi_val aff::constant_multi_val() const
4712{
4713  return isl::checked::multi_aff(*this).constant_multi_val();
4714}
4715
4716isl::checked::val aff::constant_val() const
4717{
4718  auto res = isl_aff_get_constant_val(get());
4719  return manage(res);
4720}
4721
4722isl::checked::val aff::get_constant_val() const
4723{
4724  return constant_val();
4725}
4726
4727isl::checked::aff aff::div(isl::checked::aff aff2) const
4728{
4729  auto res = isl_aff_div(copy(), aff2.release());
4730  return manage(res);
4731}
4732
4733isl::checked::pw_aff aff::div(const isl::checked::pw_aff &pa2) const
4734{
4735  return isl::checked::pw_aff(*this).div(pa2);
4736}
4737
4738isl::checked::set aff::domain() const
4739{
4740  return isl::checked::pw_aff(*this).domain();
4741}
4742
4743isl::checked::aff aff::domain_reverse() const
4744{
4745  auto res = isl_aff_domain_reverse(copy());
4746  return manage(res);
4747}
4748
4749isl::checked::pw_aff aff::drop_unused_params() const
4750{
4751  return isl::checked::pw_aff(*this).drop_unused_params();
4752}
4753
4754isl::checked::set aff::eq_set(isl::checked::aff aff2) const
4755{
4756  auto res = isl_aff_eq_set(copy(), aff2.release());
4757  return manage(res);
4758}
4759
4760isl::checked::set aff::eq_set(const isl::checked::pw_aff &pwaff2) const
4761{
4762  return isl::checked::pw_aff(*this).eq_set(pwaff2);
4763}
4764
4765isl::checked::val aff::eval(isl::checked::point pnt) const
4766{
4767  auto res = isl_aff_eval(copy(), pnt.release());
4768  return manage(res);
4769}
4770
4771isl::checked::pw_multi_aff aff::extract_pw_multi_aff(const isl::checked::space &space) const
4772{
4773  return isl::checked::pw_aff(*this).extract_pw_multi_aff(space);
4774}
4775
4776isl::checked::multi_aff aff::flat_range_product(const isl::checked::multi_aff &multi2) const
4777{
4778  return isl::checked::multi_aff(*this).flat_range_product(multi2);
4779}
4780
4781isl::checked::multi_pw_aff aff::flat_range_product(const isl::checked::multi_pw_aff &multi2) const
4782{
4783  return isl::checked::pw_aff(*this).flat_range_product(multi2);
4784}
4785
4786isl::checked::multi_union_pw_aff aff::flat_range_product(const isl::checked::multi_union_pw_aff &multi2) const
4787{
4788  return isl::checked::pw_aff(*this).flat_range_product(multi2);
4789}
4790
4791isl::checked::pw_multi_aff aff::flat_range_product(const isl::checked::pw_multi_aff &pma2) const
4792{
4793  return isl::checked::pw_aff(*this).flat_range_product(pma2);
4794}
4795
4796isl::checked::union_pw_multi_aff aff::flat_range_product(const isl::checked::union_pw_multi_aff &upma2) const
4797{
4798  return isl::checked::pw_aff(*this).flat_range_product(upma2);
4799}
4800
4801isl::checked::aff aff::floor() const
4802{
4803  auto res = isl_aff_floor(copy());
4804  return manage(res);
4805}
4806
4807stat aff::foreach_piece(const std::function<stat(isl::checked::set, isl::checked::multi_aff)> &fn) const
4808{
4809  return isl::checked::pw_aff(*this).foreach_piece(fn);
4810}
4811
4812isl::checked::set aff::ge_set(isl::checked::aff aff2) const
4813{
4814  auto res = isl_aff_ge_set(copy(), aff2.release());
4815  return manage(res);
4816}
4817
4818isl::checked::set aff::ge_set(const isl::checked::pw_aff &pwaff2) const
4819{
4820  return isl::checked::pw_aff(*this).ge_set(pwaff2);
4821}
4822
4823isl::checked::aff aff::gist(isl::checked::set context) const
4824{
4825  auto res = isl_aff_gist(copy(), context.release());
4826  return manage(res);
4827}
4828
4829isl::checked::union_pw_aff aff::gist(const isl::checked::union_set &context) const
4830{
4831  return isl::checked::pw_aff(*this).gist(context);
4832}
4833
4834isl::checked::aff aff::gist(const isl::checked::basic_set &context) const
4835{
4836  return this->gist(isl::checked::set(context));
4837}
4838
4839isl::checked::aff aff::gist(const isl::checked::point &context) const
4840{
4841  return this->gist(isl::checked::set(context));
4842}
4843
4844isl::checked::aff aff::gist_params(isl::checked::set context) const
4845{
4846  auto res = isl_aff_gist_params(copy(), context.release());
4847  return manage(res);
4848}
4849
4850isl::checked::set aff::gt_set(isl::checked::aff aff2) const
4851{
4852  auto res = isl_aff_gt_set(copy(), aff2.release());
4853  return manage(res);
4854}
4855
4856isl::checked::set aff::gt_set(const isl::checked::pw_aff &pwaff2) const
4857{
4858  return isl::checked::pw_aff(*this).gt_set(pwaff2);
4859}
4860
4861boolean aff::has_range_tuple_id() const
4862{
4863  return isl::checked::multi_aff(*this).has_range_tuple_id();
4864}
4865
4866isl::checked::multi_aff aff::identity() const
4867{
4868  return isl::checked::multi_aff(*this).identity();
4869}
4870
4871isl::checked::pw_aff aff::insert_domain(const isl::checked::space &domain) const
4872{
4873  return isl::checked::pw_aff(*this).insert_domain(domain);
4874}
4875
4876isl::checked::pw_aff aff::intersect_domain(const isl::checked::set &set) const
4877{
4878  return isl::checked::pw_aff(*this).intersect_domain(set);
4879}
4880
4881isl::checked::union_pw_aff aff::intersect_domain(const isl::checked::space &space) const
4882{
4883  return isl::checked::pw_aff(*this).intersect_domain(space);
4884}
4885
4886isl::checked::union_pw_aff aff::intersect_domain(const isl::checked::union_set &uset) const
4887{
4888  return isl::checked::pw_aff(*this).intersect_domain(uset);
4889}
4890
4891isl::checked::union_pw_aff aff::intersect_domain_wrapped_domain(const isl::checked::union_set &uset) const
4892{
4893  return isl::checked::pw_aff(*this).intersect_domain_wrapped_domain(uset);
4894}
4895
4896isl::checked::union_pw_aff aff::intersect_domain_wrapped_range(const isl::checked::union_set &uset) const
4897{
4898  return isl::checked::pw_aff(*this).intersect_domain_wrapped_range(uset);
4899}
4900
4901isl::checked::pw_aff aff::intersect_params(const isl::checked::set &set) const
4902{
4903  return isl::checked::pw_aff(*this).intersect_params(set);
4904}
4905
4906boolean aff::involves_locals() const
4907{
4908  return isl::checked::multi_aff(*this).involves_locals();
4909}
4910
4911boolean aff::involves_nan() const
4912{
4913  return isl::checked::multi_aff(*this).involves_nan();
4914}
4915
4916boolean aff::involves_param(const isl::checked::id &id) const
4917{
4918  return isl::checked::pw_aff(*this).involves_param(id);
4919}
4920
4921boolean aff::involves_param(const std::string &id) const
4922{
4923  return this->involves_param(isl::checked::id(ctx(), id));
4924}
4925
4926boolean aff::involves_param(const isl::checked::id_list &list) const
4927{
4928  return isl::checked::pw_aff(*this).involves_param(list);
4929}
4930
4931boolean aff::is_cst() const
4932{
4933  auto res = isl_aff_is_cst(get());
4934  return manage(res);
4935}
4936
4937boolean aff::isa_aff() const
4938{
4939  return isl::checked::pw_aff(*this).isa_aff();
4940}
4941
4942boolean aff::isa_multi_aff() const
4943{
4944  return isl::checked::pw_aff(*this).isa_multi_aff();
4945}
4946
4947boolean aff::isa_pw_multi_aff() const
4948{
4949  return isl::checked::pw_aff(*this).isa_pw_multi_aff();
4950}
4951
4952isl::checked::set aff::le_set(isl::checked::aff aff2) const
4953{
4954  auto res = isl_aff_le_set(copy(), aff2.release());
4955  return manage(res);
4956}
4957
4958isl::checked::set aff::le_set(const isl::checked::pw_aff &pwaff2) const
4959{
4960  return isl::checked::pw_aff(*this).le_set(pwaff2);
4961}
4962
4963isl::checked::aff_list aff::list() const
4964{
4965  return isl::checked::multi_aff(*this).list();
4966}
4967
4968isl::checked::set aff::lt_set(isl::checked::aff aff2) const
4969{
4970  auto res = isl_aff_lt_set(copy(), aff2.release());
4971  return manage(res);
4972}
4973
4974isl::checked::set aff::lt_set(const isl::checked::pw_aff &pwaff2) const
4975{
4976  return isl::checked::pw_aff(*this).lt_set(pwaff2);
4977}
4978
4979isl::checked::multi_pw_aff aff::max(const isl::checked::multi_pw_aff &multi2) const
4980{
4981  return isl::checked::pw_aff(*this).max(multi2);
4982}
4983
4984isl::checked::pw_aff aff::max(const isl::checked::pw_aff &pwaff2) const
4985{
4986  return isl::checked::pw_aff(*this).max(pwaff2);
4987}
4988
4989isl::checked::multi_val aff::max_multi_val() const
4990{
4991  return isl::checked::pw_aff(*this).max_multi_val();
4992}
4993
4994isl::checked::val aff::max_val() const
4995{
4996  return isl::checked::pw_aff(*this).max_val();
4997}
4998
4999isl::checked::multi_pw_aff aff::min(const isl::checked::multi_pw_aff &multi2) const
5000{
5001  return isl::checked::pw_aff(*this).min(multi2);
5002}
5003
5004isl::checked::pw_aff aff::min(const isl::checked::pw_aff &pwaff2) const
5005{
5006  return isl::checked::pw_aff(*this).min(pwaff2);
5007}
5008
5009isl::checked::multi_val aff::min_multi_val() const
5010{
5011  return isl::checked::pw_aff(*this).min_multi_val();
5012}
5013
5014isl::checked::val aff::min_val() const
5015{
5016  return isl::checked::pw_aff(*this).min_val();
5017}
5018
5019isl::checked::aff aff::mod(isl::checked::val mod) const
5020{
5021  auto res = isl_aff_mod_val(copy(), mod.release());
5022  return manage(res);
5023}
5024
5025isl::checked::aff aff::mod(long mod) const
5026{
5027  return this->mod(isl::checked::val(ctx(), mod));
5028}
5029
5030isl::checked::aff aff::mul(isl::checked::aff aff2) const
5031{
5032  auto res = isl_aff_mul(copy(), aff2.release());
5033  return manage(res);
5034}
5035
5036isl::checked::pw_aff aff::mul(const isl::checked::pw_aff &pwaff2) const
5037{
5038  return isl::checked::pw_aff(*this).mul(pwaff2);
5039}
5040
5041class size aff::n_piece() const
5042{
5043  return isl::checked::pw_aff(*this).n_piece();
5044}
5045
5046isl::checked::set aff::ne_set(isl::checked::aff aff2) const
5047{
5048  auto res = isl_aff_ne_set(copy(), aff2.release());
5049  return manage(res);
5050}
5051
5052isl::checked::set aff::ne_set(const isl::checked::pw_aff &pwaff2) const
5053{
5054  return isl::checked::pw_aff(*this).ne_set(pwaff2);
5055}
5056
5057isl::checked::aff aff::neg() const
5058{
5059  auto res = isl_aff_neg(copy());
5060  return manage(res);
5061}
5062
5063isl::checked::set aff::params() const
5064{
5065  return isl::checked::pw_aff(*this).params();
5066}
5067
5068boolean aff::plain_is_empty() const
5069{
5070  return isl::checked::pw_aff(*this).plain_is_empty();
5071}
5072
5073boolean aff::plain_is_equal(const isl::checked::aff &aff2) const
5074{
5075  auto res = isl_aff_plain_is_equal(get(), aff2.get());
5076  return manage(res);
5077}
5078
5079boolean aff::plain_is_equal(const isl::checked::multi_aff &multi2) const
5080{
5081  return isl::checked::multi_aff(*this).plain_is_equal(multi2);
5082}
5083
5084boolean aff::plain_is_equal(const isl::checked::multi_pw_aff &multi2) const
5085{
5086  return isl::checked::pw_aff(*this).plain_is_equal(multi2);
5087}
5088
5089boolean aff::plain_is_equal(const isl::checked::multi_union_pw_aff &multi2) const
5090{
5091  return isl::checked::pw_aff(*this).plain_is_equal(multi2);
5092}
5093
5094boolean aff::plain_is_equal(const isl::checked::pw_aff &pwaff2) const
5095{
5096  return isl::checked::pw_aff(*this).plain_is_equal(pwaff2);
5097}
5098
5099boolean aff::plain_is_equal(const isl::checked::pw_multi_aff &pma2) const
5100{
5101  return isl::checked::pw_aff(*this).plain_is_equal(pma2);
5102}
5103
5104boolean aff::plain_is_equal(const isl::checked::union_pw_aff &upa2) const
5105{
5106  return isl::checked::pw_aff(*this).plain_is_equal(upa2);
5107}
5108
5109boolean aff::plain_is_equal(const isl::checked::union_pw_multi_aff &upma2) const
5110{
5111  return isl::checked::pw_aff(*this).plain_is_equal(upma2);
5112}
5113
5114isl::checked::pw_multi_aff aff::preimage_domain_wrapped_domain(const isl::checked::pw_multi_aff &pma2) const
5115{
5116  return isl::checked::pw_aff(*this).preimage_domain_wrapped_domain(pma2);
5117}
5118
5119isl::checked::union_pw_multi_aff aff::preimage_domain_wrapped_domain(const isl::checked::union_pw_multi_aff &upma2) const
5120{
5121  return isl::checked::pw_aff(*this).preimage_domain_wrapped_domain(upma2);
5122}
5123
5124isl::checked::multi_aff aff::product(const isl::checked::multi_aff &multi2) const
5125{
5126  return isl::checked::multi_aff(*this).product(multi2);
5127}
5128
5129isl::checked::multi_pw_aff aff::product(const isl::checked::multi_pw_aff &multi2) const
5130{
5131  return isl::checked::pw_aff(*this).product(multi2);
5132}
5133
5134isl::checked::pw_multi_aff aff::product(const isl::checked::pw_multi_aff &pma2) const
5135{
5136  return isl::checked::pw_aff(*this).product(pma2);
5137}
5138
5139isl::checked::aff aff::pullback(isl::checked::multi_aff ma) const
5140{
5141  auto res = isl_aff_pullback_multi_aff(copy(), ma.release());
5142  return manage(res);
5143}
5144
5145isl::checked::pw_aff aff::pullback(const isl::checked::multi_pw_aff &mpa) const
5146{
5147  return isl::checked::pw_aff(*this).pullback(mpa);
5148}
5149
5150isl::checked::pw_aff aff::pullback(const isl::checked::pw_multi_aff &pma) const
5151{
5152  return isl::checked::pw_aff(*this).pullback(pma);
5153}
5154
5155isl::checked::union_pw_aff aff::pullback(const isl::checked::union_pw_multi_aff &upma) const
5156{
5157  return isl::checked::pw_aff(*this).pullback(upma);
5158}
5159
5160isl::checked::aff aff::pullback(const isl::checked::aff &ma) const
5161{
5162  return this->pullback(isl::checked::multi_aff(ma));
5163}
5164
5165isl::checked::pw_multi_aff_list aff::pw_multi_aff_list() const
5166{
5167  return isl::checked::pw_aff(*this).pw_multi_aff_list();
5168}
5169
5170isl::checked::pw_multi_aff aff::range_factor_domain() const
5171{
5172  return isl::checked::pw_aff(*this).range_factor_domain();
5173}
5174
5175isl::checked::pw_multi_aff aff::range_factor_range() const
5176{
5177  return isl::checked::pw_aff(*this).range_factor_range();
5178}
5179
5180isl::checked::multi_aff aff::range_product(const isl::checked::multi_aff &multi2) const
5181{
5182  return isl::checked::multi_aff(*this).range_product(multi2);
5183}
5184
5185isl::checked::multi_pw_aff aff::range_product(const isl::checked::multi_pw_aff &multi2) const
5186{
5187  return isl::checked::pw_aff(*this).range_product(multi2);
5188}
5189
5190isl::checked::multi_union_pw_aff aff::range_product(const isl::checked::multi_union_pw_aff &multi2) const
5191{
5192  return isl::checked::pw_aff(*this).range_product(multi2);
5193}
5194
5195isl::checked::pw_multi_aff aff::range_product(const isl::checked::pw_multi_aff &pma2) const
5196{
5197  return isl::checked::pw_aff(*this).range_product(pma2);
5198}
5199
5200isl::checked::union_pw_multi_aff aff::range_product(const isl::checked::union_pw_multi_aff &upma2) const
5201{
5202  return isl::checked::pw_aff(*this).range_product(upma2);
5203}
5204
5205isl::checked::id aff::range_tuple_id() const
5206{
5207  return isl::checked::multi_aff(*this).range_tuple_id();
5208}
5209
5210isl::checked::multi_aff aff::reset_range_tuple_id() const
5211{
5212  return isl::checked::multi_aff(*this).reset_range_tuple_id();
5213}
5214
5215isl::checked::aff aff::scale(isl::checked::val v) const
5216{
5217  auto res = isl_aff_scale_val(copy(), v.release());
5218  return manage(res);
5219}
5220
5221isl::checked::aff aff::scale(long v) const
5222{
5223  return this->scale(isl::checked::val(ctx(), v));
5224}
5225
5226isl::checked::multi_aff aff::scale(const isl::checked::multi_val &mv) const
5227{
5228  return isl::checked::multi_aff(*this).scale(mv);
5229}
5230
5231isl::checked::aff aff::scale_down(isl::checked::val v) const
5232{
5233  auto res = isl_aff_scale_down_val(copy(), v.release());
5234  return manage(res);
5235}
5236
5237isl::checked::aff aff::scale_down(long v) const
5238{
5239  return this->scale_down(isl::checked::val(ctx(), v));
5240}
5241
5242isl::checked::multi_aff aff::scale_down(const isl::checked::multi_val &mv) const
5243{
5244  return isl::checked::multi_aff(*this).scale_down(mv);
5245}
5246
5247isl::checked::multi_aff aff::set_at(int pos, const isl::checked::aff &el) const
5248{
5249  return isl::checked::multi_aff(*this).set_at(pos, el);
5250}
5251
5252isl::checked::multi_pw_aff aff::set_at(int pos, const isl::checked::pw_aff &el) const
5253{
5254  return isl::checked::pw_aff(*this).set_at(pos, el);
5255}
5256
5257isl::checked::multi_union_pw_aff aff::set_at(int pos, const isl::checked::union_pw_aff &el) const
5258{
5259  return isl::checked::pw_aff(*this).set_at(pos, el);
5260}
5261
5262isl::checked::multi_aff aff::set_range_tuple(const isl::checked::id &id) const
5263{
5264  return isl::checked::multi_aff(*this).set_range_tuple(id);
5265}
5266
5267isl::checked::multi_aff aff::set_range_tuple(const std::string &id) const
5268{
5269  return this->set_range_tuple(isl::checked::id(ctx(), id));
5270}
5271
5272class size aff::size() const
5273{
5274  return isl::checked::multi_aff(*this).size();
5275}
5276
5277isl::checked::space aff::space() const
5278{
5279  return isl::checked::pw_aff(*this).space();
5280}
5281
5282isl::checked::aff aff::sub(isl::checked::aff aff2) const
5283{
5284  auto res = isl_aff_sub(copy(), aff2.release());
5285  return manage(res);
5286}
5287
5288isl::checked::multi_aff aff::sub(const isl::checked::multi_aff &multi2) const
5289{
5290  return isl::checked::multi_aff(*this).sub(multi2);
5291}
5292
5293isl::checked::multi_pw_aff aff::sub(const isl::checked::multi_pw_aff &multi2) const
5294{
5295  return isl::checked::pw_aff(*this).sub(multi2);
5296}
5297
5298isl::checked::multi_union_pw_aff aff::sub(const isl::checked::multi_union_pw_aff &multi2) const
5299{
5300  return isl::checked::pw_aff(*this).sub(multi2);
5301}
5302
5303isl::checked::pw_aff aff::sub(const isl::checked::pw_aff &pwaff2) const
5304{
5305  return isl::checked::pw_aff(*this).sub(pwaff2);
5306}
5307
5308isl::checked::pw_multi_aff aff::sub(const isl::checked::pw_multi_aff &pma2) const
5309{
5310  return isl::checked::pw_aff(*this).sub(pma2);
5311}
5312
5313isl::checked::union_pw_aff aff::sub(const isl::checked::union_pw_aff &upa2) const
5314{
5315  return isl::checked::pw_aff(*this).sub(upa2);
5316}
5317
5318isl::checked::union_pw_multi_aff aff::sub(const isl::checked::union_pw_multi_aff &upma2) const
5319{
5320  return isl::checked::pw_aff(*this).sub(upma2);
5321}
5322
5323isl::checked::pw_aff aff::subtract_domain(const isl::checked::set &set) const
5324{
5325  return isl::checked::pw_aff(*this).subtract_domain(set);
5326}
5327
5328isl::checked::union_pw_aff aff::subtract_domain(const isl::checked::space &space) const
5329{
5330  return isl::checked::pw_aff(*this).subtract_domain(space);
5331}
5332
5333isl::checked::union_pw_aff aff::subtract_domain(const isl::checked::union_set &uset) const
5334{
5335  return isl::checked::pw_aff(*this).subtract_domain(uset);
5336}
5337
5338isl::checked::pw_aff aff::tdiv_q(const isl::checked::pw_aff &pa2) const
5339{
5340  return isl::checked::pw_aff(*this).tdiv_q(pa2);
5341}
5342
5343isl::checked::pw_aff aff::tdiv_r(const isl::checked::pw_aff &pa2) const
5344{
5345  return isl::checked::pw_aff(*this).tdiv_r(pa2);
5346}
5347
5348isl::checked::aff_list aff::to_list() const
5349{
5350  auto res = isl_aff_to_list(copy());
5351  return manage(res);
5352}
5353
5354isl::checked::multi_pw_aff aff::to_multi_pw_aff() const
5355{
5356  return isl::checked::multi_aff(*this).to_multi_pw_aff();
5357}
5358
5359isl::checked::multi_union_pw_aff aff::to_multi_union_pw_aff() const
5360{
5361  return isl::checked::multi_aff(*this).to_multi_union_pw_aff();
5362}
5363
5364isl::checked::pw_multi_aff aff::to_pw_multi_aff() const
5365{
5366  return isl::checked::multi_aff(*this).to_pw_multi_aff();
5367}
5368
5369isl::checked::union_pw_aff aff::to_union_pw_aff() const
5370{
5371  return isl::checked::pw_aff(*this).to_union_pw_aff();
5372}
5373
5374isl::checked::union_pw_multi_aff aff::to_union_pw_multi_aff() const
5375{
5376  return isl::checked::pw_aff(*this).to_union_pw_multi_aff();
5377}
5378
5379isl::checked::aff aff::unbind_params_insert_domain(isl::checked::multi_id domain) const
5380{
5381  auto res = isl_aff_unbind_params_insert_domain(copy(), domain.release());
5382  return manage(res);
5383}
5384
5385isl::checked::multi_pw_aff aff::union_add(const isl::checked::multi_pw_aff &mpa2) const
5386{
5387  return isl::checked::pw_aff(*this).union_add(mpa2);
5388}
5389
5390isl::checked::multi_union_pw_aff aff::union_add(const isl::checked::multi_union_pw_aff &mupa2) const
5391{
5392  return isl::checked::pw_aff(*this).union_add(mupa2);
5393}
5394
5395isl::checked::pw_aff aff::union_add(const isl::checked::pw_aff &pwaff2) const
5396{
5397  return isl::checked::pw_aff(*this).union_add(pwaff2);
5398}
5399
5400isl::checked::pw_multi_aff aff::union_add(const isl::checked::pw_multi_aff &pma2) const
5401{
5402  return isl::checked::pw_aff(*this).union_add(pma2);
5403}
5404
5405isl::checked::union_pw_aff aff::union_add(const isl::checked::union_pw_aff &upa2) const
5406{
5407  return isl::checked::pw_aff(*this).union_add(upa2);
5408}
5409
5410isl::checked::union_pw_multi_aff aff::union_add(const isl::checked::union_pw_multi_aff &upma2) const
5411{
5412  return isl::checked::pw_aff(*this).union_add(upma2);
5413}
5414
5415isl::checked::aff aff::zero_on_domain(isl::checked::space space)
5416{
5417  auto res = isl_aff_zero_on_domain_space(space.release());
5418  return manage(res);
5419}
5420
5421inline std::ostream &operator<<(std::ostream &os, const aff &obj)
5422{
5423  char *str = isl_aff_to_str(obj.get());
5424  if (!str) {
5425    os.setstate(std::ios_base::badbit);
5426    return os;
5427  }
5428  os << str;
5429  free(str);
5430  return os;
5431}
5432
5433// implementations for isl::aff_list
5434aff_list manage(__isl_take isl_aff_list *ptr) {
5435  return aff_list(ptr);
5436}
5437aff_list manage_copy(__isl_keep isl_aff_list *ptr) {
5438  ptr = isl_aff_list_copy(ptr);
5439  return aff_list(ptr);
5440}
5441
5442aff_list::aff_list(__isl_take isl_aff_list *ptr)
5443    : ptr(ptr) {}
5444
5445aff_list::aff_list()
5446    : ptr(nullptr) {}
5447
5448aff_list::aff_list(const aff_list &obj)
5449    : ptr(nullptr)
5450{
5451  ptr = obj.copy();
5452}
5453
5454aff_list::aff_list(isl::checked::ctx ctx, int n)
5455{
5456  auto res = isl_aff_list_alloc(ctx.release(), n);
5457  ptr = res;
5458}
5459
5460aff_list::aff_list(isl::checked::aff el)
5461{
5462  auto res = isl_aff_list_from_aff(el.release());
5463  ptr = res;
5464}
5465
5466aff_list::aff_list(isl::checked::ctx ctx, const std::string &str)
5467{
5468  auto res = isl_aff_list_read_from_str(ctx.release(), str.c_str());
5469  ptr = res;
5470}
5471
5472aff_list &aff_list::operator=(aff_list obj) {
5473  std::swap(this->ptr, obj.ptr);
5474  return *this;
5475}
5476
5477aff_list::~aff_list() {
5478  if (ptr)
5479    isl_aff_list_free(ptr);
5480}
5481
5482__isl_give isl_aff_list *aff_list::copy() const & {
5483  return isl_aff_list_copy(ptr);
5484}
5485
5486__isl_keep isl_aff_list *aff_list::get() const {
5487  return ptr;
5488}
5489
5490__isl_give isl_aff_list *aff_list::release() {
5491  isl_aff_list *tmp = ptr;
5492  ptr = nullptr;
5493  return tmp;
5494}
5495
5496bool aff_list::is_null() const {
5497  return ptr == nullptr;
5498}
5499
5500isl::checked::ctx aff_list::ctx() const {
5501  return isl::checked::ctx(isl_aff_list_get_ctx(ptr));
5502}
5503
5504isl::checked::aff_list aff_list::add(isl::checked::aff el) const
5505{
5506  auto res = isl_aff_list_add(copy(), el.release());
5507  return manage(res);
5508}
5509
5510isl::checked::aff aff_list::at(int index) const
5511{
5512  auto res = isl_aff_list_get_at(get(), index);
5513  return manage(res);
5514}
5515
5516isl::checked::aff aff_list::get_at(int index) const
5517{
5518  return at(index);
5519}
5520
5521isl::checked::aff_list aff_list::clear() const
5522{
5523  auto res = isl_aff_list_clear(copy());
5524  return manage(res);
5525}
5526
5527isl::checked::aff_list aff_list::concat(isl::checked::aff_list list2) const
5528{
5529  auto res = isl_aff_list_concat(copy(), list2.release());
5530  return manage(res);
5531}
5532
5533isl::checked::aff_list aff_list::drop(unsigned int first, unsigned int n) const
5534{
5535  auto res = isl_aff_list_drop(copy(), first, n);
5536  return manage(res);
5537}
5538
5539stat aff_list::foreach(const std::function<stat(isl::checked::aff)> &fn) const
5540{
5541  struct fn_data {
5542    std::function<stat(isl::checked::aff)> func;
5543  } fn_data = { fn };
5544  auto fn_lambda = [](isl_aff *arg_0, void *arg_1) -> isl_stat {
5545    auto *data = static_cast<struct fn_data *>(arg_1);
5546    auto ret = (data->func)(manage(arg_0));
5547    return ret.release();
5548  };
5549  auto res = isl_aff_list_foreach(get(), fn_lambda, &fn_data);
5550  return manage(res);
5551}
5552
5553stat aff_list::foreach_scc(const std::function<boolean(isl::checked::aff, isl::checked::aff)> &follows, const std::function<stat(isl::checked::aff_list)> &fn) const
5554{
5555  struct follows_data {
5556    std::function<boolean(isl::checked::aff, isl::checked::aff)> func;
5557  } follows_data = { follows };
5558  auto follows_lambda = [](isl_aff *arg_0, isl_aff *arg_1, void *arg_2) -> isl_bool {
5559    auto *data = static_cast<struct follows_data *>(arg_2);
5560    auto ret = (data->func)(manage_copy(arg_0), manage_copy(arg_1));
5561    return ret.release();
5562  };
5563  struct fn_data {
5564    std::function<stat(isl::checked::aff_list)> func;
5565  } fn_data = { fn };
5566  auto fn_lambda = [](isl_aff_list *arg_0, void *arg_1) -> isl_stat {
5567    auto *data = static_cast<struct fn_data *>(arg_1);
5568    auto ret = (data->func)(manage(arg_0));
5569    return ret.release();
5570  };
5571  auto res = isl_aff_list_foreach_scc(get(), follows_lambda, &follows_data, fn_lambda, &fn_data);
5572  return manage(res);
5573}
5574
5575isl::checked::aff_list aff_list::insert(unsigned int pos, isl::checked::aff el) const
5576{
5577  auto res = isl_aff_list_insert(copy(), pos, el.release());
5578  return manage(res);
5579}
5580
5581isl::checked::aff_list aff_list::set_at(int index, isl::checked::aff el) const
5582{
5583  auto res = isl_aff_list_set_at(copy(), index, el.release());
5584  return manage(res);
5585}
5586
5587class size aff_list::size() const
5588{
5589  auto res = isl_aff_list_size(get());
5590  return manage(res);
5591}
5592
5593inline std::ostream &operator<<(std::ostream &os, const aff_list &obj)
5594{
5595  char *str = isl_aff_list_to_str(obj.get());
5596  if (!str) {
5597    os.setstate(std::ios_base::badbit);
5598    return os;
5599  }
5600  os << str;
5601  free(str);
5602  return os;
5603}
5604
5605// implementations for isl::ast_build
5606ast_build manage(__isl_take isl_ast_build *ptr) {
5607  return ast_build(ptr);
5608}
5609ast_build manage_copy(__isl_keep isl_ast_build *ptr) {
5610  ptr = isl_ast_build_copy(ptr);
5611  return ast_build(ptr);
5612}
5613
5614ast_build::ast_build(__isl_take isl_ast_build *ptr)
5615    : ptr(ptr) {}
5616
5617ast_build::ast_build()
5618    : ptr(nullptr) {}
5619
5620ast_build::ast_build(const ast_build &obj)
5621    : ptr(nullptr)
5622{
5623  ptr = obj.copy();
5624  copy_callbacks(obj);
5625}
5626
5627ast_build::ast_build(isl::checked::ctx ctx)
5628{
5629  auto res = isl_ast_build_alloc(ctx.release());
5630  ptr = res;
5631}
5632
5633ast_build &ast_build::operator=(ast_build obj) {
5634  std::swap(this->ptr, obj.ptr);
5635  copy_callbacks(obj);
5636  return *this;
5637}
5638
5639ast_build::~ast_build() {
5640  if (ptr)
5641    isl_ast_build_free(ptr);
5642}
5643
5644__isl_give isl_ast_build *ast_build::copy() const & {
5645  return isl_ast_build_copy(ptr);
5646}
5647
5648__isl_keep isl_ast_build *ast_build::get() const {
5649  return ptr;
5650}
5651
5652__isl_give isl_ast_build *ast_build::release() {
5653  if (at_each_domain_data)
5654    isl_die(ctx().get(), isl_error_invalid, "cannot release object with persistent callbacks", return nullptr);
5655  isl_ast_build *tmp = ptr;
5656  ptr = nullptr;
5657  return tmp;
5658}
5659
5660bool ast_build::is_null() const {
5661  return ptr == nullptr;
5662}
5663
5664isl::checked::ctx ast_build::ctx() const {
5665  return isl::checked::ctx(isl_ast_build_get_ctx(ptr));
5666}
5667
5668ast_build &ast_build::copy_callbacks(const ast_build &obj)
5669{
5670  at_each_domain_data = obj.at_each_domain_data;
5671  return *this;
5672}
5673
5674isl_ast_node *ast_build::at_each_domain(isl_ast_node *arg_0, isl_ast_build *arg_1, void *arg_2)
5675{
5676  auto *data = static_cast<struct at_each_domain_data *>(arg_2);
5677  auto ret = (data->func)(manage(arg_0), manage_copy(arg_1));
5678  return ret.release();
5679}
5680
5681void ast_build::set_at_each_domain_data(const std::function<isl::checked::ast_node(isl::checked::ast_node, isl::checked::ast_build)> &fn)
5682{
5683  at_each_domain_data = std::make_shared<struct at_each_domain_data>();
5684  at_each_domain_data->func = fn;
5685  ptr = isl_ast_build_set_at_each_domain(ptr, &at_each_domain, at_each_domain_data.get());
5686}
5687
5688isl::checked::ast_build ast_build::set_at_each_domain(const std::function<isl::checked::ast_node(isl::checked::ast_node, isl::checked::ast_build)> &fn) const
5689{
5690  auto copy = *this;
5691  copy.set_at_each_domain_data(fn);
5692  return copy;
5693}
5694
5695isl::checked::ast_expr ast_build::access_from(isl::checked::multi_pw_aff mpa) const
5696{
5697  auto res = isl_ast_build_access_from_multi_pw_aff(get(), mpa.release());
5698  return manage(res);
5699}
5700
5701isl::checked::ast_expr ast_build::access_from(isl::checked::pw_multi_aff pma) const
5702{
5703  auto res = isl_ast_build_access_from_pw_multi_aff(get(), pma.release());
5704  return manage(res);
5705}
5706
5707isl::checked::ast_expr ast_build::call_from(isl::checked::multi_pw_aff mpa) const
5708{
5709  auto res = isl_ast_build_call_from_multi_pw_aff(get(), mpa.release());
5710  return manage(res);
5711}
5712
5713isl::checked::ast_expr ast_build::call_from(isl::checked::pw_multi_aff pma) const
5714{
5715  auto res = isl_ast_build_call_from_pw_multi_aff(get(), pma.release());
5716  return manage(res);
5717}
5718
5719isl::checked::ast_expr ast_build::expr_from(isl::checked::pw_aff pa) const
5720{
5721  auto res = isl_ast_build_expr_from_pw_aff(get(), pa.release());
5722  return manage(res);
5723}
5724
5725isl::checked::ast_expr ast_build::expr_from(isl::checked::set set) const
5726{
5727  auto res = isl_ast_build_expr_from_set(get(), set.release());
5728  return manage(res);
5729}
5730
5731isl::checked::ast_build ast_build::from_context(isl::checked::set set)
5732{
5733  auto res = isl_ast_build_from_context(set.release());
5734  return manage(res);
5735}
5736
5737isl::checked::ast_node ast_build::node_from(isl::checked::schedule schedule) const
5738{
5739  auto res = isl_ast_build_node_from_schedule(get(), schedule.release());
5740  return manage(res);
5741}
5742
5743isl::checked::ast_node ast_build::node_from_schedule_map(isl::checked::union_map schedule) const
5744{
5745  auto res = isl_ast_build_node_from_schedule_map(get(), schedule.release());
5746  return manage(res);
5747}
5748
5749isl::checked::union_map ast_build::schedule() const
5750{
5751  auto res = isl_ast_build_get_schedule(get());
5752  return manage(res);
5753}
5754
5755isl::checked::union_map ast_build::get_schedule() const
5756{
5757  return schedule();
5758}
5759
5760// implementations for isl::ast_expr
5761ast_expr manage(__isl_take isl_ast_expr *ptr) {
5762  return ast_expr(ptr);
5763}
5764ast_expr manage_copy(__isl_keep isl_ast_expr *ptr) {
5765  ptr = isl_ast_expr_copy(ptr);
5766  return ast_expr(ptr);
5767}
5768
5769ast_expr::ast_expr(__isl_take isl_ast_expr *ptr)
5770    : ptr(ptr) {}
5771
5772ast_expr::ast_expr()
5773    : ptr(nullptr) {}
5774
5775ast_expr::ast_expr(const ast_expr &obj)
5776    : ptr(nullptr)
5777{
5778  ptr = obj.copy();
5779}
5780
5781ast_expr &ast_expr::operator=(ast_expr obj) {
5782  std::swap(this->ptr, obj.ptr);
5783  return *this;
5784}
5785
5786ast_expr::~ast_expr() {
5787  if (ptr)
5788    isl_ast_expr_free(ptr);
5789}
5790
5791__isl_give isl_ast_expr *ast_expr::copy() const & {
5792  return isl_ast_expr_copy(ptr);
5793}
5794
5795__isl_keep isl_ast_expr *ast_expr::get() const {
5796  return ptr;
5797}
5798
5799__isl_give isl_ast_expr *ast_expr::release() {
5800  isl_ast_expr *tmp = ptr;
5801  ptr = nullptr;
5802  return tmp;
5803}
5804
5805bool ast_expr::is_null() const {
5806  return ptr == nullptr;
5807}
5808
5809template <typename T, typename>
5810boolean ast_expr::isa_type(T subtype) const
5811{
5812  if (is_null())
5813    return boolean();
5814  return isl_ast_expr_get_type(get()) == subtype;
5815}
5816template <class T>
5817boolean ast_expr::isa() const
5818{
5819  return isa_type<decltype(T::type)>(T::type);
5820}
5821template <class T>
5822T ast_expr::as() const
5823{
5824 if (isa<T>().is_false())
5825    isl_die(ctx().get(), isl_error_invalid, "not an object of the requested subtype", return T());
5826  return T(copy());
5827}
5828
5829isl::checked::ctx ast_expr::ctx() const {
5830  return isl::checked::ctx(isl_ast_expr_get_ctx(ptr));
5831}
5832
5833std::string ast_expr::to_C_str() const
5834{
5835  auto res = isl_ast_expr_to_C_str(get());
5836  std::string tmp(res);
5837  free(res);
5838  return tmp;
5839}
5840
5841inline std::ostream &operator<<(std::ostream &os, const ast_expr &obj)
5842{
5843  char *str = isl_ast_expr_to_str(obj.get());
5844  if (!str) {
5845    os.setstate(std::ios_base::badbit);
5846    return os;
5847  }
5848  os << str;
5849  free(str);
5850  return os;
5851}
5852
5853// implementations for isl::ast_expr_id
5854ast_expr_id::ast_expr_id(__isl_take isl_ast_expr *ptr)
5855    : ast_expr(ptr) {}
5856
5857ast_expr_id::ast_expr_id()
5858    : ast_expr() {}
5859
5860ast_expr_id::ast_expr_id(const ast_expr_id &obj)
5861    : ast_expr(obj)
5862{
5863}
5864
5865ast_expr_id &ast_expr_id::operator=(ast_expr_id obj) {
5866  std::swap(this->ptr, obj.ptr);
5867  return *this;
5868}
5869
5870isl::checked::ctx ast_expr_id::ctx() const {
5871  return isl::checked::ctx(isl_ast_expr_get_ctx(ptr));
5872}
5873
5874isl::checked::id ast_expr_id::id() const
5875{
5876  auto res = isl_ast_expr_id_get_id(get());
5877  return manage(res);
5878}
5879
5880isl::checked::id ast_expr_id::get_id() const
5881{
5882  return id();
5883}
5884
5885inline std::ostream &operator<<(std::ostream &os, const ast_expr_id &obj)
5886{
5887  char *str = isl_ast_expr_to_str(obj.get());
5888  if (!str) {
5889    os.setstate(std::ios_base::badbit);
5890    return os;
5891  }
5892  os << str;
5893  free(str);
5894  return os;
5895}
5896
5897// implementations for isl::ast_expr_int
5898ast_expr_int::ast_expr_int(__isl_take isl_ast_expr *ptr)
5899    : ast_expr(ptr) {}
5900
5901ast_expr_int::ast_expr_int()
5902    : ast_expr() {}
5903
5904ast_expr_int::ast_expr_int(const ast_expr_int &obj)
5905    : ast_expr(obj)
5906{
5907}
5908
5909ast_expr_int &ast_expr_int::operator=(ast_expr_int obj) {
5910  std::swap(this->ptr, obj.ptr);
5911  return *this;
5912}
5913
5914isl::checked::ctx ast_expr_int::ctx() const {
5915  return isl::checked::ctx(isl_ast_expr_get_ctx(ptr));
5916}
5917
5918isl::checked::val ast_expr_int::val() const
5919{
5920  auto res = isl_ast_expr_int_get_val(get());
5921  return manage(res);
5922}
5923
5924isl::checked::val ast_expr_int::get_val() const
5925{
5926  return val();
5927}
5928
5929inline std::ostream &operator<<(std::ostream &os, const ast_expr_int &obj)
5930{
5931  char *str = isl_ast_expr_to_str(obj.get());
5932  if (!str) {
5933    os.setstate(std::ios_base::badbit);
5934    return os;
5935  }
5936  os << str;
5937  free(str);
5938  return os;
5939}
5940
5941// implementations for isl::ast_expr_op
5942ast_expr_op::ast_expr_op(__isl_take isl_ast_expr *ptr)
5943    : ast_expr(ptr) {}
5944
5945ast_expr_op::ast_expr_op()
5946    : ast_expr() {}
5947
5948ast_expr_op::ast_expr_op(const ast_expr_op &obj)
5949    : ast_expr(obj)
5950{
5951}
5952
5953ast_expr_op &ast_expr_op::operator=(ast_expr_op obj) {
5954  std::swap(this->ptr, obj.ptr);
5955  return *this;
5956}
5957
5958template <typename T, typename>
5959boolean ast_expr_op::isa_type(T subtype) const
5960{
5961  if (is_null())
5962    return boolean();
5963  return isl_ast_expr_op_get_type(get()) == subtype;
5964}
5965template <class T>
5966boolean ast_expr_op::isa() const
5967{
5968  return isa_type<decltype(T::type)>(T::type);
5969}
5970template <class T>
5971T ast_expr_op::as() const
5972{
5973 if (isa<T>().is_false())
5974    isl_die(ctx().get(), isl_error_invalid, "not an object of the requested subtype", return T());
5975  return T(copy());
5976}
5977
5978isl::checked::ctx ast_expr_op::ctx() const {
5979  return isl::checked::ctx(isl_ast_expr_get_ctx(ptr));
5980}
5981
5982isl::checked::ast_expr ast_expr_op::arg(int pos) const
5983{
5984  auto res = isl_ast_expr_op_get_arg(get(), pos);
5985  return manage(res);
5986}
5987
5988isl::checked::ast_expr ast_expr_op::get_arg(int pos) const
5989{
5990  return arg(pos);
5991}
5992
5993class size ast_expr_op::n_arg() const
5994{
5995  auto res = isl_ast_expr_op_get_n_arg(get());
5996  return manage(res);
5997}
5998
5999class size ast_expr_op::get_n_arg() const
6000{
6001  return n_arg();
6002}
6003
6004inline std::ostream &operator<<(std::ostream &os, const ast_expr_op &obj)
6005{
6006  char *str = isl_ast_expr_to_str(obj.get());
6007  if (!str) {
6008    os.setstate(std::ios_base::badbit);
6009    return os;
6010  }
6011  os << str;
6012  free(str);
6013  return os;
6014}
6015
6016// implementations for isl::ast_expr_op_access
6017ast_expr_op_access::ast_expr_op_access(__isl_take isl_ast_expr *ptr)
6018    : ast_expr_op(ptr) {}
6019
6020ast_expr_op_access::ast_expr_op_access()
6021    : ast_expr_op() {}
6022
6023ast_expr_op_access::ast_expr_op_access(const ast_expr_op_access &obj)
6024    : ast_expr_op(obj)
6025{
6026}
6027
6028ast_expr_op_access &ast_expr_op_access::operator=(ast_expr_op_access obj) {
6029  std::swap(this->ptr, obj.ptr);
6030  return *this;
6031}
6032
6033isl::checked::ctx ast_expr_op_access::ctx() const {
6034  return isl::checked::ctx(isl_ast_expr_get_ctx(ptr));
6035}
6036
6037inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_access &obj)
6038{
6039  char *str = isl_ast_expr_to_str(obj.get());
6040  if (!str) {
6041    os.setstate(std::ios_base::badbit);
6042    return os;
6043  }
6044  os << str;
6045  free(str);
6046  return os;
6047}
6048
6049// implementations for isl::ast_expr_op_add
6050ast_expr_op_add::ast_expr_op_add(__isl_take isl_ast_expr *ptr)
6051    : ast_expr_op(ptr) {}
6052
6053ast_expr_op_add::ast_expr_op_add()
6054    : ast_expr_op() {}
6055
6056ast_expr_op_add::ast_expr_op_add(const ast_expr_op_add &obj)
6057    : ast_expr_op(obj)
6058{
6059}
6060
6061ast_expr_op_add &ast_expr_op_add::operator=(ast_expr_op_add obj) {
6062  std::swap(this->ptr, obj.ptr);
6063  return *this;
6064}
6065
6066isl::checked::ctx ast_expr_op_add::ctx() const {
6067  return isl::checked::ctx(isl_ast_expr_get_ctx(ptr));
6068}
6069
6070inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_add &obj)
6071{
6072  char *str = isl_ast_expr_to_str(obj.get());
6073  if (!str) {
6074    os.setstate(std::ios_base::badbit);
6075    return os;
6076  }
6077  os << str;
6078  free(str);
6079  return os;
6080}
6081
6082// implementations for isl::ast_expr_op_address_of
6083ast_expr_op_address_of::ast_expr_op_address_of(__isl_take isl_ast_expr *ptr)
6084    : ast_expr_op(ptr) {}
6085
6086ast_expr_op_address_of::ast_expr_op_address_of()
6087    : ast_expr_op() {}
6088
6089ast_expr_op_address_of::ast_expr_op_address_of(const ast_expr_op_address_of &obj)
6090    : ast_expr_op(obj)
6091{
6092}
6093
6094ast_expr_op_address_of &ast_expr_op_address_of::operator=(ast_expr_op_address_of obj) {
6095  std::swap(this->ptr, obj.ptr);
6096  return *this;
6097}
6098
6099isl::checked::ctx ast_expr_op_address_of::ctx() const {
6100  return isl::checked::ctx(isl_ast_expr_get_ctx(ptr));
6101}
6102
6103inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_address_of &obj)
6104{
6105  char *str = isl_ast_expr_to_str(obj.get());
6106  if (!str) {
6107    os.setstate(std::ios_base::badbit);
6108    return os;
6109  }
6110  os << str;
6111  free(str);
6112  return os;
6113}
6114
6115// implementations for isl::ast_expr_op_and
6116ast_expr_op_and::ast_expr_op_and(__isl_take isl_ast_expr *ptr)
6117    : ast_expr_op(ptr) {}
6118
6119ast_expr_op_and::ast_expr_op_and()
6120    : ast_expr_op() {}
6121
6122ast_expr_op_and::ast_expr_op_and(const ast_expr_op_and &obj)
6123    : ast_expr_op(obj)
6124{
6125}
6126
6127ast_expr_op_and &ast_expr_op_and::operator=(ast_expr_op_and obj) {
6128  std::swap(this->ptr, obj.ptr);
6129  return *this;
6130}
6131
6132isl::checked::ctx ast_expr_op_and::ctx() const {
6133  return isl::checked::ctx(isl_ast_expr_get_ctx(ptr));
6134}
6135
6136inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_and &obj)
6137{
6138  char *str = isl_ast_expr_to_str(obj.get());
6139  if (!str) {
6140    os.setstate(std::ios_base::badbit);
6141    return os;
6142  }
6143  os << str;
6144  free(str);
6145  return os;
6146}
6147
6148// implementations for isl::ast_expr_op_and_then
6149ast_expr_op_and_then::ast_expr_op_and_then(__isl_take isl_ast_expr *ptr)
6150    : ast_expr_op(ptr) {}
6151
6152ast_expr_op_and_then::ast_expr_op_and_then()
6153    : ast_expr_op() {}
6154
6155ast_expr_op_and_then::ast_expr_op_and_then(const ast_expr_op_and_then &obj)
6156    : ast_expr_op(obj)
6157{
6158}
6159
6160ast_expr_op_and_then &ast_expr_op_and_then::operator=(ast_expr_op_and_then obj) {
6161  std::swap(this->ptr, obj.ptr);
6162  return *this;
6163}
6164
6165isl::checked::ctx ast_expr_op_and_then::ctx() const {
6166  return isl::checked::ctx(isl_ast_expr_get_ctx(ptr));
6167}
6168
6169inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_and_then &obj)
6170{
6171  char *str = isl_ast_expr_to_str(obj.get());
6172  if (!str) {
6173    os.setstate(std::ios_base::badbit);
6174    return os;
6175  }
6176  os << str;
6177  free(str);
6178  return os;
6179}
6180
6181// implementations for isl::ast_expr_op_call
6182ast_expr_op_call::ast_expr_op_call(__isl_take isl_ast_expr *ptr)
6183    : ast_expr_op(ptr) {}
6184
6185ast_expr_op_call::ast_expr_op_call()
6186    : ast_expr_op() {}
6187
6188ast_expr_op_call::ast_expr_op_call(const ast_expr_op_call &obj)
6189    : ast_expr_op(obj)
6190{
6191}
6192
6193ast_expr_op_call &ast_expr_op_call::operator=(ast_expr_op_call obj) {
6194  std::swap(this->ptr, obj.ptr);
6195  return *this;
6196}
6197
6198isl::checked::ctx ast_expr_op_call::ctx() const {
6199  return isl::checked::ctx(isl_ast_expr_get_ctx(ptr));
6200}
6201
6202inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_call &obj)
6203{
6204  char *str = isl_ast_expr_to_str(obj.get());
6205  if (!str) {
6206    os.setstate(std::ios_base::badbit);
6207    return os;
6208  }
6209  os << str;
6210  free(str);
6211  return os;
6212}
6213
6214// implementations for isl::ast_expr_op_cond
6215ast_expr_op_cond::ast_expr_op_cond(__isl_take isl_ast_expr *ptr)
6216    : ast_expr_op(ptr) {}
6217
6218ast_expr_op_cond::ast_expr_op_cond()
6219    : ast_expr_op() {}
6220
6221ast_expr_op_cond::ast_expr_op_cond(const ast_expr_op_cond &obj)
6222    : ast_expr_op(obj)
6223{
6224}
6225
6226ast_expr_op_cond &ast_expr_op_cond::operator=(ast_expr_op_cond obj) {
6227  std::swap(this->ptr, obj.ptr);
6228  return *this;
6229}
6230
6231isl::checked::ctx ast_expr_op_cond::ctx() const {
6232  return isl::checked::ctx(isl_ast_expr_get_ctx(ptr));
6233}
6234
6235inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_cond &obj)
6236{
6237  char *str = isl_ast_expr_to_str(obj.get());
6238  if (!str) {
6239    os.setstate(std::ios_base::badbit);
6240    return os;
6241  }
6242  os << str;
6243  free(str);
6244  return os;
6245}
6246
6247// implementations for isl::ast_expr_op_div
6248ast_expr_op_div::ast_expr_op_div(__isl_take isl_ast_expr *ptr)
6249    : ast_expr_op(ptr) {}
6250
6251ast_expr_op_div::ast_expr_op_div()
6252    : ast_expr_op() {}
6253
6254ast_expr_op_div::ast_expr_op_div(const ast_expr_op_div &obj)
6255    : ast_expr_op(obj)
6256{
6257}
6258
6259ast_expr_op_div &ast_expr_op_div::operator=(ast_expr_op_div obj) {
6260  std::swap(this->ptr, obj.ptr);
6261  return *this;
6262}
6263
6264isl::checked::ctx ast_expr_op_div::ctx() const {
6265  return isl::checked::ctx(isl_ast_expr_get_ctx(ptr));
6266}
6267
6268inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_div &obj)
6269{
6270  char *str = isl_ast_expr_to_str(obj.get());
6271  if (!str) {
6272    os.setstate(std::ios_base::badbit);
6273    return os;
6274  }
6275  os << str;
6276  free(str);
6277  return os;
6278}
6279
6280// implementations for isl::ast_expr_op_eq
6281ast_expr_op_eq::ast_expr_op_eq(__isl_take isl_ast_expr *ptr)
6282    : ast_expr_op(ptr) {}
6283
6284ast_expr_op_eq::ast_expr_op_eq()
6285    : ast_expr_op() {}
6286
6287ast_expr_op_eq::ast_expr_op_eq(const ast_expr_op_eq &obj)
6288    : ast_expr_op(obj)
6289{
6290}
6291
6292ast_expr_op_eq &ast_expr_op_eq::operator=(ast_expr_op_eq obj) {
6293  std::swap(this->ptr, obj.ptr);
6294  return *this;
6295}
6296
6297isl::checked::ctx ast_expr_op_eq::ctx() const {
6298  return isl::checked::ctx(isl_ast_expr_get_ctx(ptr));
6299}
6300
6301inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_eq &obj)
6302{
6303  char *str = isl_ast_expr_to_str(obj.get());
6304  if (!str) {
6305    os.setstate(std::ios_base::badbit);
6306    return os;
6307  }
6308  os << str;
6309  free(str);
6310  return os;
6311}
6312
6313// implementations for isl::ast_expr_op_fdiv_q
6314ast_expr_op_fdiv_q::ast_expr_op_fdiv_q(__isl_take isl_ast_expr *ptr)
6315    : ast_expr_op(ptr) {}
6316
6317ast_expr_op_fdiv_q::ast_expr_op_fdiv_q()
6318    : ast_expr_op() {}
6319
6320ast_expr_op_fdiv_q::ast_expr_op_fdiv_q(const ast_expr_op_fdiv_q &obj)
6321    : ast_expr_op(obj)
6322{
6323}
6324
6325ast_expr_op_fdiv_q &ast_expr_op_fdiv_q::operator=(ast_expr_op_fdiv_q obj) {
6326  std::swap(this->ptr, obj.ptr);
6327  return *this;
6328}
6329
6330isl::checked::ctx ast_expr_op_fdiv_q::ctx() const {
6331  return isl::checked::ctx(isl_ast_expr_get_ctx(ptr));
6332}
6333
6334inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_fdiv_q &obj)
6335{
6336  char *str = isl_ast_expr_to_str(obj.get());
6337  if (!str) {
6338    os.setstate(std::ios_base::badbit);
6339    return os;
6340  }
6341  os << str;
6342  free(str);
6343  return os;
6344}
6345
6346// implementations for isl::ast_expr_op_ge
6347ast_expr_op_ge::ast_expr_op_ge(__isl_take isl_ast_expr *ptr)
6348    : ast_expr_op(ptr) {}
6349
6350ast_expr_op_ge::ast_expr_op_ge()
6351    : ast_expr_op() {}
6352
6353ast_expr_op_ge::ast_expr_op_ge(const ast_expr_op_ge &obj)
6354    : ast_expr_op(obj)
6355{
6356}
6357
6358ast_expr_op_ge &ast_expr_op_ge::operator=(ast_expr_op_ge obj) {
6359  std::swap(this->ptr, obj.ptr);
6360  return *this;
6361}
6362
6363isl::checked::ctx ast_expr_op_ge::ctx() const {
6364  return isl::checked::ctx(isl_ast_expr_get_ctx(ptr));
6365}
6366
6367inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_ge &obj)
6368{
6369  char *str = isl_ast_expr_to_str(obj.get());
6370  if (!str) {
6371    os.setstate(std::ios_base::badbit);
6372    return os;
6373  }
6374  os << str;
6375  free(str);
6376  return os;
6377}
6378
6379// implementations for isl::ast_expr_op_gt
6380ast_expr_op_gt::ast_expr_op_gt(__isl_take isl_ast_expr *ptr)
6381    : ast_expr_op(ptr) {}
6382
6383ast_expr_op_gt::ast_expr_op_gt()
6384    : ast_expr_op() {}
6385
6386ast_expr_op_gt::ast_expr_op_gt(const ast_expr_op_gt &obj)
6387    : ast_expr_op(obj)
6388{
6389}
6390
6391ast_expr_op_gt &ast_expr_op_gt::operator=(ast_expr_op_gt obj) {
6392  std::swap(this->ptr, obj.ptr);
6393  return *this;
6394}
6395
6396isl::checked::ctx ast_expr_op_gt::ctx() const {
6397  return isl::checked::ctx(isl_ast_expr_get_ctx(ptr));
6398}
6399
6400inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_gt &obj)
6401{
6402  char *str = isl_ast_expr_to_str(obj.get());
6403  if (!str) {
6404    os.setstate(std::ios_base::badbit);
6405    return os;
6406  }
6407  os << str;
6408  free(str);
6409  return os;
6410}
6411
6412// implementations for isl::ast_expr_op_le
6413ast_expr_op_le::ast_expr_op_le(__isl_take isl_ast_expr *ptr)
6414    : ast_expr_op(ptr) {}
6415
6416ast_expr_op_le::ast_expr_op_le()
6417    : ast_expr_op() {}
6418
6419ast_expr_op_le::ast_expr_op_le(const ast_expr_op_le &obj)
6420    : ast_expr_op(obj)
6421{
6422}
6423
6424ast_expr_op_le &ast_expr_op_le::operator=(ast_expr_op_le obj) {
6425  std::swap(this->ptr, obj.ptr);
6426  return *this;
6427}
6428
6429isl::checked::ctx ast_expr_op_le::ctx() const {
6430  return isl::checked::ctx(isl_ast_expr_get_ctx(ptr));
6431}
6432
6433inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_le &obj)
6434{
6435  char *str = isl_ast_expr_to_str(obj.get());
6436  if (!str) {
6437    os.setstate(std::ios_base::badbit);
6438    return os;
6439  }
6440  os << str;
6441  free(str);
6442  return os;
6443}
6444
6445// implementations for isl::ast_expr_op_lt
6446ast_expr_op_lt::ast_expr_op_lt(__isl_take isl_ast_expr *ptr)
6447    : ast_expr_op(ptr) {}
6448
6449ast_expr_op_lt::ast_expr_op_lt()
6450    : ast_expr_op() {}
6451
6452ast_expr_op_lt::ast_expr_op_lt(const ast_expr_op_lt &obj)
6453    : ast_expr_op(obj)
6454{
6455}
6456
6457ast_expr_op_lt &ast_expr_op_lt::operator=(ast_expr_op_lt obj) {
6458  std::swap(this->ptr, obj.ptr);
6459  return *this;
6460}
6461
6462isl::checked::ctx ast_expr_op_lt::ctx() const {
6463  return isl::checked::ctx(isl_ast_expr_get_ctx(ptr));
6464}
6465
6466inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_lt &obj)
6467{
6468  char *str = isl_ast_expr_to_str(obj.get());
6469  if (!str) {
6470    os.setstate(std::ios_base::badbit);
6471    return os;
6472  }
6473  os << str;
6474  free(str);
6475  return os;
6476}
6477
6478// implementations for isl::ast_expr_op_max
6479ast_expr_op_max::ast_expr_op_max(__isl_take isl_ast_expr *ptr)
6480    : ast_expr_op(ptr) {}
6481
6482ast_expr_op_max::ast_expr_op_max()
6483    : ast_expr_op() {}
6484
6485ast_expr_op_max::ast_expr_op_max(const ast_expr_op_max &obj)
6486    : ast_expr_op(obj)
6487{
6488}
6489
6490ast_expr_op_max &ast_expr_op_max::operator=(ast_expr_op_max obj) {
6491  std::swap(this->ptr, obj.ptr);
6492  return *this;
6493}
6494
6495isl::checked::ctx ast_expr_op_max::ctx() const {
6496  return isl::checked::ctx(isl_ast_expr_get_ctx(ptr));
6497}
6498
6499inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_max &obj)
6500{
6501  char *str = isl_ast_expr_to_str(obj.get());
6502  if (!str) {
6503    os.setstate(std::ios_base::badbit);
6504    return os;
6505  }
6506  os << str;
6507  free(str);
6508  return os;
6509}
6510
6511// implementations for isl::ast_expr_op_member
6512ast_expr_op_member::ast_expr_op_member(__isl_take isl_ast_expr *ptr)
6513    : ast_expr_op(ptr) {}
6514
6515ast_expr_op_member::ast_expr_op_member()
6516    : ast_expr_op() {}
6517
6518ast_expr_op_member::ast_expr_op_member(const ast_expr_op_member &obj)
6519    : ast_expr_op(obj)
6520{
6521}
6522
6523ast_expr_op_member &ast_expr_op_member::operator=(ast_expr_op_member obj) {
6524  std::swap(this->ptr, obj.ptr);
6525  return *this;
6526}
6527
6528isl::checked::ctx ast_expr_op_member::ctx() const {
6529  return isl::checked::ctx(isl_ast_expr_get_ctx(ptr));
6530}
6531
6532inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_member &obj)
6533{
6534  char *str = isl_ast_expr_to_str(obj.get());
6535  if (!str) {
6536    os.setstate(std::ios_base::badbit);
6537    return os;
6538  }
6539  os << str;
6540  free(str);
6541  return os;
6542}
6543
6544// implementations for isl::ast_expr_op_min
6545ast_expr_op_min::ast_expr_op_min(__isl_take isl_ast_expr *ptr)
6546    : ast_expr_op(ptr) {}
6547
6548ast_expr_op_min::ast_expr_op_min()
6549    : ast_expr_op() {}
6550
6551ast_expr_op_min::ast_expr_op_min(const ast_expr_op_min &obj)
6552    : ast_expr_op(obj)
6553{
6554}
6555
6556ast_expr_op_min &ast_expr_op_min::operator=(ast_expr_op_min obj) {
6557  std::swap(this->ptr, obj.ptr);
6558  return *this;
6559}
6560
6561isl::checked::ctx ast_expr_op_min::ctx() const {
6562  return isl::checked::ctx(isl_ast_expr_get_ctx(ptr));
6563}
6564
6565inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_min &obj)
6566{
6567  char *str = isl_ast_expr_to_str(obj.get());
6568  if (!str) {
6569    os.setstate(std::ios_base::badbit);
6570    return os;
6571  }
6572  os << str;
6573  free(str);
6574  return os;
6575}
6576
6577// implementations for isl::ast_expr_op_minus
6578ast_expr_op_minus::ast_expr_op_minus(__isl_take isl_ast_expr *ptr)
6579    : ast_expr_op(ptr) {}
6580
6581ast_expr_op_minus::ast_expr_op_minus()
6582    : ast_expr_op() {}
6583
6584ast_expr_op_minus::ast_expr_op_minus(const ast_expr_op_minus &obj)
6585    : ast_expr_op(obj)
6586{
6587}
6588
6589ast_expr_op_minus &ast_expr_op_minus::operator=(ast_expr_op_minus obj) {
6590  std::swap(this->ptr, obj.ptr);
6591  return *this;
6592}
6593
6594isl::checked::ctx ast_expr_op_minus::ctx() const {
6595  return isl::checked::ctx(isl_ast_expr_get_ctx(ptr));
6596}
6597
6598inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_minus &obj)
6599{
6600  char *str = isl_ast_expr_to_str(obj.get());
6601  if (!str) {
6602    os.setstate(std::ios_base::badbit);
6603    return os;
6604  }
6605  os << str;
6606  free(str);
6607  return os;
6608}
6609
6610// implementations for isl::ast_expr_op_mul
6611ast_expr_op_mul::ast_expr_op_mul(__isl_take isl_ast_expr *ptr)
6612    : ast_expr_op(ptr) {}
6613
6614ast_expr_op_mul::ast_expr_op_mul()
6615    : ast_expr_op() {}
6616
6617ast_expr_op_mul::ast_expr_op_mul(const ast_expr_op_mul &obj)
6618    : ast_expr_op(obj)
6619{
6620}
6621
6622ast_expr_op_mul &ast_expr_op_mul::operator=(ast_expr_op_mul obj) {
6623  std::swap(this->ptr, obj.ptr);
6624  return *this;
6625}
6626
6627isl::checked::ctx ast_expr_op_mul::ctx() const {
6628  return isl::checked::ctx(isl_ast_expr_get_ctx(ptr));
6629}
6630
6631inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_mul &obj)
6632{
6633  char *str = isl_ast_expr_to_str(obj.get());
6634  if (!str) {
6635    os.setstate(std::ios_base::badbit);
6636    return os;
6637  }
6638  os << str;
6639  free(str);
6640  return os;
6641}
6642
6643// implementations for isl::ast_expr_op_or
6644ast_expr_op_or::ast_expr_op_or(__isl_take isl_ast_expr *ptr)
6645    : ast_expr_op(ptr) {}
6646
6647ast_expr_op_or::ast_expr_op_or()
6648    : ast_expr_op() {}
6649
6650ast_expr_op_or::ast_expr_op_or(const ast_expr_op_or &obj)
6651    : ast_expr_op(obj)
6652{
6653}
6654
6655ast_expr_op_or &ast_expr_op_or::operator=(ast_expr_op_or obj) {
6656  std::swap(this->ptr, obj.ptr);
6657  return *this;
6658}
6659
6660isl::checked::ctx ast_expr_op_or::ctx() const {
6661  return isl::checked::ctx(isl_ast_expr_get_ctx(ptr));
6662}
6663
6664inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_or &obj)
6665{
6666  char *str = isl_ast_expr_to_str(obj.get());
6667  if (!str) {
6668    os.setstate(std::ios_base::badbit);
6669    return os;
6670  }
6671  os << str;
6672  free(str);
6673  return os;
6674}
6675
6676// implementations for isl::ast_expr_op_or_else
6677ast_expr_op_or_else::ast_expr_op_or_else(__isl_take isl_ast_expr *ptr)
6678    : ast_expr_op(ptr) {}
6679
6680ast_expr_op_or_else::ast_expr_op_or_else()
6681    : ast_expr_op() {}
6682
6683ast_expr_op_or_else::ast_expr_op_or_else(const ast_expr_op_or_else &obj)
6684    : ast_expr_op(obj)
6685{
6686}
6687
6688ast_expr_op_or_else &ast_expr_op_or_else::operator=(ast_expr_op_or_else obj) {
6689  std::swap(this->ptr, obj.ptr);
6690  return *this;
6691}
6692
6693isl::checked::ctx ast_expr_op_or_else::ctx() const {
6694  return isl::checked::ctx(isl_ast_expr_get_ctx(ptr));
6695}
6696
6697inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_or_else &obj)
6698{
6699  char *str = isl_ast_expr_to_str(obj.get());
6700  if (!str) {
6701    os.setstate(std::ios_base::badbit);
6702    return os;
6703  }
6704  os << str;
6705  free(str);
6706  return os;
6707}
6708
6709// implementations for isl::ast_expr_op_pdiv_q
6710ast_expr_op_pdiv_q::ast_expr_op_pdiv_q(__isl_take isl_ast_expr *ptr)
6711    : ast_expr_op(ptr) {}
6712
6713ast_expr_op_pdiv_q::ast_expr_op_pdiv_q()
6714    : ast_expr_op() {}
6715
6716ast_expr_op_pdiv_q::ast_expr_op_pdiv_q(const ast_expr_op_pdiv_q &obj)
6717    : ast_expr_op(obj)
6718{
6719}
6720
6721ast_expr_op_pdiv_q &ast_expr_op_pdiv_q::operator=(ast_expr_op_pdiv_q obj) {
6722  std::swap(this->ptr, obj.ptr);
6723  return *this;
6724}
6725
6726isl::checked::ctx ast_expr_op_pdiv_q::ctx() const {
6727  return isl::checked::ctx(isl_ast_expr_get_ctx(ptr));
6728}
6729
6730inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_pdiv_q &obj)
6731{
6732  char *str = isl_ast_expr_to_str(obj.get());
6733  if (!str) {
6734    os.setstate(std::ios_base::badbit);
6735    return os;
6736  }
6737  os << str;
6738  free(str);
6739  return os;
6740}
6741
6742// implementations for isl::ast_expr_op_pdiv_r
6743ast_expr_op_pdiv_r::ast_expr_op_pdiv_r(__isl_take isl_ast_expr *ptr)
6744    : ast_expr_op(ptr) {}
6745
6746ast_expr_op_pdiv_r::ast_expr_op_pdiv_r()
6747    : ast_expr_op() {}
6748
6749ast_expr_op_pdiv_r::ast_expr_op_pdiv_r(const ast_expr_op_pdiv_r &obj)
6750    : ast_expr_op(obj)
6751{
6752}
6753
6754ast_expr_op_pdiv_r &ast_expr_op_pdiv_r::operator=(ast_expr_op_pdiv_r obj) {
6755  std::swap(this->ptr, obj.ptr);
6756  return *this;
6757}
6758
6759isl::checked::ctx ast_expr_op_pdiv_r::ctx() const {
6760  return isl::checked::ctx(isl_ast_expr_get_ctx(ptr));
6761}
6762
6763inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_pdiv_r &obj)
6764{
6765  char *str = isl_ast_expr_to_str(obj.get());
6766  if (!str) {
6767    os.setstate(std::ios_base::badbit);
6768    return os;
6769  }
6770  os << str;
6771  free(str);
6772  return os;
6773}
6774
6775// implementations for isl::ast_expr_op_select
6776ast_expr_op_select::ast_expr_op_select(__isl_take isl_ast_expr *ptr)
6777    : ast_expr_op(ptr) {}
6778
6779ast_expr_op_select::ast_expr_op_select()
6780    : ast_expr_op() {}
6781
6782ast_expr_op_select::ast_expr_op_select(const ast_expr_op_select &obj)
6783    : ast_expr_op(obj)
6784{
6785}
6786
6787ast_expr_op_select &ast_expr_op_select::operator=(ast_expr_op_select obj) {
6788  std::swap(this->ptr, obj.ptr);
6789  return *this;
6790}
6791
6792isl::checked::ctx ast_expr_op_select::ctx() const {
6793  return isl::checked::ctx(isl_ast_expr_get_ctx(ptr));
6794}
6795
6796inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_select &obj)
6797{
6798  char *str = isl_ast_expr_to_str(obj.get());
6799  if (!str) {
6800    os.setstate(std::ios_base::badbit);
6801    return os;
6802  }
6803  os << str;
6804  free(str);
6805  return os;
6806}
6807
6808// implementations for isl::ast_expr_op_sub
6809ast_expr_op_sub::ast_expr_op_sub(__isl_take isl_ast_expr *ptr)
6810    : ast_expr_op(ptr) {}
6811
6812ast_expr_op_sub::ast_expr_op_sub()
6813    : ast_expr_op() {}
6814
6815ast_expr_op_sub::ast_expr_op_sub(const ast_expr_op_sub &obj)
6816    : ast_expr_op(obj)
6817{
6818}
6819
6820ast_expr_op_sub &ast_expr_op_sub::operator=(ast_expr_op_sub obj) {
6821  std::swap(this->ptr, obj.ptr);
6822  return *this;
6823}
6824
6825isl::checked::ctx ast_expr_op_sub::ctx() const {
6826  return isl::checked::ctx(isl_ast_expr_get_ctx(ptr));
6827}
6828
6829inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_sub &obj)
6830{
6831  char *str = isl_ast_expr_to_str(obj.get());
6832  if (!str) {
6833    os.setstate(std::ios_base::badbit);
6834    return os;
6835  }
6836  os << str;
6837  free(str);
6838  return os;
6839}
6840
6841// implementations for isl::ast_expr_op_zdiv_r
6842ast_expr_op_zdiv_r::ast_expr_op_zdiv_r(__isl_take isl_ast_expr *ptr)
6843    : ast_expr_op(ptr) {}
6844
6845ast_expr_op_zdiv_r::ast_expr_op_zdiv_r()
6846    : ast_expr_op() {}
6847
6848ast_expr_op_zdiv_r::ast_expr_op_zdiv_r(const ast_expr_op_zdiv_r &obj)
6849    : ast_expr_op(obj)
6850{
6851}
6852
6853ast_expr_op_zdiv_r &ast_expr_op_zdiv_r::operator=(ast_expr_op_zdiv_r obj) {
6854  std::swap(this->ptr, obj.ptr);
6855  return *this;
6856}
6857
6858isl::checked::ctx ast_expr_op_zdiv_r::ctx() const {
6859  return isl::checked::ctx(isl_ast_expr_get_ctx(ptr));
6860}
6861
6862inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_zdiv_r &obj)
6863{
6864  char *str = isl_ast_expr_to_str(obj.get());
6865  if (!str) {
6866    os.setstate(std::ios_base::badbit);
6867    return os;
6868  }
6869  os << str;
6870  free(str);
6871  return os;
6872}
6873
6874// implementations for isl::ast_node
6875ast_node manage(__isl_take isl_ast_node *ptr) {
6876  return ast_node(ptr);
6877}
6878ast_node manage_copy(__isl_keep isl_ast_node *ptr) {
6879  ptr = isl_ast_node_copy(ptr);
6880  return ast_node(ptr);
6881}
6882
6883ast_node::ast_node(__isl_take isl_ast_node *ptr)
6884    : ptr(ptr) {}
6885
6886ast_node::ast_node()
6887    : ptr(nullptr) {}
6888
6889ast_node::ast_node(const ast_node &obj)
6890    : ptr(nullptr)
6891{
6892  ptr = obj.copy();
6893}
6894
6895ast_node &ast_node::operator=(ast_node obj) {
6896  std::swap(this->ptr, obj.ptr);
6897  return *this;
6898}
6899
6900ast_node::~ast_node() {
6901  if (ptr)
6902    isl_ast_node_free(ptr);
6903}
6904
6905__isl_give isl_ast_node *ast_node::copy() const & {
6906  return isl_ast_node_copy(ptr);
6907}
6908
6909__isl_keep isl_ast_node *ast_node::get() const {
6910  return ptr;
6911}
6912
6913__isl_give isl_ast_node *ast_node::release() {
6914  isl_ast_node *tmp = ptr;
6915  ptr = nullptr;
6916  return tmp;
6917}
6918
6919bool ast_node::is_null() const {
6920  return ptr == nullptr;
6921}
6922
6923template <typename T, typename>
6924boolean ast_node::isa_type(T subtype) const
6925{
6926  if (is_null())
6927    return boolean();
6928  return isl_ast_node_get_type(get()) == subtype;
6929}
6930template <class T>
6931boolean ast_node::isa() const
6932{
6933  return isa_type<decltype(T::type)>(T::type);
6934}
6935template <class T>
6936T ast_node::as() const
6937{
6938 if (isa<T>().is_false())
6939    isl_die(ctx().get(), isl_error_invalid, "not an object of the requested subtype", return T());
6940  return T(copy());
6941}
6942
6943isl::checked::ctx ast_node::ctx() const {
6944  return isl::checked::ctx(isl_ast_node_get_ctx(ptr));
6945}
6946
6947isl::checked::ast_node ast_node::map_descendant_bottom_up(const std::function<isl::checked::ast_node(isl::checked::ast_node)> &fn) const
6948{
6949  struct fn_data {
6950    std::function<isl::checked::ast_node(isl::checked::ast_node)> func;
6951  } fn_data = { fn };
6952  auto fn_lambda = [](isl_ast_node *arg_0, void *arg_1) -> isl_ast_node * {
6953    auto *data = static_cast<struct fn_data *>(arg_1);
6954    auto ret = (data->func)(manage(arg_0));
6955    return ret.release();
6956  };
6957  auto res = isl_ast_node_map_descendant_bottom_up(copy(), fn_lambda, &fn_data);
6958  return manage(res);
6959}
6960
6961std::string ast_node::to_C_str() const
6962{
6963  auto res = isl_ast_node_to_C_str(get());
6964  std::string tmp(res);
6965  free(res);
6966  return tmp;
6967}
6968
6969isl::checked::ast_node_list ast_node::to_list() const
6970{
6971  auto res = isl_ast_node_to_list(copy());
6972  return manage(res);
6973}
6974
6975inline std::ostream &operator<<(std::ostream &os, const ast_node &obj)
6976{
6977  char *str = isl_ast_node_to_str(obj.get());
6978  if (!str) {
6979    os.setstate(std::ios_base::badbit);
6980    return os;
6981  }
6982  os << str;
6983  free(str);
6984  return os;
6985}
6986
6987// implementations for isl::ast_node_block
6988ast_node_block::ast_node_block(__isl_take isl_ast_node *ptr)
6989    : ast_node(ptr) {}
6990
6991ast_node_block::ast_node_block()
6992    : ast_node() {}
6993
6994ast_node_block::ast_node_block(const ast_node_block &obj)
6995    : ast_node(obj)
6996{
6997}
6998
6999ast_node_block::ast_node_block(isl::checked::ast_node_list list)
7000{
7001  auto res = isl_ast_node_block_from_children(list.release());
7002  ptr = res;
7003}
7004
7005ast_node_block &ast_node_block::operator=(ast_node_block obj) {
7006  std::swap(this->ptr, obj.ptr);
7007  return *this;
7008}
7009
7010isl::checked::ctx ast_node_block::ctx() const {
7011  return isl::checked::ctx(isl_ast_node_get_ctx(ptr));
7012}
7013
7014isl::checked::ast_node_list ast_node_block::children() const
7015{
7016  auto res = isl_ast_node_block_get_children(get());
7017  return manage(res);
7018}
7019
7020isl::checked::ast_node_list ast_node_block::get_children() const
7021{
7022  return children();
7023}
7024
7025inline std::ostream &operator<<(std::ostream &os, const ast_node_block &obj)
7026{
7027  char *str = isl_ast_node_to_str(obj.get());
7028  if (!str) {
7029    os.setstate(std::ios_base::badbit);
7030    return os;
7031  }
7032  os << str;
7033  free(str);
7034  return os;
7035}
7036
7037// implementations for isl::ast_node_for
7038ast_node_for::ast_node_for(__isl_take isl_ast_node *ptr)
7039    : ast_node(ptr) {}
7040
7041ast_node_for::ast_node_for()
7042    : ast_node() {}
7043
7044ast_node_for::ast_node_for(const ast_node_for &obj)
7045    : ast_node(obj)
7046{
7047}
7048
7049ast_node_for &ast_node_for::operator=(ast_node_for obj) {
7050  std::swap(this->ptr, obj.ptr);
7051  return *this;
7052}
7053
7054isl::checked::ctx ast_node_for::ctx() const {
7055  return isl::checked::ctx(isl_ast_node_get_ctx(ptr));
7056}
7057
7058isl::checked::ast_node ast_node_for::body() const
7059{
7060  auto res = isl_ast_node_for_get_body(get());
7061  return manage(res);
7062}
7063
7064isl::checked::ast_node ast_node_for::get_body() const
7065{
7066  return body();
7067}
7068
7069isl::checked::ast_expr ast_node_for::cond() const
7070{
7071  auto res = isl_ast_node_for_get_cond(get());
7072  return manage(res);
7073}
7074
7075isl::checked::ast_expr ast_node_for::get_cond() const
7076{
7077  return cond();
7078}
7079
7080isl::checked::ast_expr ast_node_for::inc() const
7081{
7082  auto res = isl_ast_node_for_get_inc(get());
7083  return manage(res);
7084}
7085
7086isl::checked::ast_expr ast_node_for::get_inc() const
7087{
7088  return inc();
7089}
7090
7091isl::checked::ast_expr ast_node_for::init() const
7092{
7093  auto res = isl_ast_node_for_get_init(get());
7094  return manage(res);
7095}
7096
7097isl::checked::ast_expr ast_node_for::get_init() const
7098{
7099  return init();
7100}
7101
7102boolean ast_node_for::is_degenerate() const
7103{
7104  auto res = isl_ast_node_for_is_degenerate(get());
7105  return manage(res);
7106}
7107
7108isl::checked::ast_expr ast_node_for::iterator() const
7109{
7110  auto res = isl_ast_node_for_get_iterator(get());
7111  return manage(res);
7112}
7113
7114isl::checked::ast_expr ast_node_for::get_iterator() const
7115{
7116  return iterator();
7117}
7118
7119inline std::ostream &operator<<(std::ostream &os, const ast_node_for &obj)
7120{
7121  char *str = isl_ast_node_to_str(obj.get());
7122  if (!str) {
7123    os.setstate(std::ios_base::badbit);
7124    return os;
7125  }
7126  os << str;
7127  free(str);
7128  return os;
7129}
7130
7131// implementations for isl::ast_node_if
7132ast_node_if::ast_node_if(__isl_take isl_ast_node *ptr)
7133    : ast_node(ptr) {}
7134
7135ast_node_if::ast_node_if()
7136    : ast_node() {}
7137
7138ast_node_if::ast_node_if(const ast_node_if &obj)
7139    : ast_node(obj)
7140{
7141}
7142
7143ast_node_if &ast_node_if::operator=(ast_node_if obj) {
7144  std::swap(this->ptr, obj.ptr);
7145  return *this;
7146}
7147
7148isl::checked::ctx ast_node_if::ctx() const {
7149  return isl::checked::ctx(isl_ast_node_get_ctx(ptr));
7150}
7151
7152isl::checked::ast_expr ast_node_if::cond() const
7153{
7154  auto res = isl_ast_node_if_get_cond(get());
7155  return manage(res);
7156}
7157
7158isl::checked::ast_expr ast_node_if::get_cond() const
7159{
7160  return cond();
7161}
7162
7163isl::checked::ast_node ast_node_if::else_node() const
7164{
7165  auto res = isl_ast_node_if_get_else_node(get());
7166  return manage(res);
7167}
7168
7169isl::checked::ast_node ast_node_if::get_else_node() const
7170{
7171  return else_node();
7172}
7173
7174boolean ast_node_if::has_else_node() const
7175{
7176  auto res = isl_ast_node_if_has_else_node(get());
7177  return manage(res);
7178}
7179
7180isl::checked::ast_node ast_node_if::then_node() const
7181{
7182  auto res = isl_ast_node_if_get_then_node(get());
7183  return manage(res);
7184}
7185
7186isl::checked::ast_node ast_node_if::get_then_node() const
7187{
7188  return then_node();
7189}
7190
7191inline std::ostream &operator<<(std::ostream &os, const ast_node_if &obj)
7192{
7193  char *str = isl_ast_node_to_str(obj.get());
7194  if (!str) {
7195    os.setstate(std::ios_base::badbit);
7196    return os;
7197  }
7198  os << str;
7199  free(str);
7200  return os;
7201}
7202
7203// implementations for isl::ast_node_list
7204ast_node_list manage(__isl_take isl_ast_node_list *ptr) {
7205  return ast_node_list(ptr);
7206}
7207ast_node_list manage_copy(__isl_keep isl_ast_node_list *ptr) {
7208  ptr = isl_ast_node_list_copy(ptr);
7209  return ast_node_list(ptr);
7210}
7211
7212ast_node_list::ast_node_list(__isl_take isl_ast_node_list *ptr)
7213    : ptr(ptr) {}
7214
7215ast_node_list::ast_node_list()
7216    : ptr(nullptr) {}
7217
7218ast_node_list::ast_node_list(const ast_node_list &obj)
7219    : ptr(nullptr)
7220{
7221  ptr = obj.copy();
7222}
7223
7224ast_node_list::ast_node_list(isl::checked::ctx ctx, int n)
7225{
7226  auto res = isl_ast_node_list_alloc(ctx.release(), n);
7227  ptr = res;
7228}
7229
7230ast_node_list::ast_node_list(isl::checked::ast_node el)
7231{
7232  auto res = isl_ast_node_list_from_ast_node(el.release());
7233  ptr = res;
7234}
7235
7236ast_node_list &ast_node_list::operator=(ast_node_list obj) {
7237  std::swap(this->ptr, obj.ptr);
7238  return *this;
7239}
7240
7241ast_node_list::~ast_node_list() {
7242  if (ptr)
7243    isl_ast_node_list_free(ptr);
7244}
7245
7246__isl_give isl_ast_node_list *ast_node_list::copy() const & {
7247  return isl_ast_node_list_copy(ptr);
7248}
7249
7250__isl_keep isl_ast_node_list *ast_node_list::get() const {
7251  return ptr;
7252}
7253
7254__isl_give isl_ast_node_list *ast_node_list::release() {
7255  isl_ast_node_list *tmp = ptr;
7256  ptr = nullptr;
7257  return tmp;
7258}
7259
7260bool ast_node_list::is_null() const {
7261  return ptr == nullptr;
7262}
7263
7264isl::checked::ctx ast_node_list::ctx() const {
7265  return isl::checked::ctx(isl_ast_node_list_get_ctx(ptr));
7266}
7267
7268isl::checked::ast_node_list ast_node_list::add(isl::checked::ast_node el) const
7269{
7270  auto res = isl_ast_node_list_add(copy(), el.release());
7271  return manage(res);
7272}
7273
7274isl::checked::ast_node ast_node_list::at(int index) const
7275{
7276  auto res = isl_ast_node_list_get_at(get(), index);
7277  return manage(res);
7278}
7279
7280isl::checked::ast_node ast_node_list::get_at(int index) const
7281{
7282  return at(index);
7283}
7284
7285isl::checked::ast_node_list ast_node_list::clear() const
7286{
7287  auto res = isl_ast_node_list_clear(copy());
7288  return manage(res);
7289}
7290
7291isl::checked::ast_node_list ast_node_list::concat(isl::checked::ast_node_list list2) const
7292{
7293  auto res = isl_ast_node_list_concat(copy(), list2.release());
7294  return manage(res);
7295}
7296
7297isl::checked::ast_node_list ast_node_list::drop(unsigned int first, unsigned int n) const
7298{
7299  auto res = isl_ast_node_list_drop(copy(), first, n);
7300  return manage(res);
7301}
7302
7303stat ast_node_list::foreach(const std::function<stat(isl::checked::ast_node)> &fn) const
7304{
7305  struct fn_data {
7306    std::function<stat(isl::checked::ast_node)> func;
7307  } fn_data = { fn };
7308  auto fn_lambda = [](isl_ast_node *arg_0, void *arg_1) -> isl_stat {
7309    auto *data = static_cast<struct fn_data *>(arg_1);
7310    auto ret = (data->func)(manage(arg_0));
7311    return ret.release();
7312  };
7313  auto res = isl_ast_node_list_foreach(get(), fn_lambda, &fn_data);
7314  return manage(res);
7315}
7316
7317stat ast_node_list::foreach_scc(const std::function<boolean(isl::checked::ast_node, isl::checked::ast_node)> &follows, const std::function<stat(isl::checked::ast_node_list)> &fn) const
7318{
7319  struct follows_data {
7320    std::function<boolean(isl::checked::ast_node, isl::checked::ast_node)> func;
7321  } follows_data = { follows };
7322  auto follows_lambda = [](isl_ast_node *arg_0, isl_ast_node *arg_1, void *arg_2) -> isl_bool {
7323    auto *data = static_cast<struct follows_data *>(arg_2);
7324    auto ret = (data->func)(manage_copy(arg_0), manage_copy(arg_1));
7325    return ret.release();
7326  };
7327  struct fn_data {
7328    std::function<stat(isl::checked::ast_node_list)> func;
7329  } fn_data = { fn };
7330  auto fn_lambda = [](isl_ast_node_list *arg_0, void *arg_1) -> isl_stat {
7331    auto *data = static_cast<struct fn_data *>(arg_1);
7332    auto ret = (data->func)(manage(arg_0));
7333    return ret.release();
7334  };
7335  auto res = isl_ast_node_list_foreach_scc(get(), follows_lambda, &follows_data, fn_lambda, &fn_data);
7336  return manage(res);
7337}
7338
7339isl::checked::ast_node_list ast_node_list::insert(unsigned int pos, isl::checked::ast_node el) const
7340{
7341  auto res = isl_ast_node_list_insert(copy(), pos, el.release());
7342  return manage(res);
7343}
7344
7345isl::checked::ast_node_list ast_node_list::set_at(int index, isl::checked::ast_node el) const
7346{
7347  auto res = isl_ast_node_list_set_at(copy(), index, el.release());
7348  return manage(res);
7349}
7350
7351class size ast_node_list::size() const
7352{
7353  auto res = isl_ast_node_list_size(get());
7354  return manage(res);
7355}
7356
7357inline std::ostream &operator<<(std::ostream &os, const ast_node_list &obj)
7358{
7359  char *str = isl_ast_node_list_to_str(obj.get());
7360  if (!str) {
7361    os.setstate(std::ios_base::badbit);
7362    return os;
7363  }
7364  os << str;
7365  free(str);
7366  return os;
7367}
7368
7369// implementations for isl::ast_node_mark
7370ast_node_mark::ast_node_mark(__isl_take isl_ast_node *ptr)
7371    : ast_node(ptr) {}
7372
7373ast_node_mark::ast_node_mark()
7374    : ast_node() {}
7375
7376ast_node_mark::ast_node_mark(const ast_node_mark &obj)
7377    : ast_node(obj)
7378{
7379}
7380
7381ast_node_mark &ast_node_mark::operator=(ast_node_mark obj) {
7382  std::swap(this->ptr, obj.ptr);
7383  return *this;
7384}
7385
7386isl::checked::ctx ast_node_mark::ctx() const {
7387  return isl::checked::ctx(isl_ast_node_get_ctx(ptr));
7388}
7389
7390isl::checked::id ast_node_mark::id() const
7391{
7392  auto res = isl_ast_node_mark_get_id(get());
7393  return manage(res);
7394}
7395
7396isl::checked::id ast_node_mark::get_id() const
7397{
7398  return id();
7399}
7400
7401isl::checked::ast_node ast_node_mark::node() const
7402{
7403  auto res = isl_ast_node_mark_get_node(get());
7404  return manage(res);
7405}
7406
7407isl::checked::ast_node ast_node_mark::get_node() const
7408{
7409  return node();
7410}
7411
7412inline std::ostream &operator<<(std::ostream &os, const ast_node_mark &obj)
7413{
7414  char *str = isl_ast_node_to_str(obj.get());
7415  if (!str) {
7416    os.setstate(std::ios_base::badbit);
7417    return os;
7418  }
7419  os << str;
7420  free(str);
7421  return os;
7422}
7423
7424// implementations for isl::ast_node_user
7425ast_node_user::ast_node_user(__isl_take isl_ast_node *ptr)
7426    : ast_node(ptr) {}
7427
7428ast_node_user::ast_node_user()
7429    : ast_node() {}
7430
7431ast_node_user::ast_node_user(const ast_node_user &obj)
7432    : ast_node(obj)
7433{
7434}
7435
7436ast_node_user::ast_node_user(isl::checked::ast_expr expr)
7437{
7438  auto res = isl_ast_node_user_from_expr(expr.release());
7439  ptr = res;
7440}
7441
7442ast_node_user &ast_node_user::operator=(ast_node_user obj) {
7443  std::swap(this->ptr, obj.ptr);
7444  return *this;
7445}
7446
7447isl::checked::ctx ast_node_user::ctx() const {
7448  return isl::checked::ctx(isl_ast_node_get_ctx(ptr));
7449}
7450
7451isl::checked::ast_expr ast_node_user::expr() const
7452{
7453  auto res = isl_ast_node_user_get_expr(get());
7454  return manage(res);
7455}
7456
7457isl::checked::ast_expr ast_node_user::get_expr() const
7458{
7459  return expr();
7460}
7461
7462inline std::ostream &operator<<(std::ostream &os, const ast_node_user &obj)
7463{
7464  char *str = isl_ast_node_to_str(obj.get());
7465  if (!str) {
7466    os.setstate(std::ios_base::badbit);
7467    return os;
7468  }
7469  os << str;
7470  free(str);
7471  return os;
7472}
7473
7474// implementations for isl::basic_map
7475basic_map manage(__isl_take isl_basic_map *ptr) {
7476  return basic_map(ptr);
7477}
7478basic_map manage_copy(__isl_keep isl_basic_map *ptr) {
7479  ptr = isl_basic_map_copy(ptr);
7480  return basic_map(ptr);
7481}
7482
7483basic_map::basic_map(__isl_take isl_basic_map *ptr)
7484    : ptr(ptr) {}
7485
7486basic_map::basic_map()
7487    : ptr(nullptr) {}
7488
7489basic_map::basic_map(const basic_map &obj)
7490    : ptr(nullptr)
7491{
7492  ptr = obj.copy();
7493}
7494
7495basic_map::basic_map(isl::checked::ctx ctx, const std::string &str)
7496{
7497  auto res = isl_basic_map_read_from_str(ctx.release(), str.c_str());
7498  ptr = res;
7499}
7500
7501basic_map &basic_map::operator=(basic_map obj) {
7502  std::swap(this->ptr, obj.ptr);
7503  return *this;
7504}
7505
7506basic_map::~basic_map() {
7507  if (ptr)
7508    isl_basic_map_free(ptr);
7509}
7510
7511__isl_give isl_basic_map *basic_map::copy() const & {
7512  return isl_basic_map_copy(ptr);
7513}
7514
7515__isl_keep isl_basic_map *basic_map::get() const {
7516  return ptr;
7517}
7518
7519__isl_give isl_basic_map *basic_map::release() {
7520  isl_basic_map *tmp = ptr;
7521  ptr = nullptr;
7522  return tmp;
7523}
7524
7525bool basic_map::is_null() const {
7526  return ptr == nullptr;
7527}
7528
7529isl::checked::ctx basic_map::ctx() const {
7530  return isl::checked::ctx(isl_basic_map_get_ctx(ptr));
7531}
7532
7533isl::checked::basic_map basic_map::affine_hull() const
7534{
7535  auto res = isl_basic_map_affine_hull(copy());
7536  return manage(res);
7537}
7538
7539isl::checked::basic_map basic_map::apply_domain(isl::checked::basic_map bmap2) const
7540{
7541  auto res = isl_basic_map_apply_domain(copy(), bmap2.release());
7542  return manage(res);
7543}
7544
7545isl::checked::map basic_map::apply_domain(const isl::checked::map &map2) const
7546{
7547  return isl::checked::map(*this).apply_domain(map2);
7548}
7549
7550isl::checked::union_map basic_map::apply_domain(const isl::checked::union_map &umap2) const
7551{
7552  return isl::checked::map(*this).apply_domain(umap2);
7553}
7554
7555isl::checked::basic_map basic_map::apply_range(isl::checked::basic_map bmap2) const
7556{
7557  auto res = isl_basic_map_apply_range(copy(), bmap2.release());
7558  return manage(res);
7559}
7560
7561isl::checked::map basic_map::apply_range(const isl::checked::map &map2) const
7562{
7563  return isl::checked::map(*this).apply_range(map2);
7564}
7565
7566isl::checked::union_map basic_map::apply_range(const isl::checked::union_map &umap2) const
7567{
7568  return isl::checked::map(*this).apply_range(umap2);
7569}
7570
7571isl::checked::map basic_map::as_map() const
7572{
7573  return isl::checked::map(*this).as_map();
7574}
7575
7576isl::checked::multi_union_pw_aff basic_map::as_multi_union_pw_aff() const
7577{
7578  return isl::checked::map(*this).as_multi_union_pw_aff();
7579}
7580
7581isl::checked::pw_multi_aff basic_map::as_pw_multi_aff() const
7582{
7583  return isl::checked::map(*this).as_pw_multi_aff();
7584}
7585
7586isl::checked::union_pw_multi_aff basic_map::as_union_pw_multi_aff() const
7587{
7588  return isl::checked::map(*this).as_union_pw_multi_aff();
7589}
7590
7591isl::checked::set basic_map::bind_domain(const isl::checked::multi_id &tuple) const
7592{
7593  return isl::checked::map(*this).bind_domain(tuple);
7594}
7595
7596isl::checked::set basic_map::bind_range(const isl::checked::multi_id &tuple) const
7597{
7598  return isl::checked::map(*this).bind_range(tuple);
7599}
7600
7601isl::checked::map basic_map::coalesce() const
7602{
7603  return isl::checked::map(*this).coalesce();
7604}
7605
7606isl::checked::map basic_map::complement() const
7607{
7608  return isl::checked::map(*this).complement();
7609}
7610
7611isl::checked::union_map basic_map::compute_divs() const
7612{
7613  return isl::checked::map(*this).compute_divs();
7614}
7615
7616isl::checked::map basic_map::curry() const
7617{
7618  return isl::checked::map(*this).curry();
7619}
7620
7621isl::checked::basic_set basic_map::deltas() const
7622{
7623  auto res = isl_basic_map_deltas(copy());
7624  return manage(res);
7625}
7626
7627isl::checked::basic_map basic_map::detect_equalities() const
7628{
7629  auto res = isl_basic_map_detect_equalities(copy());
7630  return manage(res);
7631}
7632
7633isl::checked::set basic_map::domain() const
7634{
7635  return isl::checked::map(*this).domain();
7636}
7637
7638isl::checked::map basic_map::domain_factor_domain() const
7639{
7640  return isl::checked::map(*this).domain_factor_domain();
7641}
7642
7643isl::checked::map basic_map::domain_factor_range() const
7644{
7645  return isl::checked::map(*this).domain_factor_range();
7646}
7647
7648isl::checked::union_map basic_map::domain_map() const
7649{
7650  return isl::checked::map(*this).domain_map();
7651}
7652
7653isl::checked::union_pw_multi_aff basic_map::domain_map_union_pw_multi_aff() const
7654{
7655  return isl::checked::map(*this).domain_map_union_pw_multi_aff();
7656}
7657
7658isl::checked::map basic_map::domain_product(const isl::checked::map &map2) const
7659{
7660  return isl::checked::map(*this).domain_product(map2);
7661}
7662
7663isl::checked::union_map basic_map::domain_product(const isl::checked::union_map &umap2) const
7664{
7665  return isl::checked::map(*this).domain_product(umap2);
7666}
7667
7668isl::checked::map basic_map::domain_reverse() const
7669{
7670  return isl::checked::map(*this).domain_reverse();
7671}
7672
7673class size basic_map::domain_tuple_dim() const
7674{
7675  return isl::checked::map(*this).domain_tuple_dim();
7676}
7677
7678isl::checked::id basic_map::domain_tuple_id() const
7679{
7680  return isl::checked::map(*this).domain_tuple_id();
7681}
7682
7683isl::checked::map basic_map::drop_unused_params() const
7684{
7685  return isl::checked::map(*this).drop_unused_params();
7686}
7687
7688isl::checked::map basic_map::eq_at(const isl::checked::multi_pw_aff &mpa) const
7689{
7690  return isl::checked::map(*this).eq_at(mpa);
7691}
7692
7693isl::checked::union_map basic_map::eq_at(const isl::checked::multi_union_pw_aff &mupa) const
7694{
7695  return isl::checked::map(*this).eq_at(mupa);
7696}
7697
7698boolean basic_map::every_map(const std::function<boolean(isl::checked::map)> &test) const
7699{
7700  return isl::checked::map(*this).every_map(test);
7701}
7702
7703isl::checked::map basic_map::extract_map(const isl::checked::space &space) const
7704{
7705  return isl::checked::map(*this).extract_map(space);
7706}
7707
7708isl::checked::map basic_map::factor_domain() const
7709{
7710  return isl::checked::map(*this).factor_domain();
7711}
7712
7713isl::checked::map basic_map::factor_range() const
7714{
7715  return isl::checked::map(*this).factor_range();
7716}
7717
7718isl::checked::map basic_map::fixed_power(const isl::checked::val &exp) const
7719{
7720  return isl::checked::map(*this).fixed_power(exp);
7721}
7722
7723isl::checked::map basic_map::fixed_power(long exp) const
7724{
7725  return this->fixed_power(isl::checked::val(ctx(), exp));
7726}
7727
7728isl::checked::basic_map basic_map::flatten() const
7729{
7730  auto res = isl_basic_map_flatten(copy());
7731  return manage(res);
7732}
7733
7734isl::checked::basic_map basic_map::flatten_domain() const
7735{
7736  auto res = isl_basic_map_flatten_domain(copy());
7737  return manage(res);
7738}
7739
7740isl::checked::basic_map basic_map::flatten_range() const
7741{
7742  auto res = isl_basic_map_flatten_range(copy());
7743  return manage(res);
7744}
7745
7746stat basic_map::foreach_basic_map(const std::function<stat(isl::checked::basic_map)> &fn) const
7747{
7748  return isl::checked::map(*this).foreach_basic_map(fn);
7749}
7750
7751stat basic_map::foreach_map(const std::function<stat(isl::checked::map)> &fn) const
7752{
7753  return isl::checked::map(*this).foreach_map(fn);
7754}
7755
7756isl::checked::basic_map basic_map::gist(isl::checked::basic_map context) const
7757{
7758  auto res = isl_basic_map_gist(copy(), context.release());
7759  return manage(res);
7760}
7761
7762isl::checked::map basic_map::gist(const isl::checked::map &context) const
7763{
7764  return isl::checked::map(*this).gist(context);
7765}
7766
7767isl::checked::union_map basic_map::gist(const isl::checked::union_map &context) const
7768{
7769  return isl::checked::map(*this).gist(context);
7770}
7771
7772isl::checked::map basic_map::gist_domain(const isl::checked::set &context) const
7773{
7774  return isl::checked::map(*this).gist_domain(context);
7775}
7776
7777isl::checked::union_map basic_map::gist_domain(const isl::checked::union_set &uset) const
7778{
7779  return isl::checked::map(*this).gist_domain(uset);
7780}
7781
7782isl::checked::map basic_map::gist_params(const isl::checked::set &context) const
7783{
7784  return isl::checked::map(*this).gist_params(context);
7785}
7786
7787isl::checked::union_map basic_map::gist_range(const isl::checked::union_set &uset) const
7788{
7789  return isl::checked::map(*this).gist_range(uset);
7790}
7791
7792boolean basic_map::has_domain_tuple_id() const
7793{
7794  return isl::checked::map(*this).has_domain_tuple_id();
7795}
7796
7797boolean basic_map::has_range_tuple_id() const
7798{
7799  return isl::checked::map(*this).has_range_tuple_id();
7800}
7801
7802isl::checked::basic_map basic_map::intersect(isl::checked::basic_map bmap2) const
7803{
7804  auto res = isl_basic_map_intersect(copy(), bmap2.release());
7805  return manage(res);
7806}
7807
7808isl::checked::map basic_map::intersect(const isl::checked::map &map2) const
7809{
7810  return isl::checked::map(*this).intersect(map2);
7811}
7812
7813isl::checked::union_map basic_map::intersect(const isl::checked::union_map &umap2) const
7814{
7815  return isl::checked::map(*this).intersect(umap2);
7816}
7817
7818isl::checked::basic_map basic_map::intersect_domain(isl::checked::basic_set bset) const
7819{
7820  auto res = isl_basic_map_intersect_domain(copy(), bset.release());
7821  return manage(res);
7822}
7823
7824isl::checked::map basic_map::intersect_domain(const isl::checked::set &set) const
7825{
7826  return isl::checked::map(*this).intersect_domain(set);
7827}
7828
7829isl::checked::union_map basic_map::intersect_domain(const isl::checked::space &space) const
7830{
7831  return isl::checked::map(*this).intersect_domain(space);
7832}
7833
7834isl::checked::union_map basic_map::intersect_domain(const isl::checked::union_set &uset) const
7835{
7836  return isl::checked::map(*this).intersect_domain(uset);
7837}
7838
7839isl::checked::basic_map basic_map::intersect_domain(const isl::checked::point &bset) const
7840{
7841  return this->intersect_domain(isl::checked::basic_set(bset));
7842}
7843
7844isl::checked::map basic_map::intersect_domain_factor_domain(const isl::checked::map &factor) const
7845{
7846  return isl::checked::map(*this).intersect_domain_factor_domain(factor);
7847}
7848
7849isl::checked::union_map basic_map::intersect_domain_factor_domain(const isl::checked::union_map &factor) const
7850{
7851  return isl::checked::map(*this).intersect_domain_factor_domain(factor);
7852}
7853
7854isl::checked::map basic_map::intersect_domain_factor_range(const isl::checked::map &factor) const
7855{
7856  return isl::checked::map(*this).intersect_domain_factor_range(factor);
7857}
7858
7859isl::checked::union_map basic_map::intersect_domain_factor_range(const isl::checked::union_map &factor) const
7860{
7861  return isl::checked::map(*this).intersect_domain_factor_range(factor);
7862}
7863
7864isl::checked::map basic_map::intersect_domain_wrapped_domain(const isl::checked::set &domain) const
7865{
7866  return isl::checked::map(*this).intersect_domain_wrapped_domain(domain);
7867}
7868
7869isl::checked::union_map basic_map::intersect_domain_wrapped_domain(const isl::checked::union_set &domain) const
7870{
7871  return isl::checked::map(*this).intersect_domain_wrapped_domain(domain);
7872}
7873
7874isl::checked::map basic_map::intersect_params(const isl::checked::set &params) const
7875{
7876  return isl::checked::map(*this).intersect_params(params);
7877}
7878
7879isl::checked::basic_map basic_map::intersect_range(isl::checked::basic_set bset) const
7880{
7881  auto res = isl_basic_map_intersect_range(copy(), bset.release());
7882  return manage(res);
7883}
7884
7885isl::checked::map basic_map::intersect_range(const isl::checked::set &set) const
7886{
7887  return isl::checked::map(*this).intersect_range(set);
7888}
7889
7890isl::checked::union_map basic_map::intersect_range(const isl::checked::space &space) const
7891{
7892  return isl::checked::map(*this).intersect_range(space);
7893}
7894
7895isl::checked::union_map basic_map::intersect_range(const isl::checked::union_set &uset) const
7896{
7897  return isl::checked::map(*this).intersect_range(uset);
7898}
7899
7900isl::checked::basic_map basic_map::intersect_range(const isl::checked::point &bset) const
7901{
7902  return this->intersect_range(isl::checked::basic_set(bset));
7903}
7904
7905isl::checked::map basic_map::intersect_range_factor_domain(const isl::checked::map &factor) const
7906{
7907  return isl::checked::map(*this).intersect_range_factor_domain(factor);
7908}
7909
7910isl::checked::union_map basic_map::intersect_range_factor_domain(const isl::checked::union_map &factor) const
7911{
7912  return isl::checked::map(*this).intersect_range_factor_domain(factor);
7913}
7914
7915isl::checked::map basic_map::intersect_range_factor_range(const isl::checked::map &factor) const
7916{
7917  return isl::checked::map(*this).intersect_range_factor_range(factor);
7918}
7919
7920isl::checked::union_map basic_map::intersect_range_factor_range(const isl::checked::union_map &factor) const
7921{
7922  return isl::checked::map(*this).intersect_range_factor_range(factor);
7923}
7924
7925isl::checked::map basic_map::intersect_range_wrapped_domain(const isl::checked::set &domain) const
7926{
7927  return isl::checked::map(*this).intersect_range_wrapped_domain(domain);
7928}
7929
7930isl::checked::union_map basic_map::intersect_range_wrapped_domain(const isl::checked::union_set &domain) const
7931{
7932  return isl::checked::map(*this).intersect_range_wrapped_domain(domain);
7933}
7934
7935boolean basic_map::is_bijective() const
7936{
7937  return isl::checked::map(*this).is_bijective();
7938}
7939
7940boolean basic_map::is_disjoint(const isl::checked::map &map2) const
7941{
7942  return isl::checked::map(*this).is_disjoint(map2);
7943}
7944
7945boolean basic_map::is_disjoint(const isl::checked::union_map &umap2) const
7946{
7947  return isl::checked::map(*this).is_disjoint(umap2);
7948}
7949
7950boolean basic_map::is_empty() const
7951{
7952  auto res = isl_basic_map_is_empty(get());
7953  return manage(res);
7954}
7955
7956boolean basic_map::is_equal(const isl::checked::basic_map &bmap2) const
7957{
7958  auto res = isl_basic_map_is_equal(get(), bmap2.get());
7959  return manage(res);
7960}
7961
7962boolean basic_map::is_equal(const isl::checked::map &map2) const
7963{
7964  return isl::checked::map(*this).is_equal(map2);
7965}
7966
7967boolean basic_map::is_equal(const isl::checked::union_map &umap2) const
7968{
7969  return isl::checked::map(*this).is_equal(umap2);
7970}
7971
7972boolean basic_map::is_injective() const
7973{
7974  return isl::checked::map(*this).is_injective();
7975}
7976
7977boolean basic_map::is_single_valued() const
7978{
7979  return isl::checked::map(*this).is_single_valued();
7980}
7981
7982boolean basic_map::is_strict_subset(const isl::checked::map &map2) const
7983{
7984  return isl::checked::map(*this).is_strict_subset(map2);
7985}
7986
7987boolean basic_map::is_strict_subset(const isl::checked::union_map &umap2) const
7988{
7989  return isl::checked::map(*this).is_strict_subset(umap2);
7990}
7991
7992boolean basic_map::is_subset(const isl::checked::basic_map &bmap2) const
7993{
7994  auto res = isl_basic_map_is_subset(get(), bmap2.get());
7995  return manage(res);
7996}
7997
7998boolean basic_map::is_subset(const isl::checked::map &map2) const
7999{
8000  return isl::checked::map(*this).is_subset(map2);
8001}
8002
8003boolean basic_map::is_subset(const isl::checked::union_map &umap2) const
8004{
8005  return isl::checked::map(*this).is_subset(umap2);
8006}
8007
8008boolean basic_map::isa_map() const
8009{
8010  return isl::checked::map(*this).isa_map();
8011}
8012
8013isl::checked::map basic_map::lex_ge_at(const isl::checked::multi_pw_aff &mpa) const
8014{
8015  return isl::checked::map(*this).lex_ge_at(mpa);
8016}
8017
8018isl::checked::map basic_map::lex_gt_at(const isl::checked::multi_pw_aff &mpa) const
8019{
8020  return isl::checked::map(*this).lex_gt_at(mpa);
8021}
8022
8023isl::checked::map basic_map::lex_le_at(const isl::checked::multi_pw_aff &mpa) const
8024{
8025  return isl::checked::map(*this).lex_le_at(mpa);
8026}
8027
8028isl::checked::map basic_map::lex_lt_at(const isl::checked::multi_pw_aff &mpa) const
8029{
8030  return isl::checked::map(*this).lex_lt_at(mpa);
8031}
8032
8033isl::checked::map basic_map::lexmax() const
8034{
8035  auto res = isl_basic_map_lexmax(copy());
8036  return manage(res);
8037}
8038
8039isl::checked::pw_multi_aff basic_map::lexmax_pw_multi_aff() const
8040{
8041  return isl::checked::map(*this).lexmax_pw_multi_aff();
8042}
8043
8044isl::checked::map basic_map::lexmin() const
8045{
8046  auto res = isl_basic_map_lexmin(copy());
8047  return manage(res);
8048}
8049
8050isl::checked::pw_multi_aff basic_map::lexmin_pw_multi_aff() const
8051{
8052  return isl::checked::map(*this).lexmin_pw_multi_aff();
8053}
8054
8055isl::checked::map basic_map::lower_bound(const isl::checked::multi_pw_aff &lower) const
8056{
8057  return isl::checked::map(*this).lower_bound(lower);
8058}
8059
8060isl::checked::map_list basic_map::map_list() const
8061{
8062  return isl::checked::map(*this).map_list();
8063}
8064
8065isl::checked::multi_pw_aff basic_map::max_multi_pw_aff() const
8066{
8067  return isl::checked::map(*this).max_multi_pw_aff();
8068}
8069
8070isl::checked::multi_pw_aff basic_map::min_multi_pw_aff() const
8071{
8072  return isl::checked::map(*this).min_multi_pw_aff();
8073}
8074
8075class size basic_map::n_basic_map() const
8076{
8077  return isl::checked::map(*this).n_basic_map();
8078}
8079
8080isl::checked::set basic_map::params() const
8081{
8082  return isl::checked::map(*this).params();
8083}
8084
8085isl::checked::basic_map basic_map::polyhedral_hull() const
8086{
8087  return isl::checked::map(*this).polyhedral_hull();
8088}
8089
8090isl::checked::map basic_map::preimage_domain(const isl::checked::multi_aff &ma) const
8091{
8092  return isl::checked::map(*this).preimage_domain(ma);
8093}
8094
8095isl::checked::map basic_map::preimage_domain(const isl::checked::multi_pw_aff &mpa) const
8096{
8097  return isl::checked::map(*this).preimage_domain(mpa);
8098}
8099
8100isl::checked::map basic_map::preimage_domain(const isl::checked::pw_multi_aff &pma) const
8101{
8102  return isl::checked::map(*this).preimage_domain(pma);
8103}
8104
8105isl::checked::union_map basic_map::preimage_domain(const isl::checked::union_pw_multi_aff &upma) const
8106{
8107  return isl::checked::map(*this).preimage_domain(upma);
8108}
8109
8110isl::checked::map basic_map::preimage_range(const isl::checked::multi_aff &ma) const
8111{
8112  return isl::checked::map(*this).preimage_range(ma);
8113}
8114
8115isl::checked::map basic_map::preimage_range(const isl::checked::pw_multi_aff &pma) const
8116{
8117  return isl::checked::map(*this).preimage_range(pma);
8118}
8119
8120isl::checked::union_map basic_map::preimage_range(const isl::checked::union_pw_multi_aff &upma) const
8121{
8122  return isl::checked::map(*this).preimage_range(upma);
8123}
8124
8125isl::checked::map basic_map::product(const isl::checked::map &map2) const
8126{
8127  return isl::checked::map(*this).product(map2);
8128}
8129
8130isl::checked::union_map basic_map::product(const isl::checked::union_map &umap2) const
8131{
8132  return isl::checked::map(*this).product(umap2);
8133}
8134
8135isl::checked::map basic_map::project_out_all_params() const
8136{
8137  return isl::checked::map(*this).project_out_all_params();
8138}
8139
8140isl::checked::map basic_map::project_out_param(const isl::checked::id &id) const
8141{
8142  return isl::checked::map(*this).project_out_param(id);
8143}
8144
8145isl::checked::map basic_map::project_out_param(const std::string &id) const
8146{
8147  return this->project_out_param(isl::checked::id(ctx(), id));
8148}
8149
8150isl::checked::map basic_map::project_out_param(const isl::checked::id_list &list) const
8151{
8152  return isl::checked::map(*this).project_out_param(list);
8153}
8154
8155isl::checked::set basic_map::range() const
8156{
8157  return isl::checked::map(*this).range();
8158}
8159
8160isl::checked::map basic_map::range_factor_domain() const
8161{
8162  return isl::checked::map(*this).range_factor_domain();
8163}
8164
8165isl::checked::map basic_map::range_factor_range() const
8166{
8167  return isl::checked::map(*this).range_factor_range();
8168}
8169
8170isl::checked::fixed_box basic_map::range_lattice_tile() const
8171{
8172  return isl::checked::map(*this).range_lattice_tile();
8173}
8174
8175isl::checked::union_map basic_map::range_map() const
8176{
8177  return isl::checked::map(*this).range_map();
8178}
8179
8180isl::checked::map basic_map::range_product(const isl::checked::map &map2) const
8181{
8182  return isl::checked::map(*this).range_product(map2);
8183}
8184
8185isl::checked::union_map basic_map::range_product(const isl::checked::union_map &umap2) const
8186{
8187  return isl::checked::map(*this).range_product(umap2);
8188}
8189
8190isl::checked::map basic_map::range_reverse() const
8191{
8192  return isl::checked::map(*this).range_reverse();
8193}
8194
8195isl::checked::fixed_box basic_map::range_simple_fixed_box_hull() const
8196{
8197  return isl::checked::map(*this).range_simple_fixed_box_hull();
8198}
8199
8200class size basic_map::range_tuple_dim() const
8201{
8202  return isl::checked::map(*this).range_tuple_dim();
8203}
8204
8205isl::checked::id basic_map::range_tuple_id() const
8206{
8207  return isl::checked::map(*this).range_tuple_id();
8208}
8209
8210isl::checked::basic_map basic_map::reverse() const
8211{
8212  auto res = isl_basic_map_reverse(copy());
8213  return manage(res);
8214}
8215
8216isl::checked::basic_map basic_map::sample() const
8217{
8218  auto res = isl_basic_map_sample(copy());
8219  return manage(res);
8220}
8221
8222isl::checked::map basic_map::set_domain_tuple(const isl::checked::id &id) const
8223{
8224  return isl::checked::map(*this).set_domain_tuple(id);
8225}
8226
8227isl::checked::map basic_map::set_domain_tuple(const std::string &id) const
8228{
8229  return this->set_domain_tuple(isl::checked::id(ctx(), id));
8230}
8231
8232isl::checked::map basic_map::set_range_tuple(const isl::checked::id &id) const
8233{
8234  return isl::checked::map(*this).set_range_tuple(id);
8235}
8236
8237isl::checked::map basic_map::set_range_tuple(const std::string &id) const
8238{
8239  return this->set_range_tuple(isl::checked::id(ctx(), id));
8240}
8241
8242isl::checked::space basic_map::space() const
8243{
8244  return isl::checked::map(*this).space();
8245}
8246
8247isl::checked::map basic_map::subtract(const isl::checked::map &map2) const
8248{
8249  return isl::checked::map(*this).subtract(map2);
8250}
8251
8252isl::checked::union_map basic_map::subtract(const isl::checked::union_map &umap2) const
8253{
8254  return isl::checked::map(*this).subtract(umap2);
8255}
8256
8257isl::checked::union_map basic_map::subtract_domain(const isl::checked::union_set &dom) const
8258{
8259  return isl::checked::map(*this).subtract_domain(dom);
8260}
8261
8262isl::checked::union_map basic_map::subtract_range(const isl::checked::union_set &dom) const
8263{
8264  return isl::checked::map(*this).subtract_range(dom);
8265}
8266
8267isl::checked::map_list basic_map::to_list() const
8268{
8269  return isl::checked::map(*this).to_list();
8270}
8271
8272isl::checked::union_map basic_map::to_union_map() const
8273{
8274  return isl::checked::map(*this).to_union_map();
8275}
8276
8277isl::checked::map basic_map::uncurry() const
8278{
8279  return isl::checked::map(*this).uncurry();
8280}
8281
8282isl::checked::map basic_map::unite(isl::checked::basic_map bmap2) const
8283{
8284  auto res = isl_basic_map_union(copy(), bmap2.release());
8285  return manage(res);
8286}
8287
8288isl::checked::map basic_map::unite(const isl::checked::map &map2) const
8289{
8290  return isl::checked::map(*this).unite(map2);
8291}
8292
8293isl::checked::union_map basic_map::unite(const isl::checked::union_map &umap2) const
8294{
8295  return isl::checked::map(*this).unite(umap2);
8296}
8297
8298isl::checked::basic_map basic_map::unshifted_simple_hull() const
8299{
8300  return isl::checked::map(*this).unshifted_simple_hull();
8301}
8302
8303isl::checked::map basic_map::upper_bound(const isl::checked::multi_pw_aff &upper) const
8304{
8305  return isl::checked::map(*this).upper_bound(upper);
8306}
8307
8308isl::checked::set basic_map::wrap() const
8309{
8310  return isl::checked::map(*this).wrap();
8311}
8312
8313isl::checked::map basic_map::zip() const
8314{
8315  return isl::checked::map(*this).zip();
8316}
8317
8318inline std::ostream &operator<<(std::ostream &os, const basic_map &obj)
8319{
8320  char *str = isl_basic_map_to_str(obj.get());
8321  if (!str) {
8322    os.setstate(std::ios_base::badbit);
8323    return os;
8324  }
8325  os << str;
8326  free(str);
8327  return os;
8328}
8329
8330// implementations for isl::basic_set
8331basic_set manage(__isl_take isl_basic_set *ptr) {
8332  return basic_set(ptr);
8333}
8334basic_set manage_copy(__isl_keep isl_basic_set *ptr) {
8335  ptr = isl_basic_set_copy(ptr);
8336  return basic_set(ptr);
8337}
8338
8339basic_set::basic_set(__isl_take isl_basic_set *ptr)
8340    : ptr(ptr) {}
8341
8342basic_set::basic_set()
8343    : ptr(nullptr) {}
8344
8345basic_set::basic_set(const basic_set &obj)
8346    : ptr(nullptr)
8347{
8348  ptr = obj.copy();
8349}
8350
8351basic_set::basic_set(isl::checked::point pnt)
8352{
8353  auto res = isl_basic_set_from_point(pnt.release());
8354  ptr = res;
8355}
8356
8357basic_set::basic_set(isl::checked::ctx ctx, const std::string &str)
8358{
8359  auto res = isl_basic_set_read_from_str(ctx.release(), str.c_str());
8360  ptr = res;
8361}
8362
8363basic_set &basic_set::operator=(basic_set obj) {
8364  std::swap(this->ptr, obj.ptr);
8365  return *this;
8366}
8367
8368basic_set::~basic_set() {
8369  if (ptr)
8370    isl_basic_set_free(ptr);
8371}
8372
8373__isl_give isl_basic_set *basic_set::copy() const & {
8374  return isl_basic_set_copy(ptr);
8375}
8376
8377__isl_keep isl_basic_set *basic_set::get() const {
8378  return ptr;
8379}
8380
8381__isl_give isl_basic_set *basic_set::release() {
8382  isl_basic_set *tmp = ptr;
8383  ptr = nullptr;
8384  return tmp;
8385}
8386
8387bool basic_set::is_null() const {
8388  return ptr == nullptr;
8389}
8390
8391isl::checked::ctx basic_set::ctx() const {
8392  return isl::checked::ctx(isl_basic_set_get_ctx(ptr));
8393}
8394
8395isl::checked::basic_set basic_set::affine_hull() const
8396{
8397  auto res = isl_basic_set_affine_hull(copy());
8398  return manage(res);
8399}
8400
8401isl::checked::basic_set basic_set::apply(isl::checked::basic_map bmap) const
8402{
8403  auto res = isl_basic_set_apply(copy(), bmap.release());
8404  return manage(res);
8405}
8406
8407isl::checked::set basic_set::apply(const isl::checked::map &map) const
8408{
8409  return isl::checked::set(*this).apply(map);
8410}
8411
8412isl::checked::union_set basic_set::apply(const isl::checked::union_map &umap) const
8413{
8414  return isl::checked::set(*this).apply(umap);
8415}
8416
8417isl::checked::pw_multi_aff basic_set::as_pw_multi_aff() const
8418{
8419  return isl::checked::set(*this).as_pw_multi_aff();
8420}
8421
8422isl::checked::set basic_set::as_set() const
8423{
8424  return isl::checked::set(*this).as_set();
8425}
8426
8427isl::checked::set basic_set::bind(const isl::checked::multi_id &tuple) const
8428{
8429  return isl::checked::set(*this).bind(tuple);
8430}
8431
8432isl::checked::set basic_set::coalesce() const
8433{
8434  return isl::checked::set(*this).coalesce();
8435}
8436
8437isl::checked::set basic_set::complement() const
8438{
8439  return isl::checked::set(*this).complement();
8440}
8441
8442isl::checked::union_set basic_set::compute_divs() const
8443{
8444  return isl::checked::set(*this).compute_divs();
8445}
8446
8447isl::checked::basic_set basic_set::detect_equalities() const
8448{
8449  auto res = isl_basic_set_detect_equalities(copy());
8450  return manage(res);
8451}
8452
8453isl::checked::val basic_set::dim_max_val(int pos) const
8454{
8455  auto res = isl_basic_set_dim_max_val(copy(), pos);
8456  return manage(res);
8457}
8458
8459isl::checked::val basic_set::dim_min_val(int pos) const
8460{
8461  return isl::checked::set(*this).dim_min_val(pos);
8462}
8463
8464isl::checked::set basic_set::drop_unused_params() const
8465{
8466  return isl::checked::set(*this).drop_unused_params();
8467}
8468
8469boolean basic_set::every_set(const std::function<boolean(isl::checked::set)> &test) const
8470{
8471  return isl::checked::set(*this).every_set(test);
8472}
8473
8474isl::checked::set basic_set::extract_set(const isl::checked::space &space) const
8475{
8476  return isl::checked::set(*this).extract_set(space);
8477}
8478
8479isl::checked::basic_set basic_set::flatten() const
8480{
8481  auto res = isl_basic_set_flatten(copy());
8482  return manage(res);
8483}
8484
8485stat basic_set::foreach_basic_set(const std::function<stat(isl::checked::basic_set)> &fn) const
8486{
8487  return isl::checked::set(*this).foreach_basic_set(fn);
8488}
8489
8490stat basic_set::foreach_point(const std::function<stat(isl::checked::point)> &fn) const
8491{
8492  return isl::checked::set(*this).foreach_point(fn);
8493}
8494
8495stat basic_set::foreach_set(const std::function<stat(isl::checked::set)> &fn) const
8496{
8497  return isl::checked::set(*this).foreach_set(fn);
8498}
8499
8500isl::checked::basic_set basic_set::gist(isl::checked::basic_set context) const
8501{
8502  auto res = isl_basic_set_gist(copy(), context.release());
8503  return manage(res);
8504}
8505
8506isl::checked::set basic_set::gist(const isl::checked::set &context) const
8507{
8508  return isl::checked::set(*this).gist(context);
8509}
8510
8511isl::checked::union_set basic_set::gist(const isl::checked::union_set &context) const
8512{
8513  return isl::checked::set(*this).gist(context);
8514}
8515
8516isl::checked::basic_set basic_set::gist(const isl::checked::point &context) const
8517{
8518  return this->gist(isl::checked::basic_set(context));
8519}
8520
8521isl::checked::set basic_set::gist_params(const isl::checked::set &context) const
8522{
8523  return isl::checked::set(*this).gist_params(context);
8524}
8525
8526isl::checked::map basic_set::identity() const
8527{
8528  return isl::checked::set(*this).identity();
8529}
8530
8531isl::checked::pw_aff basic_set::indicator_function() const
8532{
8533  return isl::checked::set(*this).indicator_function();
8534}
8535
8536isl::checked::map basic_set::insert_domain(const isl::checked::space &domain) const
8537{
8538  return isl::checked::set(*this).insert_domain(domain);
8539}
8540
8541isl::checked::basic_set basic_set::intersect(isl::checked::basic_set bset2) const
8542{
8543  auto res = isl_basic_set_intersect(copy(), bset2.release());
8544  return manage(res);
8545}
8546
8547isl::checked::set basic_set::intersect(const isl::checked::set &set2) const
8548{
8549  return isl::checked::set(*this).intersect(set2);
8550}
8551
8552isl::checked::union_set basic_set::intersect(const isl::checked::union_set &uset2) const
8553{
8554  return isl::checked::set(*this).intersect(uset2);
8555}
8556
8557isl::checked::basic_set basic_set::intersect(const isl::checked::point &bset2) const
8558{
8559  return this->intersect(isl::checked::basic_set(bset2));
8560}
8561
8562isl::checked::basic_set basic_set::intersect_params(isl::checked::basic_set bset2) const
8563{
8564  auto res = isl_basic_set_intersect_params(copy(), bset2.release());
8565  return manage(res);
8566}
8567
8568isl::checked::set basic_set::intersect_params(const isl::checked::set &params) const
8569{
8570  return isl::checked::set(*this).intersect_params(params);
8571}
8572
8573isl::checked::basic_set basic_set::intersect_params(const isl::checked::point &bset2) const
8574{
8575  return this->intersect_params(isl::checked::basic_set(bset2));
8576}
8577
8578boolean basic_set::involves_locals() const
8579{
8580  return isl::checked::set(*this).involves_locals();
8581}
8582
8583boolean basic_set::is_disjoint(const isl::checked::set &set2) const
8584{
8585  return isl::checked::set(*this).is_disjoint(set2);
8586}
8587
8588boolean basic_set::is_disjoint(const isl::checked::union_set &uset2) const
8589{
8590  return isl::checked::set(*this).is_disjoint(uset2);
8591}
8592
8593boolean basic_set::is_empty() const
8594{
8595  auto res = isl_basic_set_is_empty(get());
8596  return manage(res);
8597}
8598
8599boolean basic_set::is_equal(const isl::checked::basic_set &bset2) const
8600{
8601  auto res = isl_basic_set_is_equal(get(), bset2.get());
8602  return manage(res);
8603}
8604
8605boolean basic_set::is_equal(const isl::checked::set &set2) const
8606{
8607  return isl::checked::set(*this).is_equal(set2);
8608}
8609
8610boolean basic_set::is_equal(const isl::checked::union_set &uset2) const
8611{
8612  return isl::checked::set(*this).is_equal(uset2);
8613}
8614
8615boolean basic_set::is_equal(const isl::checked::point &bset2) const
8616{
8617  return this->is_equal(isl::checked::basic_set(bset2));
8618}
8619
8620boolean basic_set::is_singleton() const
8621{
8622  return isl::checked::set(*this).is_singleton();
8623}
8624
8625boolean basic_set::is_strict_subset(const isl::checked::set &set2) const
8626{
8627  return isl::checked::set(*this).is_strict_subset(set2);
8628}
8629
8630boolean basic_set::is_strict_subset(const isl::checked::union_set &uset2) const
8631{
8632  return isl::checked::set(*this).is_strict_subset(uset2);
8633}
8634
8635boolean basic_set::is_subset(const isl::checked::basic_set &bset2) const
8636{
8637  auto res = isl_basic_set_is_subset(get(), bset2.get());
8638  return manage(res);
8639}
8640
8641boolean basic_set::is_subset(const isl::checked::set &set2) const
8642{
8643  return isl::checked::set(*this).is_subset(set2);
8644}
8645
8646boolean basic_set::is_subset(const isl::checked::union_set &uset2) const
8647{
8648  return isl::checked::set(*this).is_subset(uset2);
8649}
8650
8651boolean basic_set::is_subset(const isl::checked::point &bset2) const
8652{
8653  return this->is_subset(isl::checked::basic_set(bset2));
8654}
8655
8656boolean basic_set::is_wrapping() const
8657{
8658  auto res = isl_basic_set_is_wrapping(get());
8659  return manage(res);
8660}
8661
8662boolean basic_set::isa_set() const
8663{
8664  return isl::checked::set(*this).isa_set();
8665}
8666
8667isl::checked::fixed_box basic_set::lattice_tile() const
8668{
8669  return isl::checked::set(*this).lattice_tile();
8670}
8671
8672isl::checked::set basic_set::lexmax() const
8673{
8674  auto res = isl_basic_set_lexmax(copy());
8675  return manage(res);
8676}
8677
8678isl::checked::pw_multi_aff basic_set::lexmax_pw_multi_aff() const
8679{
8680  return isl::checked::set(*this).lexmax_pw_multi_aff();
8681}
8682
8683isl::checked::set basic_set::lexmin() const
8684{
8685  auto res = isl_basic_set_lexmin(copy());
8686  return manage(res);
8687}
8688
8689isl::checked::pw_multi_aff basic_set::lexmin_pw_multi_aff() const
8690{
8691  return isl::checked::set(*this).lexmin_pw_multi_aff();
8692}
8693
8694isl::checked::set basic_set::lower_bound(const isl::checked::multi_pw_aff &lower) const
8695{
8696  return isl::checked::set(*this).lower_bound(lower);
8697}
8698
8699isl::checked::set basic_set::lower_bound(const isl::checked::multi_val &lower) const
8700{
8701  return isl::checked::set(*this).lower_bound(lower);
8702}
8703
8704isl::checked::multi_pw_aff basic_set::max_multi_pw_aff() const
8705{
8706  return isl::checked::set(*this).max_multi_pw_aff();
8707}
8708
8709isl::checked::val basic_set::max_val(const isl::checked::aff &obj) const
8710{
8711  return isl::checked::set(*this).max_val(obj);
8712}
8713
8714isl::checked::multi_pw_aff basic_set::min_multi_pw_aff() const
8715{
8716  return isl::checked::set(*this).min_multi_pw_aff();
8717}
8718
8719isl::checked::val basic_set::min_val(const isl::checked::aff &obj) const
8720{
8721  return isl::checked::set(*this).min_val(obj);
8722}
8723
8724class size basic_set::n_basic_set() const
8725{
8726  return isl::checked::set(*this).n_basic_set();
8727}
8728
8729isl::checked::pw_aff basic_set::param_pw_aff_on_domain(const isl::checked::id &id) const
8730{
8731  return isl::checked::set(*this).param_pw_aff_on_domain(id);
8732}
8733
8734isl::checked::pw_aff basic_set::param_pw_aff_on_domain(const std::string &id) const
8735{
8736  return this->param_pw_aff_on_domain(isl::checked::id(ctx(), id));
8737}
8738
8739isl::checked::basic_set basic_set::params() const
8740{
8741  auto res = isl_basic_set_params(copy());
8742  return manage(res);
8743}
8744
8745isl::checked::multi_val basic_set::plain_multi_val_if_fixed() const
8746{
8747  return isl::checked::set(*this).plain_multi_val_if_fixed();
8748}
8749
8750isl::checked::basic_set basic_set::polyhedral_hull() const
8751{
8752  return isl::checked::set(*this).polyhedral_hull();
8753}
8754
8755isl::checked::set basic_set::preimage(const isl::checked::multi_aff &ma) const
8756{
8757  return isl::checked::set(*this).preimage(ma);
8758}
8759
8760isl::checked::set basic_set::preimage(const isl::checked::multi_pw_aff &mpa) const
8761{
8762  return isl::checked::set(*this).preimage(mpa);
8763}
8764
8765isl::checked::set basic_set::preimage(const isl::checked::pw_multi_aff &pma) const
8766{
8767  return isl::checked::set(*this).preimage(pma);
8768}
8769
8770isl::checked::union_set basic_set::preimage(const isl::checked::union_pw_multi_aff &upma) const
8771{
8772  return isl::checked::set(*this).preimage(upma);
8773}
8774
8775isl::checked::set basic_set::product(const isl::checked::set &set2) const
8776{
8777  return isl::checked::set(*this).product(set2);
8778}
8779
8780isl::checked::set basic_set::project_out_all_params() const
8781{
8782  return isl::checked::set(*this).project_out_all_params();
8783}
8784
8785isl::checked::set basic_set::project_out_param(const isl::checked::id &id) const
8786{
8787  return isl::checked::set(*this).project_out_param(id);
8788}
8789
8790isl::checked::set basic_set::project_out_param(const std::string &id) const
8791{
8792  return this->project_out_param(isl::checked::id(ctx(), id));
8793}
8794
8795isl::checked::set basic_set::project_out_param(const isl::checked::id_list &list) const
8796{
8797  return isl::checked::set(*this).project_out_param(list);
8798}
8799
8800isl::checked::pw_aff basic_set::pw_aff_on_domain(const isl::checked::val &v) const
8801{
8802  return isl::checked::set(*this).pw_aff_on_domain(v);
8803}
8804
8805isl::checked::pw_aff basic_set::pw_aff_on_domain(long v) const
8806{
8807  return this->pw_aff_on_domain(isl::checked::val(ctx(), v));
8808}
8809
8810isl::checked::pw_multi_aff basic_set::pw_multi_aff_on_domain(const isl::checked::multi_val &mv) const
8811{
8812  return isl::checked::set(*this).pw_multi_aff_on_domain(mv);
8813}
8814
8815isl::checked::basic_set basic_set::sample() const
8816{
8817  auto res = isl_basic_set_sample(copy());
8818  return manage(res);
8819}
8820
8821isl::checked::point basic_set::sample_point() const
8822{
8823  auto res = isl_basic_set_sample_point(copy());
8824  return manage(res);
8825}
8826
8827isl::checked::set_list basic_set::set_list() const
8828{
8829  return isl::checked::set(*this).set_list();
8830}
8831
8832isl::checked::fixed_box basic_set::simple_fixed_box_hull() const
8833{
8834  return isl::checked::set(*this).simple_fixed_box_hull();
8835}
8836
8837isl::checked::space basic_set::space() const
8838{
8839  return isl::checked::set(*this).space();
8840}
8841
8842isl::checked::val basic_set::stride(int pos) const
8843{
8844  return isl::checked::set(*this).stride(pos);
8845}
8846
8847isl::checked::set basic_set::subtract(const isl::checked::set &set2) const
8848{
8849  return isl::checked::set(*this).subtract(set2);
8850}
8851
8852isl::checked::union_set basic_set::subtract(const isl::checked::union_set &uset2) const
8853{
8854  return isl::checked::set(*this).subtract(uset2);
8855}
8856
8857isl::checked::set_list basic_set::to_list() const
8858{
8859  return isl::checked::set(*this).to_list();
8860}
8861
8862isl::checked::set basic_set::to_set() const
8863{
8864  auto res = isl_basic_set_to_set(copy());
8865  return manage(res);
8866}
8867
8868isl::checked::union_set basic_set::to_union_set() const
8869{
8870  return isl::checked::set(*this).to_union_set();
8871}
8872
8873isl::checked::map basic_set::translation() const
8874{
8875  return isl::checked::set(*this).translation();
8876}
8877
8878class size basic_set::tuple_dim() const
8879{
8880  return isl::checked::set(*this).tuple_dim();
8881}
8882
8883isl::checked::set basic_set::unbind_params(const isl::checked::multi_id &tuple) const
8884{
8885  return isl::checked::set(*this).unbind_params(tuple);
8886}
8887
8888isl::checked::map basic_set::unbind_params_insert_domain(const isl::checked::multi_id &domain) const
8889{
8890  return isl::checked::set(*this).unbind_params_insert_domain(domain);
8891}
8892
8893isl::checked::set basic_set::unite(isl::checked::basic_set bset2) const
8894{
8895  auto res = isl_basic_set_union(copy(), bset2.release());
8896  return manage(res);
8897}
8898
8899isl::checked::set basic_set::unite(const isl::checked::set &set2) const
8900{
8901  return isl::checked::set(*this).unite(set2);
8902}
8903
8904isl::checked::union_set basic_set::unite(const isl::checked::union_set &uset2) const
8905{
8906  return isl::checked::set(*this).unite(uset2);
8907}
8908
8909isl::checked::set basic_set::unite(const isl::checked::point &bset2) const
8910{
8911  return this->unite(isl::checked::basic_set(bset2));
8912}
8913
8914isl::checked::basic_set basic_set::unshifted_simple_hull() const
8915{
8916  return isl::checked::set(*this).unshifted_simple_hull();
8917}
8918
8919isl::checked::map basic_set::unwrap() const
8920{
8921  return isl::checked::set(*this).unwrap();
8922}
8923
8924isl::checked::set basic_set::upper_bound(const isl::checked::multi_pw_aff &upper) const
8925{
8926  return isl::checked::set(*this).upper_bound(upper);
8927}
8928
8929isl::checked::set basic_set::upper_bound(const isl::checked::multi_val &upper) const
8930{
8931  return isl::checked::set(*this).upper_bound(upper);
8932}
8933
8934isl::checked::set basic_set::wrapped_reverse() const
8935{
8936  return isl::checked::set(*this).wrapped_reverse();
8937}
8938
8939inline std::ostream &operator<<(std::ostream &os, const basic_set &obj)
8940{
8941  char *str = isl_basic_set_to_str(obj.get());
8942  if (!str) {
8943    os.setstate(std::ios_base::badbit);
8944    return os;
8945  }
8946  os << str;
8947  free(str);
8948  return os;
8949}
8950
8951// implementations for isl::fixed_box
8952fixed_box manage(__isl_take isl_fixed_box *ptr) {
8953  return fixed_box(ptr);
8954}
8955fixed_box manage_copy(__isl_keep isl_fixed_box *ptr) {
8956  ptr = isl_fixed_box_copy(ptr);
8957  return fixed_box(ptr);
8958}
8959
8960fixed_box::fixed_box(__isl_take isl_fixed_box *ptr)
8961    : ptr(ptr) {}
8962
8963fixed_box::fixed_box()
8964    : ptr(nullptr) {}
8965
8966fixed_box::fixed_box(const fixed_box &obj)
8967    : ptr(nullptr)
8968{
8969  ptr = obj.copy();
8970}
8971
8972fixed_box::fixed_box(isl::checked::ctx ctx, const std::string &str)
8973{
8974  auto res = isl_fixed_box_read_from_str(ctx.release(), str.c_str());
8975  ptr = res;
8976}
8977
8978fixed_box &fixed_box::operator=(fixed_box obj) {
8979  std::swap(this->ptr, obj.ptr);
8980  return *this;
8981}
8982
8983fixed_box::~fixed_box() {
8984  if (ptr)
8985    isl_fixed_box_free(ptr);
8986}
8987
8988__isl_give isl_fixed_box *fixed_box::copy() const & {
8989  return isl_fixed_box_copy(ptr);
8990}
8991
8992__isl_keep isl_fixed_box *fixed_box::get() const {
8993  return ptr;
8994}
8995
8996__isl_give isl_fixed_box *fixed_box::release() {
8997  isl_fixed_box *tmp = ptr;
8998  ptr = nullptr;
8999  return tmp;
9000}
9001
9002bool fixed_box::is_null() const {
9003  return ptr == nullptr;
9004}
9005
9006isl::checked::ctx fixed_box::ctx() const {
9007  return isl::checked::ctx(isl_fixed_box_get_ctx(ptr));
9008}
9009
9010boolean fixed_box::is_valid() const
9011{
9012  auto res = isl_fixed_box_is_valid(get());
9013  return manage(res);
9014}
9015
9016isl::checked::multi_aff fixed_box::offset() const
9017{
9018  auto res = isl_fixed_box_get_offset(get());
9019  return manage(res);
9020}
9021
9022isl::checked::multi_aff fixed_box::get_offset() const
9023{
9024  return offset();
9025}
9026
9027isl::checked::multi_val fixed_box::size() const
9028{
9029  auto res = isl_fixed_box_get_size(get());
9030  return manage(res);
9031}
9032
9033isl::checked::multi_val fixed_box::get_size() const
9034{
9035  return size();
9036}
9037
9038isl::checked::space fixed_box::space() const
9039{
9040  auto res = isl_fixed_box_get_space(get());
9041  return manage(res);
9042}
9043
9044isl::checked::space fixed_box::get_space() const
9045{
9046  return space();
9047}
9048
9049inline std::ostream &operator<<(std::ostream &os, const fixed_box &obj)
9050{
9051  char *str = isl_fixed_box_to_str(obj.get());
9052  if (!str) {
9053    os.setstate(std::ios_base::badbit);
9054    return os;
9055  }
9056  os << str;
9057  free(str);
9058  return os;
9059}
9060
9061// implementations for isl::id
9062id manage(__isl_take isl_id *ptr) {
9063  return id(ptr);
9064}
9065id manage_copy(__isl_keep isl_id *ptr) {
9066  ptr = isl_id_copy(ptr);
9067  return id(ptr);
9068}
9069
9070id::id(__isl_take isl_id *ptr)
9071    : ptr(ptr) {}
9072
9073id::id()
9074    : ptr(nullptr) {}
9075
9076id::id(const id &obj)
9077    : ptr(nullptr)
9078{
9079  ptr = obj.copy();
9080}
9081
9082id::id(isl::checked::ctx ctx, const std::string &str)
9083{
9084  auto res = isl_id_read_from_str(ctx.release(), str.c_str());
9085  ptr = res;
9086}
9087
9088id &id::operator=(id obj) {
9089  std::swap(this->ptr, obj.ptr);
9090  return *this;
9091}
9092
9093id::~id() {
9094  if (ptr)
9095    isl_id_free(ptr);
9096}
9097
9098__isl_give isl_id *id::copy() const & {
9099  return isl_id_copy(ptr);
9100}
9101
9102__isl_keep isl_id *id::get() const {
9103  return ptr;
9104}
9105
9106__isl_give isl_id *id::release() {
9107  isl_id *tmp = ptr;
9108  ptr = nullptr;
9109  return tmp;
9110}
9111
9112bool id::is_null() const {
9113  return ptr == nullptr;
9114}
9115
9116isl::checked::ctx id::ctx() const {
9117  return isl::checked::ctx(isl_id_get_ctx(ptr));
9118}
9119
9120std::string id::name() const
9121{
9122  auto res = isl_id_get_name(get());
9123  std::string tmp(res);
9124  return tmp;
9125}
9126
9127std::string id::get_name() const
9128{
9129  return name();
9130}
9131
9132isl::checked::id_list id::to_list() const
9133{
9134  auto res = isl_id_to_list(copy());
9135  return manage(res);
9136}
9137
9138#if __cplusplus >= 201703L
9139id::id(isl::checked::ctx ctx, const std::string &str, const std::any &any)
9140{
9141  std::any *p = new std::any(any);
9142  auto res = isl_id_alloc(ctx.get(), str.c_str(), p);
9143  res = isl_id_set_free_user(res, &ctx::free_user);
9144  if (!res) {
9145    delete p;
9146  }
9147  ptr = res;
9148}
9149
9150template <class T>
9151std::optional<T> id::try_user() const
9152{
9153  std::any *p = (std::any *) isl_id_get_user(ptr);
9154  if (!p)
9155    return std::nullopt;
9156  if (isl_id_get_free_user(ptr) != &ctx::free_user)
9157    return std::nullopt;
9158  T *res = std::any_cast<T>(p);
9159  if (!res)
9160    return std::nullopt;
9161  return *res;
9162}
9163
9164template <class T>
9165T id::user() const
9166{
9167  std::any *p = (std::any *) isl_id_get_user(ptr);
9168  if (!p)
9169    isl_die(ctx().get(), isl_error_invalid, "no user pointer", return T());
9170  if (isl_id_get_free_user(ptr) != &ctx::free_user)
9171    isl_die(ctx().get(), isl_error_invalid, "user pointer not attached by C++ interface", return T());
9172  T *res = std::any_cast<T>(p);
9173  if (!res)
9174    isl_die(ctx().get(), isl_error_invalid, "user pointer not of given type", return T());
9175  return *res;
9176}
9177#endif
9178
9179inline std::ostream &operator<<(std::ostream &os, const id &obj)
9180{
9181  char *str = isl_id_to_str(obj.get());
9182  if (!str) {
9183    os.setstate(std::ios_base::badbit);
9184    return os;
9185  }
9186  os << str;
9187  free(str);
9188  return os;
9189}
9190
9191// implementations for isl::id_list
9192id_list manage(__isl_take isl_id_list *ptr) {
9193  return id_list(ptr);
9194}
9195id_list manage_copy(__isl_keep isl_id_list *ptr) {
9196  ptr = isl_id_list_copy(ptr);
9197  return id_list(ptr);
9198}
9199
9200id_list::id_list(__isl_take isl_id_list *ptr)
9201    : ptr(ptr) {}
9202
9203id_list::id_list()
9204    : ptr(nullptr) {}
9205
9206id_list::id_list(const id_list &obj)
9207    : ptr(nullptr)
9208{
9209  ptr = obj.copy();
9210}
9211
9212id_list::id_list(isl::checked::ctx ctx, int n)
9213{
9214  auto res = isl_id_list_alloc(ctx.release(), n);
9215  ptr = res;
9216}
9217
9218id_list::id_list(isl::checked::id el)
9219{
9220  auto res = isl_id_list_from_id(el.release());
9221  ptr = res;
9222}
9223
9224id_list::id_list(isl::checked::ctx ctx, const std::string &str)
9225{
9226  auto res = isl_id_list_read_from_str(ctx.release(), str.c_str());
9227  ptr = res;
9228}
9229
9230id_list &id_list::operator=(id_list obj) {
9231  std::swap(this->ptr, obj.ptr);
9232  return *this;
9233}
9234
9235id_list::~id_list() {
9236  if (ptr)
9237    isl_id_list_free(ptr);
9238}
9239
9240__isl_give isl_id_list *id_list::copy() const & {
9241  return isl_id_list_copy(ptr);
9242}
9243
9244__isl_keep isl_id_list *id_list::get() const {
9245  return ptr;
9246}
9247
9248__isl_give isl_id_list *id_list::release() {
9249  isl_id_list *tmp = ptr;
9250  ptr = nullptr;
9251  return tmp;
9252}
9253
9254bool id_list::is_null() const {
9255  return ptr == nullptr;
9256}
9257
9258isl::checked::ctx id_list::ctx() const {
9259  return isl::checked::ctx(isl_id_list_get_ctx(ptr));
9260}
9261
9262isl::checked::id_list id_list::add(isl::checked::id el) const
9263{
9264  auto res = isl_id_list_add(copy(), el.release());
9265  return manage(res);
9266}
9267
9268isl::checked::id_list id_list::add(const std::string &el) const
9269{
9270  return this->add(isl::checked::id(ctx(), el));
9271}
9272
9273isl::checked::id id_list::at(int index) const
9274{
9275  auto res = isl_id_list_get_at(get(), index);
9276  return manage(res);
9277}
9278
9279isl::checked::id id_list::get_at(int index) const
9280{
9281  return at(index);
9282}
9283
9284isl::checked::id_list id_list::clear() const
9285{
9286  auto res = isl_id_list_clear(copy());
9287  return manage(res);
9288}
9289
9290isl::checked::id_list id_list::concat(isl::checked::id_list list2) const
9291{
9292  auto res = isl_id_list_concat(copy(), list2.release());
9293  return manage(res);
9294}
9295
9296isl::checked::id_list id_list::drop(unsigned int first, unsigned int n) const
9297{
9298  auto res = isl_id_list_drop(copy(), first, n);
9299  return manage(res);
9300}
9301
9302stat id_list::foreach(const std::function<stat(isl::checked::id)> &fn) const
9303{
9304  struct fn_data {
9305    std::function<stat(isl::checked::id)> func;
9306  } fn_data = { fn };
9307  auto fn_lambda = [](isl_id *arg_0, void *arg_1) -> isl_stat {
9308    auto *data = static_cast<struct fn_data *>(arg_1);
9309    auto ret = (data->func)(manage(arg_0));
9310    return ret.release();
9311  };
9312  auto res = isl_id_list_foreach(get(), fn_lambda, &fn_data);
9313  return manage(res);
9314}
9315
9316stat id_list::foreach_scc(const std::function<boolean(isl::checked::id, isl::checked::id)> &follows, const std::function<stat(isl::checked::id_list)> &fn) const
9317{
9318  struct follows_data {
9319    std::function<boolean(isl::checked::id, isl::checked::id)> func;
9320  } follows_data = { follows };
9321  auto follows_lambda = [](isl_id *arg_0, isl_id *arg_1, void *arg_2) -> isl_bool {
9322    auto *data = static_cast<struct follows_data *>(arg_2);
9323    auto ret = (data->func)(manage_copy(arg_0), manage_copy(arg_1));
9324    return ret.release();
9325  };
9326  struct fn_data {
9327    std::function<stat(isl::checked::id_list)> func;
9328  } fn_data = { fn };
9329  auto fn_lambda = [](isl_id_list *arg_0, void *arg_1) -> isl_stat {
9330    auto *data = static_cast<struct fn_data *>(arg_1);
9331    auto ret = (data->func)(manage(arg_0));
9332    return ret.release();
9333  };
9334  auto res = isl_id_list_foreach_scc(get(), follows_lambda, &follows_data, fn_lambda, &fn_data);
9335  return manage(res);
9336}
9337
9338isl::checked::id_list id_list::insert(unsigned int pos, isl::checked::id el) const
9339{
9340  auto res = isl_id_list_insert(copy(), pos, el.release());
9341  return manage(res);
9342}
9343
9344isl::checked::id_list id_list::insert(unsigned int pos, const std::string &el) const
9345{
9346  return this->insert(pos, isl::checked::id(ctx(), el));
9347}
9348
9349isl::checked::id_list id_list::set_at(int index, isl::checked::id el) const
9350{
9351  auto res = isl_id_list_set_at(copy(), index, el.release());
9352  return manage(res);
9353}
9354
9355isl::checked::id_list id_list::set_at(int index, const std::string &el) const
9356{
9357  return this->set_at(index, isl::checked::id(ctx(), el));
9358}
9359
9360class size id_list::size() const
9361{
9362  auto res = isl_id_list_size(get());
9363  return manage(res);
9364}
9365
9366inline std::ostream &operator<<(std::ostream &os, const id_list &obj)
9367{
9368  char *str = isl_id_list_to_str(obj.get());
9369  if (!str) {
9370    os.setstate(std::ios_base::badbit);
9371    return os;
9372  }
9373  os << str;
9374  free(str);
9375  return os;
9376}
9377
9378// implementations for isl::id_to_ast_expr
9379id_to_ast_expr manage(__isl_take isl_id_to_ast_expr *ptr) {
9380  return id_to_ast_expr(ptr);
9381}
9382id_to_ast_expr manage_copy(__isl_keep isl_id_to_ast_expr *ptr) {
9383  ptr = isl_id_to_ast_expr_copy(ptr);
9384  return id_to_ast_expr(ptr);
9385}
9386
9387id_to_ast_expr::id_to_ast_expr(__isl_take isl_id_to_ast_expr *ptr)
9388    : ptr(ptr) {}
9389
9390id_to_ast_expr::id_to_ast_expr()
9391    : ptr(nullptr) {}
9392
9393id_to_ast_expr::id_to_ast_expr(const id_to_ast_expr &obj)
9394    : ptr(nullptr)
9395{
9396  ptr = obj.copy();
9397}
9398
9399id_to_ast_expr::id_to_ast_expr(isl::checked::ctx ctx, int min_size)
9400{
9401  auto res = isl_id_to_ast_expr_alloc(ctx.release(), min_size);
9402  ptr = res;
9403}
9404
9405id_to_ast_expr::id_to_ast_expr(isl::checked::ctx ctx, const std::string &str)
9406{
9407  auto res = isl_id_to_ast_expr_read_from_str(ctx.release(), str.c_str());
9408  ptr = res;
9409}
9410
9411id_to_ast_expr &id_to_ast_expr::operator=(id_to_ast_expr obj) {
9412  std::swap(this->ptr, obj.ptr);
9413  return *this;
9414}
9415
9416id_to_ast_expr::~id_to_ast_expr() {
9417  if (ptr)
9418    isl_id_to_ast_expr_free(ptr);
9419}
9420
9421__isl_give isl_id_to_ast_expr *id_to_ast_expr::copy() const & {
9422  return isl_id_to_ast_expr_copy(ptr);
9423}
9424
9425__isl_keep isl_id_to_ast_expr *id_to_ast_expr::get() const {
9426  return ptr;
9427}
9428
9429__isl_give isl_id_to_ast_expr *id_to_ast_expr::release() {
9430  isl_id_to_ast_expr *tmp = ptr;
9431  ptr = nullptr;
9432  return tmp;
9433}
9434
9435bool id_to_ast_expr::is_null() const {
9436  return ptr == nullptr;
9437}
9438
9439isl::checked::ctx id_to_ast_expr::ctx() const {
9440  return isl::checked::ctx(isl_id_to_ast_expr_get_ctx(ptr));
9441}
9442
9443boolean id_to_ast_expr::is_equal(const isl::checked::id_to_ast_expr &hmap2) const
9444{
9445  auto res = isl_id_to_ast_expr_is_equal(get(), hmap2.get());
9446  return manage(res);
9447}
9448
9449isl::checked::id_to_ast_expr id_to_ast_expr::set(isl::checked::id key, isl::checked::ast_expr val) const
9450{
9451  auto res = isl_id_to_ast_expr_set(copy(), key.release(), val.release());
9452  return manage(res);
9453}
9454
9455isl::checked::id_to_ast_expr id_to_ast_expr::set(const std::string &key, const isl::checked::ast_expr &val) const
9456{
9457  return this->set(isl::checked::id(ctx(), key), val);
9458}
9459
9460inline std::ostream &operator<<(std::ostream &os, const id_to_ast_expr &obj)
9461{
9462  char *str = isl_id_to_ast_expr_to_str(obj.get());
9463  if (!str) {
9464    os.setstate(std::ios_base::badbit);
9465    return os;
9466  }
9467  os << str;
9468  free(str);
9469  return os;
9470}
9471
9472// implementations for isl::id_to_id
9473id_to_id manage(__isl_take isl_id_to_id *ptr) {
9474  return id_to_id(ptr);
9475}
9476id_to_id manage_copy(__isl_keep isl_id_to_id *ptr) {
9477  ptr = isl_id_to_id_copy(ptr);
9478  return id_to_id(ptr);
9479}
9480
9481id_to_id::id_to_id(__isl_take isl_id_to_id *ptr)
9482    : ptr(ptr) {}
9483
9484id_to_id::id_to_id()
9485    : ptr(nullptr) {}
9486
9487id_to_id::id_to_id(const id_to_id &obj)
9488    : ptr(nullptr)
9489{
9490  ptr = obj.copy();
9491}
9492
9493id_to_id::id_to_id(isl::checked::ctx ctx, int min_size)
9494{
9495  auto res = isl_id_to_id_alloc(ctx.release(), min_size);
9496  ptr = res;
9497}
9498
9499id_to_id::id_to_id(isl::checked::ctx ctx, const std::string &str)
9500{
9501  auto res = isl_id_to_id_read_from_str(ctx.release(), str.c_str());
9502  ptr = res;
9503}
9504
9505id_to_id &id_to_id::operator=(id_to_id obj) {
9506  std::swap(this->ptr, obj.ptr);
9507  return *this;
9508}
9509
9510id_to_id::~id_to_id() {
9511  if (ptr)
9512    isl_id_to_id_free(ptr);
9513}
9514
9515__isl_give isl_id_to_id *id_to_id::copy() const & {
9516  return isl_id_to_id_copy(ptr);
9517}
9518
9519__isl_keep isl_id_to_id *id_to_id::get() const {
9520  return ptr;
9521}
9522
9523__isl_give isl_id_to_id *id_to_id::release() {
9524  isl_id_to_id *tmp = ptr;
9525  ptr = nullptr;
9526  return tmp;
9527}
9528
9529bool id_to_id::is_null() const {
9530  return ptr == nullptr;
9531}
9532
9533isl::checked::ctx id_to_id::ctx() const {
9534  return isl::checked::ctx(isl_id_to_id_get_ctx(ptr));
9535}
9536
9537boolean id_to_id::is_equal(const isl::checked::id_to_id &hmap2) const
9538{
9539  auto res = isl_id_to_id_is_equal(get(), hmap2.get());
9540  return manage(res);
9541}
9542
9543isl::checked::id_to_id id_to_id::set(isl::checked::id key, isl::checked::id val) const
9544{
9545  auto res = isl_id_to_id_set(copy(), key.release(), val.release());
9546  return manage(res);
9547}
9548
9549isl::checked::id_to_id id_to_id::set(const isl::checked::id &key, const std::string &val) const
9550{
9551  return this->set(key, isl::checked::id(ctx(), val));
9552}
9553
9554isl::checked::id_to_id id_to_id::set(const std::string &key, const isl::checked::id &val) const
9555{
9556  return this->set(isl::checked::id(ctx(), key), val);
9557}
9558
9559isl::checked::id_to_id id_to_id::set(const std::string &key, const std::string &val) const
9560{
9561  return this->set(isl::checked::id(ctx(), key), isl::checked::id(ctx(), val));
9562}
9563
9564inline std::ostream &operator<<(std::ostream &os, const id_to_id &obj)
9565{
9566  char *str = isl_id_to_id_to_str(obj.get());
9567  if (!str) {
9568    os.setstate(std::ios_base::badbit);
9569    return os;
9570  }
9571  os << str;
9572  free(str);
9573  return os;
9574}
9575
9576// implementations for isl::map
9577map manage(__isl_take isl_map *ptr) {
9578  return map(ptr);
9579}
9580map manage_copy(__isl_keep isl_map *ptr) {
9581  ptr = isl_map_copy(ptr);
9582  return map(ptr);
9583}
9584
9585map::map(__isl_take isl_map *ptr)
9586    : ptr(ptr) {}
9587
9588map::map()
9589    : ptr(nullptr) {}
9590
9591map::map(const map &obj)
9592    : ptr(nullptr)
9593{
9594  ptr = obj.copy();
9595}
9596
9597map::map(isl::checked::basic_map bmap)
9598{
9599  auto res = isl_map_from_basic_map(bmap.release());
9600  ptr = res;
9601}
9602
9603map::map(isl::checked::ctx ctx, const std::string &str)
9604{
9605  auto res = isl_map_read_from_str(ctx.release(), str.c_str());
9606  ptr = res;
9607}
9608
9609map &map::operator=(map obj) {
9610  std::swap(this->ptr, obj.ptr);
9611  return *this;
9612}
9613
9614map::~map() {
9615  if (ptr)
9616    isl_map_free(ptr);
9617}
9618
9619__isl_give isl_map *map::copy() const & {
9620  return isl_map_copy(ptr);
9621}
9622
9623__isl_keep isl_map *map::get() const {
9624  return ptr;
9625}
9626
9627__isl_give isl_map *map::release() {
9628  isl_map *tmp = ptr;
9629  ptr = nullptr;
9630  return tmp;
9631}
9632
9633bool map::is_null() const {
9634  return ptr == nullptr;
9635}
9636
9637isl::checked::ctx map::ctx() const {
9638  return isl::checked::ctx(isl_map_get_ctx(ptr));
9639}
9640
9641isl::checked::basic_map map::affine_hull() const
9642{
9643  auto res = isl_map_affine_hull(copy());
9644  return manage(res);
9645}
9646
9647isl::checked::map map::apply_domain(isl::checked::map map2) const
9648{
9649  auto res = isl_map_apply_domain(copy(), map2.release());
9650  return manage(res);
9651}
9652
9653isl::checked::union_map map::apply_domain(const isl::checked::union_map &umap2) const
9654{
9655  return isl::checked::union_map(*this).apply_domain(umap2);
9656}
9657
9658isl::checked::map map::apply_domain(const isl::checked::basic_map &map2) const
9659{
9660  return this->apply_domain(isl::checked::map(map2));
9661}
9662
9663isl::checked::map map::apply_range(isl::checked::map map2) const
9664{
9665  auto res = isl_map_apply_range(copy(), map2.release());
9666  return manage(res);
9667}
9668
9669isl::checked::union_map map::apply_range(const isl::checked::union_map &umap2) const
9670{
9671  return isl::checked::union_map(*this).apply_range(umap2);
9672}
9673
9674isl::checked::map map::apply_range(const isl::checked::basic_map &map2) const
9675{
9676  return this->apply_range(isl::checked::map(map2));
9677}
9678
9679isl::checked::map map::as_map() const
9680{
9681  return isl::checked::union_map(*this).as_map();
9682}
9683
9684isl::checked::multi_union_pw_aff map::as_multi_union_pw_aff() const
9685{
9686  return isl::checked::union_map(*this).as_multi_union_pw_aff();
9687}
9688
9689isl::checked::pw_multi_aff map::as_pw_multi_aff() const
9690{
9691  auto res = isl_map_as_pw_multi_aff(copy());
9692  return manage(res);
9693}
9694
9695isl::checked::union_pw_multi_aff map::as_union_pw_multi_aff() const
9696{
9697  return isl::checked::union_map(*this).as_union_pw_multi_aff();
9698}
9699
9700isl::checked::set map::bind_domain(isl::checked::multi_id tuple) const
9701{
9702  auto res = isl_map_bind_domain(copy(), tuple.release());
9703  return manage(res);
9704}
9705
9706isl::checked::set map::bind_range(isl::checked::multi_id tuple) const
9707{
9708  auto res = isl_map_bind_range(copy(), tuple.release());
9709  return manage(res);
9710}
9711
9712isl::checked::map map::coalesce() const
9713{
9714  auto res = isl_map_coalesce(copy());
9715  return manage(res);
9716}
9717
9718isl::checked::map map::complement() const
9719{
9720  auto res = isl_map_complement(copy());
9721  return manage(res);
9722}
9723
9724isl::checked::union_map map::compute_divs() const
9725{
9726  return isl::checked::union_map(*this).compute_divs();
9727}
9728
9729isl::checked::map map::curry() const
9730{
9731  auto res = isl_map_curry(copy());
9732  return manage(res);
9733}
9734
9735isl::checked::set map::deltas() const
9736{
9737  auto res = isl_map_deltas(copy());
9738  return manage(res);
9739}
9740
9741isl::checked::map map::detect_equalities() const
9742{
9743  auto res = isl_map_detect_equalities(copy());
9744  return manage(res);
9745}
9746
9747isl::checked::set map::domain() const
9748{
9749  auto res = isl_map_domain(copy());
9750  return manage(res);
9751}
9752
9753isl::checked::map map::domain_factor_domain() const
9754{
9755  auto res = isl_map_domain_factor_domain(copy());
9756  return manage(res);
9757}
9758
9759isl::checked::map map::domain_factor_range() const
9760{
9761  auto res = isl_map_domain_factor_range(copy());
9762  return manage(res);
9763}
9764
9765isl::checked::union_map map::domain_map() const
9766{
9767  return isl::checked::union_map(*this).domain_map();
9768}
9769
9770isl::checked::union_pw_multi_aff map::domain_map_union_pw_multi_aff() const
9771{
9772  return isl::checked::union_map(*this).domain_map_union_pw_multi_aff();
9773}
9774
9775isl::checked::map map::domain_product(isl::checked::map map2) const
9776{
9777  auto res = isl_map_domain_product(copy(), map2.release());
9778  return manage(res);
9779}
9780
9781isl::checked::union_map map::domain_product(const isl::checked::union_map &umap2) const
9782{
9783  return isl::checked::union_map(*this).domain_product(umap2);
9784}
9785
9786isl::checked::map map::domain_product(const isl::checked::basic_map &map2) const
9787{
9788  return this->domain_product(isl::checked::map(map2));
9789}
9790
9791isl::checked::map map::domain_reverse() const
9792{
9793  auto res = isl_map_domain_reverse(copy());
9794  return manage(res);
9795}
9796
9797class size map::domain_tuple_dim() const
9798{
9799  auto res = isl_map_domain_tuple_dim(get());
9800  return manage(res);
9801}
9802
9803isl::checked::id map::domain_tuple_id() const
9804{
9805  auto res = isl_map_get_domain_tuple_id(get());
9806  return manage(res);
9807}
9808
9809isl::checked::id map::get_domain_tuple_id() const
9810{
9811  return domain_tuple_id();
9812}
9813
9814isl::checked::map map::drop_unused_params() const
9815{
9816  auto res = isl_map_drop_unused_params(copy());
9817  return manage(res);
9818}
9819
9820isl::checked::map map::empty(isl::checked::space space)
9821{
9822  auto res = isl_map_empty(space.release());
9823  return manage(res);
9824}
9825
9826isl::checked::map map::eq_at(isl::checked::multi_pw_aff mpa) const
9827{
9828  auto res = isl_map_eq_at_multi_pw_aff(copy(), mpa.release());
9829  return manage(res);
9830}
9831
9832isl::checked::union_map map::eq_at(const isl::checked::multi_union_pw_aff &mupa) const
9833{
9834  return isl::checked::union_map(*this).eq_at(mupa);
9835}
9836
9837isl::checked::map map::eq_at(const isl::checked::aff &mpa) const
9838{
9839  return this->eq_at(isl::checked::multi_pw_aff(mpa));
9840}
9841
9842isl::checked::map map::eq_at(const isl::checked::multi_aff &mpa) const
9843{
9844  return this->eq_at(isl::checked::multi_pw_aff(mpa));
9845}
9846
9847isl::checked::map map::eq_at(const isl::checked::pw_aff &mpa) const
9848{
9849  return this->eq_at(isl::checked::multi_pw_aff(mpa));
9850}
9851
9852isl::checked::map map::eq_at(const isl::checked::pw_multi_aff &mpa) const
9853{
9854  return this->eq_at(isl::checked::multi_pw_aff(mpa));
9855}
9856
9857boolean map::every_map(const std::function<boolean(isl::checked::map)> &test) const
9858{
9859  return isl::checked::union_map(*this).every_map(test);
9860}
9861
9862isl::checked::map map::extract_map(const isl::checked::space &space) const
9863{
9864  return isl::checked::union_map(*this).extract_map(space);
9865}
9866
9867isl::checked::map map::factor_domain() const
9868{
9869  auto res = isl_map_factor_domain(copy());
9870  return manage(res);
9871}
9872
9873isl::checked::map map::factor_range() const
9874{
9875  auto res = isl_map_factor_range(copy());
9876  return manage(res);
9877}
9878
9879isl::checked::map map::fixed_power(isl::checked::val exp) const
9880{
9881  auto res = isl_map_fixed_power_val(copy(), exp.release());
9882  return manage(res);
9883}
9884
9885isl::checked::map map::fixed_power(long exp) const
9886{
9887  return this->fixed_power(isl::checked::val(ctx(), exp));
9888}
9889
9890isl::checked::map map::flatten() const
9891{
9892  auto res = isl_map_flatten(copy());
9893  return manage(res);
9894}
9895
9896isl::checked::map map::flatten_domain() const
9897{
9898  auto res = isl_map_flatten_domain(copy());
9899  return manage(res);
9900}
9901
9902isl::checked::map map::flatten_range() const
9903{
9904  auto res = isl_map_flatten_range(copy());
9905  return manage(res);
9906}
9907
9908stat map::foreach_basic_map(const std::function<stat(isl::checked::basic_map)> &fn) const
9909{
9910  struct fn_data {
9911    std::function<stat(isl::checked::basic_map)> func;
9912  } fn_data = { fn };
9913  auto fn_lambda = [](isl_basic_map *arg_0, void *arg_1) -> isl_stat {
9914    auto *data = static_cast<struct fn_data *>(arg_1);
9915    auto ret = (data->func)(manage(arg_0));
9916    return ret.release();
9917  };
9918  auto res = isl_map_foreach_basic_map(get(), fn_lambda, &fn_data);
9919  return manage(res);
9920}
9921
9922stat map::foreach_map(const std::function<stat(isl::checked::map)> &fn) const
9923{
9924  return isl::checked::union_map(*this).foreach_map(fn);
9925}
9926
9927isl::checked::map map::gist(isl::checked::map context) const
9928{
9929  auto res = isl_map_gist(copy(), context.release());
9930  return manage(res);
9931}
9932
9933isl::checked::union_map map::gist(const isl::checked::union_map &context) const
9934{
9935  return isl::checked::union_map(*this).gist(context);
9936}
9937
9938isl::checked::map map::gist(const isl::checked::basic_map &context) const
9939{
9940  return this->gist(isl::checked::map(context));
9941}
9942
9943isl::checked::map map::gist_domain(isl::checked::set context) const
9944{
9945  auto res = isl_map_gist_domain(copy(), context.release());
9946  return manage(res);
9947}
9948
9949isl::checked::union_map map::gist_domain(const isl::checked::union_set &uset) const
9950{
9951  return isl::checked::union_map(*this).gist_domain(uset);
9952}
9953
9954isl::checked::map map::gist_domain(const isl::checked::basic_set &context) const
9955{
9956  return this->gist_domain(isl::checked::set(context));
9957}
9958
9959isl::checked::map map::gist_domain(const isl::checked::point &context) const
9960{
9961  return this->gist_domain(isl::checked::set(context));
9962}
9963
9964isl::checked::map map::gist_params(isl::checked::set context) const
9965{
9966  auto res = isl_map_gist_params(copy(), context.release());
9967  return manage(res);
9968}
9969
9970isl::checked::union_map map::gist_range(const isl::checked::union_set &uset) const
9971{
9972  return isl::checked::union_map(*this).gist_range(uset);
9973}
9974
9975boolean map::has_domain_tuple_id() const
9976{
9977  auto res = isl_map_has_domain_tuple_id(get());
9978  return manage(res);
9979}
9980
9981boolean map::has_range_tuple_id() const
9982{
9983  auto res = isl_map_has_range_tuple_id(get());
9984  return manage(res);
9985}
9986
9987isl::checked::map map::intersect(isl::checked::map map2) const
9988{
9989  auto res = isl_map_intersect(copy(), map2.release());
9990  return manage(res);
9991}
9992
9993isl::checked::union_map map::intersect(const isl::checked::union_map &umap2) const
9994{
9995  return isl::checked::union_map(*this).intersect(umap2);
9996}
9997
9998isl::checked::map map::intersect(const isl::checked::basic_map &map2) const
9999{
10000  return this->intersect(isl::checked::map(map2));
10001}
10002
10003isl::checked::map map::intersect_domain(isl::checked::set set) const
10004{
10005  auto res = isl_map_intersect_domain(copy(), set.release());
10006  return manage(res);
10007}
10008
10009isl::checked::union_map map::intersect_domain(const isl::checked::space &space) const
10010{
10011  return isl::checked::union_map(*this).intersect_domain(space);
10012}
10013
10014isl::checked::union_map map::intersect_domain(const isl::checked::union_set &uset) const
10015{
10016  return isl::checked::union_map(*this).intersect_domain(uset);
10017}
10018
10019isl::checked::map map::intersect_domain(const isl::checked::basic_set &set) const
10020{
10021  return this->intersect_domain(isl::checked::set(set));
10022}
10023
10024isl::checked::map map::intersect_domain(const isl::checked::point &set) const
10025{
10026  return this->intersect_domain(isl::checked::set(set));
10027}
10028
10029isl::checked::map map::intersect_domain_factor_domain(isl::checked::map factor) const
10030{
10031  auto res = isl_map_intersect_domain_factor_domain(copy(), factor.release());
10032  return manage(res);
10033}
10034
10035isl::checked::union_map map::intersect_domain_factor_domain(const isl::checked::union_map &factor) const
10036{
10037  return isl::checked::union_map(*this).intersect_domain_factor_domain(factor);
10038}
10039
10040isl::checked::map map::intersect_domain_factor_domain(const isl::checked::basic_map &factor) const
10041{
10042  return this->intersect_domain_factor_domain(isl::checked::map(factor));
10043}
10044
10045isl::checked::map map::intersect_domain_factor_range(isl::checked::map factor) const
10046{
10047  auto res = isl_map_intersect_domain_factor_range(copy(), factor.release());
10048  return manage(res);
10049}
10050
10051isl::checked::union_map map::intersect_domain_factor_range(const isl::checked::union_map &factor) const
10052{
10053  return isl::checked::union_map(*this).intersect_domain_factor_range(factor);
10054}
10055
10056isl::checked::map map::intersect_domain_factor_range(const isl::checked::basic_map &factor) const
10057{
10058  return this->intersect_domain_factor_range(isl::checked::map(factor));
10059}
10060
10061isl::checked::map map::intersect_domain_wrapped_domain(isl::checked::set domain) const
10062{
10063  auto res = isl_map_intersect_domain_wrapped_domain(copy(), domain.release());
10064  return manage(res);
10065}
10066
10067isl::checked::union_map map::intersect_domain_wrapped_domain(const isl::checked::union_set &domain) const
10068{
10069  return isl::checked::union_map(*this).intersect_domain_wrapped_domain(domain);
10070}
10071
10072isl::checked::map map::intersect_domain_wrapped_domain(const isl::checked::basic_set &domain) const
10073{
10074  return this->intersect_domain_wrapped_domain(isl::checked::set(domain));
10075}
10076
10077isl::checked::map map::intersect_domain_wrapped_domain(const isl::checked::point &domain) const
10078{
10079  return this->intersect_domain_wrapped_domain(isl::checked::set(domain));
10080}
10081
10082isl::checked::map map::intersect_params(isl::checked::set params) const
10083{
10084  auto res = isl_map_intersect_params(copy(), params.release());
10085  return manage(res);
10086}
10087
10088isl::checked::map map::intersect_range(isl::checked::set set) const
10089{
10090  auto res = isl_map_intersect_range(copy(), set.release());
10091  return manage(res);
10092}
10093
10094isl::checked::union_map map::intersect_range(const isl::checked::space &space) const
10095{
10096  return isl::checked::union_map(*this).intersect_range(space);
10097}
10098
10099isl::checked::union_map map::intersect_range(const isl::checked::union_set &uset) const
10100{
10101  return isl::checked::union_map(*this).intersect_range(uset);
10102}
10103
10104isl::checked::map map::intersect_range(const isl::checked::basic_set &set) const
10105{
10106  return this->intersect_range(isl::checked::set(set));
10107}
10108
10109isl::checked::map map::intersect_range(const isl::checked::point &set) const
10110{
10111  return this->intersect_range(isl::checked::set(set));
10112}
10113
10114isl::checked::map map::intersect_range_factor_domain(isl::checked::map factor) const
10115{
10116  auto res = isl_map_intersect_range_factor_domain(copy(), factor.release());
10117  return manage(res);
10118}
10119
10120isl::checked::union_map map::intersect_range_factor_domain(const isl::checked::union_map &factor) const
10121{
10122  return isl::checked::union_map(*this).intersect_range_factor_domain(factor);
10123}
10124
10125isl::checked::map map::intersect_range_factor_domain(const isl::checked::basic_map &factor) const
10126{
10127  return this->intersect_range_factor_domain(isl::checked::map(factor));
10128}
10129
10130isl::checked::map map::intersect_range_factor_range(isl::checked::map factor) const
10131{
10132  auto res = isl_map_intersect_range_factor_range(copy(), factor.release());
10133  return manage(res);
10134}
10135
10136isl::checked::union_map map::intersect_range_factor_range(const isl::checked::union_map &factor) const
10137{
10138  return isl::checked::union_map(*this).intersect_range_factor_range(factor);
10139}
10140
10141isl::checked::map map::intersect_range_factor_range(const isl::checked::basic_map &factor) const
10142{
10143  return this->intersect_range_factor_range(isl::checked::map(factor));
10144}
10145
10146isl::checked::map map::intersect_range_wrapped_domain(isl::checked::set domain) const
10147{
10148  auto res = isl_map_intersect_range_wrapped_domain(copy(), domain.release());
10149  return manage(res);
10150}
10151
10152isl::checked::union_map map::intersect_range_wrapped_domain(const isl::checked::union_set &domain) const
10153{
10154  return isl::checked::union_map(*this).intersect_range_wrapped_domain(domain);
10155}
10156
10157isl::checked::map map::intersect_range_wrapped_domain(const isl::checked::basic_set &domain) const
10158{
10159  return this->intersect_range_wrapped_domain(isl::checked::set(domain));
10160}
10161
10162isl::checked::map map::intersect_range_wrapped_domain(const isl::checked::point &domain) const
10163{
10164  return this->intersect_range_wrapped_domain(isl::checked::set(domain));
10165}
10166
10167boolean map::is_bijective() const
10168{
10169  auto res = isl_map_is_bijective(get());
10170  return manage(res);
10171}
10172
10173boolean map::is_disjoint(const isl::checked::map &map2) const
10174{
10175  auto res = isl_map_is_disjoint(get(), map2.get());
10176  return manage(res);
10177}
10178
10179boolean map::is_disjoint(const isl::checked::union_map &umap2) const
10180{
10181  return isl::checked::union_map(*this).is_disjoint(umap2);
10182}
10183
10184boolean map::is_disjoint(const isl::checked::basic_map &map2) const
10185{
10186  return this->is_disjoint(isl::checked::map(map2));
10187}
10188
10189boolean map::is_empty() const
10190{
10191  auto res = isl_map_is_empty(get());
10192  return manage(res);
10193}
10194
10195boolean map::is_equal(const isl::checked::map &map2) const
10196{
10197  auto res = isl_map_is_equal(get(), map2.get());
10198  return manage(res);
10199}
10200
10201boolean map::is_equal(const isl::checked::union_map &umap2) const
10202{
10203  return isl::checked::union_map(*this).is_equal(umap2);
10204}
10205
10206boolean map::is_equal(const isl::checked::basic_map &map2) const
10207{
10208  return this->is_equal(isl::checked::map(map2));
10209}
10210
10211boolean map::is_injective() const
10212{
10213  auto res = isl_map_is_injective(get());
10214  return manage(res);
10215}
10216
10217boolean map::is_single_valued() const
10218{
10219  auto res = isl_map_is_single_valued(get());
10220  return manage(res);
10221}
10222
10223boolean map::is_strict_subset(const isl::checked::map &map2) const
10224{
10225  auto res = isl_map_is_strict_subset(get(), map2.get());
10226  return manage(res);
10227}
10228
10229boolean map::is_strict_subset(const isl::checked::union_map &umap2) const
10230{
10231  return isl::checked::union_map(*this).is_strict_subset(umap2);
10232}
10233
10234boolean map::is_strict_subset(const isl::checked::basic_map &map2) const
10235{
10236  return this->is_strict_subset(isl::checked::map(map2));
10237}
10238
10239boolean map::is_subset(const isl::checked::map &map2) const
10240{
10241  auto res = isl_map_is_subset(get(), map2.get());
10242  return manage(res);
10243}
10244
10245boolean map::is_subset(const isl::checked::union_map &umap2) const
10246{
10247  return isl::checked::union_map(*this).is_subset(umap2);
10248}
10249
10250boolean map::is_subset(const isl::checked::basic_map &map2) const
10251{
10252  return this->is_subset(isl::checked::map(map2));
10253}
10254
10255boolean map::isa_map() const
10256{
10257  return isl::checked::union_map(*this).isa_map();
10258}
10259
10260isl::checked::map map::lex_ge_at(isl::checked::multi_pw_aff mpa) const
10261{
10262  auto res = isl_map_lex_ge_at_multi_pw_aff(copy(), mpa.release());
10263  return manage(res);
10264}
10265
10266isl::checked::map map::lex_gt_at(isl::checked::multi_pw_aff mpa) const
10267{
10268  auto res = isl_map_lex_gt_at_multi_pw_aff(copy(), mpa.release());
10269  return manage(res);
10270}
10271
10272isl::checked::map map::lex_le_at(isl::checked::multi_pw_aff mpa) const
10273{
10274  auto res = isl_map_lex_le_at_multi_pw_aff(copy(), mpa.release());
10275  return manage(res);
10276}
10277
10278isl::checked::map map::lex_lt_at(isl::checked::multi_pw_aff mpa) const
10279{
10280  auto res = isl_map_lex_lt_at_multi_pw_aff(copy(), mpa.release());
10281  return manage(res);
10282}
10283
10284isl::checked::map map::lexmax() const
10285{
10286  auto res = isl_map_lexmax(copy());
10287  return manage(res);
10288}
10289
10290isl::checked::pw_multi_aff map::lexmax_pw_multi_aff() const
10291{
10292  auto res = isl_map_lexmax_pw_multi_aff(copy());
10293  return manage(res);
10294}
10295
10296isl::checked::map map::lexmin() const
10297{
10298  auto res = isl_map_lexmin(copy());
10299  return manage(res);
10300}
10301
10302isl::checked::pw_multi_aff map::lexmin_pw_multi_aff() const
10303{
10304  auto res = isl_map_lexmin_pw_multi_aff(copy());
10305  return manage(res);
10306}
10307
10308isl::checked::map map::lower_bound(isl::checked::multi_pw_aff lower) const
10309{
10310  auto res = isl_map_lower_bound_multi_pw_aff(copy(), lower.release());
10311  return manage(res);
10312}
10313
10314isl::checked::map_list map::map_list() const
10315{
10316  return isl::checked::union_map(*this).map_list();
10317}
10318
10319isl::checked::multi_pw_aff map::max_multi_pw_aff() const
10320{
10321  auto res = isl_map_max_multi_pw_aff(copy());
10322  return manage(res);
10323}
10324
10325isl::checked::multi_pw_aff map::min_multi_pw_aff() const
10326{
10327  auto res = isl_map_min_multi_pw_aff(copy());
10328  return manage(res);
10329}
10330
10331class size map::n_basic_map() const
10332{
10333  auto res = isl_map_n_basic_map(get());
10334  return manage(res);
10335}
10336
10337isl::checked::set map::params() const
10338{
10339  auto res = isl_map_params(copy());
10340  return manage(res);
10341}
10342
10343isl::checked::basic_map map::polyhedral_hull() const
10344{
10345  auto res = isl_map_polyhedral_hull(copy());
10346  return manage(res);
10347}
10348
10349isl::checked::map map::preimage_domain(isl::checked::multi_aff ma) const
10350{
10351  auto res = isl_map_preimage_domain_multi_aff(copy(), ma.release());
10352  return manage(res);
10353}
10354
10355isl::checked::map map::preimage_domain(isl::checked::multi_pw_aff mpa) const
10356{
10357  auto res = isl_map_preimage_domain_multi_pw_aff(copy(), mpa.release());
10358  return manage(res);
10359}
10360
10361isl::checked::map map::preimage_domain(isl::checked::pw_multi_aff pma) const
10362{
10363  auto res = isl_map_preimage_domain_pw_multi_aff(copy(), pma.release());
10364  return manage(res);
10365}
10366
10367isl::checked::union_map map::preimage_domain(const isl::checked::union_pw_multi_aff &upma) const
10368{
10369  return isl::checked::union_map(*this).preimage_domain(upma);
10370}
10371
10372isl::checked::map map::preimage_range(isl::checked::multi_aff ma) const
10373{
10374  auto res = isl_map_preimage_range_multi_aff(copy(), ma.release());
10375  return manage(res);
10376}
10377
10378isl::checked::map map::preimage_range(isl::checked::pw_multi_aff pma) const
10379{
10380  auto res = isl_map_preimage_range_pw_multi_aff(copy(), pma.release());
10381  return manage(res);
10382}
10383
10384isl::checked::union_map map::preimage_range(const isl::checked::union_pw_multi_aff &upma) const
10385{
10386  return isl::checked::union_map(*this).preimage_range(upma);
10387}
10388
10389isl::checked::map map::product(isl::checked::map map2) const
10390{
10391  auto res = isl_map_product(copy(), map2.release());
10392  return manage(res);
10393}
10394
10395isl::checked::union_map map::product(const isl::checked::union_map &umap2) const
10396{
10397  return isl::checked::union_map(*this).product(umap2);
10398}
10399
10400isl::checked::map map::product(const isl::checked::basic_map &map2) const
10401{
10402  return this->product(isl::checked::map(map2));
10403}
10404
10405isl::checked::map map::project_out_all_params() const
10406{
10407  auto res = isl_map_project_out_all_params(copy());
10408  return manage(res);
10409}
10410
10411isl::checked::map map::project_out_param(isl::checked::id id) const
10412{
10413  auto res = isl_map_project_out_param_id(copy(), id.release());
10414  return manage(res);
10415}
10416
10417isl::checked::map map::project_out_param(const std::string &id) const
10418{
10419  return this->project_out_param(isl::checked::id(ctx(), id));
10420}
10421
10422isl::checked::map map::project_out_param(isl::checked::id_list list) const
10423{
10424  auto res = isl_map_project_out_param_id_list(copy(), list.release());
10425  return manage(res);
10426}
10427
10428isl::checked::set map::range() const
10429{
10430  auto res = isl_map_range(copy());
10431  return manage(res);
10432}
10433
10434isl::checked::map map::range_factor_domain() const
10435{
10436  auto res = isl_map_range_factor_domain(copy());
10437  return manage(res);
10438}
10439
10440isl::checked::map map::range_factor_range() const
10441{
10442  auto res = isl_map_range_factor_range(copy());
10443  return manage(res);
10444}
10445
10446isl::checked::fixed_box map::range_lattice_tile() const
10447{
10448  auto res = isl_map_get_range_lattice_tile(get());
10449  return manage(res);
10450}
10451
10452isl::checked::fixed_box map::get_range_lattice_tile() const
10453{
10454  return range_lattice_tile();
10455}
10456
10457isl::checked::union_map map::range_map() const
10458{
10459  return isl::checked::union_map(*this).range_map();
10460}
10461
10462isl::checked::map map::range_product(isl::checked::map map2) const
10463{
10464  auto res = isl_map_range_product(copy(), map2.release());
10465  return manage(res);
10466}
10467
10468isl::checked::union_map map::range_product(const isl::checked::union_map &umap2) const
10469{
10470  return isl::checked::union_map(*this).range_product(umap2);
10471}
10472
10473isl::checked::map map::range_product(const isl::checked::basic_map &map2) const
10474{
10475  return this->range_product(isl::checked::map(map2));
10476}
10477
10478isl::checked::map map::range_reverse() const
10479{
10480  auto res = isl_map_range_reverse(copy());
10481  return manage(res);
10482}
10483
10484isl::checked::fixed_box map::range_simple_fixed_box_hull() const
10485{
10486  auto res = isl_map_get_range_simple_fixed_box_hull(get());
10487  return manage(res);
10488}
10489
10490isl::checked::fixed_box map::get_range_simple_fixed_box_hull() const
10491{
10492  return range_simple_fixed_box_hull();
10493}
10494
10495class size map::range_tuple_dim() const
10496{
10497  auto res = isl_map_range_tuple_dim(get());
10498  return manage(res);
10499}
10500
10501isl::checked::id map::range_tuple_id() const
10502{
10503  auto res = isl_map_get_range_tuple_id(get());
10504  return manage(res);
10505}
10506
10507isl::checked::id map::get_range_tuple_id() const
10508{
10509  return range_tuple_id();
10510}
10511
10512isl::checked::map map::reverse() const
10513{
10514  auto res = isl_map_reverse(copy());
10515  return manage(res);
10516}
10517
10518isl::checked::basic_map map::sample() const
10519{
10520  auto res = isl_map_sample(copy());
10521  return manage(res);
10522}
10523
10524isl::checked::map map::set_domain_tuple(isl::checked::id id) const
10525{
10526  auto res = isl_map_set_domain_tuple_id(copy(), id.release());
10527  return manage(res);
10528}
10529
10530isl::checked::map map::set_domain_tuple(const std::string &id) const
10531{
10532  return this->set_domain_tuple(isl::checked::id(ctx(), id));
10533}
10534
10535isl::checked::map map::set_range_tuple(isl::checked::id id) const
10536{
10537  auto res = isl_map_set_range_tuple_id(copy(), id.release());
10538  return manage(res);
10539}
10540
10541isl::checked::map map::set_range_tuple(const std::string &id) const
10542{
10543  return this->set_range_tuple(isl::checked::id(ctx(), id));
10544}
10545
10546isl::checked::space map::space() const
10547{
10548  auto res = isl_map_get_space(get());
10549  return manage(res);
10550}
10551
10552isl::checked::space map::get_space() const
10553{
10554  return space();
10555}
10556
10557isl::checked::map map::subtract(isl::checked::map map2) const
10558{
10559  auto res = isl_map_subtract(copy(), map2.release());
10560  return manage(res);
10561}
10562
10563isl::checked::union_map map::subtract(const isl::checked::union_map &umap2) const
10564{
10565  return isl::checked::union_map(*this).subtract(umap2);
10566}
10567
10568isl::checked::map map::subtract(const isl::checked::basic_map &map2) const
10569{
10570  return this->subtract(isl::checked::map(map2));
10571}
10572
10573isl::checked::union_map map::subtract_domain(const isl::checked::union_set &dom) const
10574{
10575  return isl::checked::union_map(*this).subtract_domain(dom);
10576}
10577
10578isl::checked::union_map map::subtract_range(const isl::checked::union_set &dom) const
10579{
10580  return isl::checked::union_map(*this).subtract_range(dom);
10581}
10582
10583isl::checked::map_list map::to_list() const
10584{
10585  auto res = isl_map_to_list(copy());
10586  return manage(res);
10587}
10588
10589isl::checked::union_map map::to_union_map() const
10590{
10591  auto res = isl_map_to_union_map(copy());
10592  return manage(res);
10593}
10594
10595isl::checked::map map::uncurry() const
10596{
10597  auto res = isl_map_uncurry(copy());
10598  return manage(res);
10599}
10600
10601isl::checked::map map::unite(isl::checked::map map2) const
10602{
10603  auto res = isl_map_union(copy(), map2.release());
10604  return manage(res);
10605}
10606
10607isl::checked::union_map map::unite(const isl::checked::union_map &umap2) const
10608{
10609  return isl::checked::union_map(*this).unite(umap2);
10610}
10611
10612isl::checked::map map::unite(const isl::checked::basic_map &map2) const
10613{
10614  return this->unite(isl::checked::map(map2));
10615}
10616
10617isl::checked::map map::universe(isl::checked::space space)
10618{
10619  auto res = isl_map_universe(space.release());
10620  return manage(res);
10621}
10622
10623isl::checked::basic_map map::unshifted_simple_hull() const
10624{
10625  auto res = isl_map_unshifted_simple_hull(copy());
10626  return manage(res);
10627}
10628
10629isl::checked::map map::upper_bound(isl::checked::multi_pw_aff upper) const
10630{
10631  auto res = isl_map_upper_bound_multi_pw_aff(copy(), upper.release());
10632  return manage(res);
10633}
10634
10635isl::checked::set map::wrap() const
10636{
10637  auto res = isl_map_wrap(copy());
10638  return manage(res);
10639}
10640
10641isl::checked::map map::zip() const
10642{
10643  auto res = isl_map_zip(copy());
10644  return manage(res);
10645}
10646
10647inline std::ostream &operator<<(std::ostream &os, const map &obj)
10648{
10649  char *str = isl_map_to_str(obj.get());
10650  if (!str) {
10651    os.setstate(std::ios_base::badbit);
10652    return os;
10653  }
10654  os << str;
10655  free(str);
10656  return os;
10657}
10658
10659// implementations for isl::map_list
10660map_list manage(__isl_take isl_map_list *ptr) {
10661  return map_list(ptr);
10662}
10663map_list manage_copy(__isl_keep isl_map_list *ptr) {
10664  ptr = isl_map_list_copy(ptr);
10665  return map_list(ptr);
10666}
10667
10668map_list::map_list(__isl_take isl_map_list *ptr)
10669    : ptr(ptr) {}
10670
10671map_list::map_list()
10672    : ptr(nullptr) {}
10673
10674map_list::map_list(const map_list &obj)
10675    : ptr(nullptr)
10676{
10677  ptr = obj.copy();
10678}
10679
10680map_list::map_list(isl::checked::ctx ctx, int n)
10681{
10682  auto res = isl_map_list_alloc(ctx.release(), n);
10683  ptr = res;
10684}
10685
10686map_list::map_list(isl::checked::map el)
10687{
10688  auto res = isl_map_list_from_map(el.release());
10689  ptr = res;
10690}
10691
10692map_list::map_list(isl::checked::ctx ctx, const std::string &str)
10693{
10694  auto res = isl_map_list_read_from_str(ctx.release(), str.c_str());
10695  ptr = res;
10696}
10697
10698map_list &map_list::operator=(map_list obj) {
10699  std::swap(this->ptr, obj.ptr);
10700  return *this;
10701}
10702
10703map_list::~map_list() {
10704  if (ptr)
10705    isl_map_list_free(ptr);
10706}
10707
10708__isl_give isl_map_list *map_list::copy() const & {
10709  return isl_map_list_copy(ptr);
10710}
10711
10712__isl_keep isl_map_list *map_list::get() const {
10713  return ptr;
10714}
10715
10716__isl_give isl_map_list *map_list::release() {
10717  isl_map_list *tmp = ptr;
10718  ptr = nullptr;
10719  return tmp;
10720}
10721
10722bool map_list::is_null() const {
10723  return ptr == nullptr;
10724}
10725
10726isl::checked::ctx map_list::ctx() const {
10727  return isl::checked::ctx(isl_map_list_get_ctx(ptr));
10728}
10729
10730isl::checked::map_list map_list::add(isl::checked::map el) const
10731{
10732  auto res = isl_map_list_add(copy(), el.release());
10733  return manage(res);
10734}
10735
10736isl::checked::map map_list::at(int index) const
10737{
10738  auto res = isl_map_list_get_at(get(), index);
10739  return manage(res);
10740}
10741
10742isl::checked::map map_list::get_at(int index) const
10743{
10744  return at(index);
10745}
10746
10747isl::checked::map_list map_list::clear() const
10748{
10749  auto res = isl_map_list_clear(copy());
10750  return manage(res);
10751}
10752
10753isl::checked::map_list map_list::concat(isl::checked::map_list list2) const
10754{
10755  auto res = isl_map_list_concat(copy(), list2.release());
10756  return manage(res);
10757}
10758
10759isl::checked::map_list map_list::drop(unsigned int first, unsigned int n) const
10760{
10761  auto res = isl_map_list_drop(copy(), first, n);
10762  return manage(res);
10763}
10764
10765stat map_list::foreach(const std::function<stat(isl::checked::map)> &fn) const
10766{
10767  struct fn_data {
10768    std::function<stat(isl::checked::map)> func;
10769  } fn_data = { fn };
10770  auto fn_lambda = [](isl_map *arg_0, void *arg_1) -> isl_stat {
10771    auto *data = static_cast<struct fn_data *>(arg_1);
10772    auto ret = (data->func)(manage(arg_0));
10773    return ret.release();
10774  };
10775  auto res = isl_map_list_foreach(get(), fn_lambda, &fn_data);
10776  return manage(res);
10777}
10778
10779stat map_list::foreach_scc(const std::function<boolean(isl::checked::map, isl::checked::map)> &follows, const std::function<stat(isl::checked::map_list)> &fn) const
10780{
10781  struct follows_data {
10782    std::function<boolean(isl::checked::map, isl::checked::map)> func;
10783  } follows_data = { follows };
10784  auto follows_lambda = [](isl_map *arg_0, isl_map *arg_1, void *arg_2) -> isl_bool {
10785    auto *data = static_cast<struct follows_data *>(arg_2);
10786    auto ret = (data->func)(manage_copy(arg_0), manage_copy(arg_1));
10787    return ret.release();
10788  };
10789  struct fn_data {
10790    std::function<stat(isl::checked::map_list)> func;
10791  } fn_data = { fn };
10792  auto fn_lambda = [](isl_map_list *arg_0, void *arg_1) -> isl_stat {
10793    auto *data = static_cast<struct fn_data *>(arg_1);
10794    auto ret = (data->func)(manage(arg_0));
10795    return ret.release();
10796  };
10797  auto res = isl_map_list_foreach_scc(get(), follows_lambda, &follows_data, fn_lambda, &fn_data);
10798  return manage(res);
10799}
10800
10801isl::checked::map_list map_list::insert(unsigned int pos, isl::checked::map el) const
10802{
10803  auto res = isl_map_list_insert(copy(), pos, el.release());
10804  return manage(res);
10805}
10806
10807isl::checked::map_list map_list::set_at(int index, isl::checked::map el) const
10808{
10809  auto res = isl_map_list_set_at(copy(), index, el.release());
10810  return manage(res);
10811}
10812
10813class size map_list::size() const
10814{
10815  auto res = isl_map_list_size(get());
10816  return manage(res);
10817}
10818
10819inline std::ostream &operator<<(std::ostream &os, const map_list &obj)
10820{
10821  char *str = isl_map_list_to_str(obj.get());
10822  if (!str) {
10823    os.setstate(std::ios_base::badbit);
10824    return os;
10825  }
10826  os << str;
10827  free(str);
10828  return os;
10829}
10830
10831// implementations for isl::multi_aff
10832multi_aff manage(__isl_take isl_multi_aff *ptr) {
10833  return multi_aff(ptr);
10834}
10835multi_aff manage_copy(__isl_keep isl_multi_aff *ptr) {
10836  ptr = isl_multi_aff_copy(ptr);
10837  return multi_aff(ptr);
10838}
10839
10840multi_aff::multi_aff(__isl_take isl_multi_aff *ptr)
10841    : ptr(ptr) {}
10842
10843multi_aff::multi_aff()
10844    : ptr(nullptr) {}
10845
10846multi_aff::multi_aff(const multi_aff &obj)
10847    : ptr(nullptr)
10848{
10849  ptr = obj.copy();
10850}
10851
10852multi_aff::multi_aff(isl::checked::aff aff)
10853{
10854  auto res = isl_multi_aff_from_aff(aff.release());
10855  ptr = res;
10856}
10857
10858multi_aff::multi_aff(isl::checked::space space, isl::checked::aff_list list)
10859{
10860  auto res = isl_multi_aff_from_aff_list(space.release(), list.release());
10861  ptr = res;
10862}
10863
10864multi_aff::multi_aff(isl::checked::ctx ctx, const std::string &str)
10865{
10866  auto res = isl_multi_aff_read_from_str(ctx.release(), str.c_str());
10867  ptr = res;
10868}
10869
10870multi_aff &multi_aff::operator=(multi_aff obj) {
10871  std::swap(this->ptr, obj.ptr);
10872  return *this;
10873}
10874
10875multi_aff::~multi_aff() {
10876  if (ptr)
10877    isl_multi_aff_free(ptr);
10878}
10879
10880__isl_give isl_multi_aff *multi_aff::copy() const & {
10881  return isl_multi_aff_copy(ptr);
10882}
10883
10884__isl_keep isl_multi_aff *multi_aff::get() const {
10885  return ptr;
10886}
10887
10888__isl_give isl_multi_aff *multi_aff::release() {
10889  isl_multi_aff *tmp = ptr;
10890  ptr = nullptr;
10891  return tmp;
10892}
10893
10894bool multi_aff::is_null() const {
10895  return ptr == nullptr;
10896}
10897
10898isl::checked::ctx multi_aff::ctx() const {
10899  return isl::checked::ctx(isl_multi_aff_get_ctx(ptr));
10900}
10901
10902isl::checked::multi_aff multi_aff::add(isl::checked::multi_aff multi2) const
10903{
10904  auto res = isl_multi_aff_add(copy(), multi2.release());
10905  return manage(res);
10906}
10907
10908isl::checked::multi_pw_aff multi_aff::add(const isl::checked::multi_pw_aff &multi2) const
10909{
10910  return isl::checked::pw_multi_aff(*this).add(multi2);
10911}
10912
10913isl::checked::multi_union_pw_aff multi_aff::add(const isl::checked::multi_union_pw_aff &multi2) const
10914{
10915  return isl::checked::pw_multi_aff(*this).add(multi2);
10916}
10917
10918isl::checked::pw_multi_aff multi_aff::add(const isl::checked::pw_multi_aff &pma2) const
10919{
10920  return isl::checked::pw_multi_aff(*this).add(pma2);
10921}
10922
10923isl::checked::union_pw_multi_aff multi_aff::add(const isl::checked::union_pw_multi_aff &upma2) const
10924{
10925  return isl::checked::pw_multi_aff(*this).add(upma2);
10926}
10927
10928isl::checked::multi_aff multi_aff::add(const isl::checked::aff &multi2) const
10929{
10930  return this->add(isl::checked::multi_aff(multi2));
10931}
10932
10933isl::checked::multi_aff multi_aff::add_constant(isl::checked::multi_val mv) const
10934{
10935  auto res = isl_multi_aff_add_constant_multi_val(copy(), mv.release());
10936  return manage(res);
10937}
10938
10939isl::checked::multi_aff multi_aff::add_constant(isl::checked::val v) const
10940{
10941  auto res = isl_multi_aff_add_constant_val(copy(), v.release());
10942  return manage(res);
10943}
10944
10945isl::checked::multi_aff multi_aff::add_constant(long v) const
10946{
10947  return this->add_constant(isl::checked::val(ctx(), v));
10948}
10949
10950isl::checked::union_pw_multi_aff multi_aff::apply(const isl::checked::union_pw_multi_aff &upma2) const
10951{
10952  return isl::checked::pw_multi_aff(*this).apply(upma2);
10953}
10954
10955isl::checked::map multi_aff::as_map() const
10956{
10957  auto res = isl_multi_aff_as_map(copy());
10958  return manage(res);
10959}
10960
10961isl::checked::multi_aff multi_aff::as_multi_aff() const
10962{
10963  return isl::checked::pw_multi_aff(*this).as_multi_aff();
10964}
10965
10966isl::checked::multi_union_pw_aff multi_aff::as_multi_union_pw_aff() const
10967{
10968  return isl::checked::pw_multi_aff(*this).as_multi_union_pw_aff();
10969}
10970
10971isl::checked::pw_multi_aff multi_aff::as_pw_multi_aff() const
10972{
10973  return isl::checked::pw_multi_aff(*this).as_pw_multi_aff();
10974}
10975
10976isl::checked::set multi_aff::as_set() const
10977{
10978  auto res = isl_multi_aff_as_set(copy());
10979  return manage(res);
10980}
10981
10982isl::checked::union_map multi_aff::as_union_map() const
10983{
10984  return isl::checked::pw_multi_aff(*this).as_union_map();
10985}
10986
10987isl::checked::aff multi_aff::at(int pos) const
10988{
10989  auto res = isl_multi_aff_get_at(get(), pos);
10990  return manage(res);
10991}
10992
10993isl::checked::aff multi_aff::get_at(int pos) const
10994{
10995  return at(pos);
10996}
10997
10998isl::checked::basic_set multi_aff::bind(isl::checked::multi_id tuple) const
10999{
11000  auto res = isl_multi_aff_bind(copy(), tuple.release());
11001  return manage(res);
11002}
11003
11004isl::checked::multi_aff multi_aff::bind_domain(isl::checked::multi_id tuple) const
11005{
11006  auto res = isl_multi_aff_bind_domain(copy(), tuple.release());
11007  return manage(res);
11008}
11009
11010isl::checked::multi_aff multi_aff::bind_domain_wrapped_domain(isl::checked::multi_id tuple) const
11011{
11012  auto res = isl_multi_aff_bind_domain_wrapped_domain(copy(), tuple.release());
11013  return manage(res);
11014}
11015
11016isl::checked::pw_multi_aff multi_aff::coalesce() const
11017{
11018  return isl::checked::pw_multi_aff(*this).coalesce();
11019}
11020
11021isl::checked::multi_val multi_aff::constant_multi_val() const
11022{
11023  auto res = isl_multi_aff_get_constant_multi_val(get());
11024  return manage(res);
11025}
11026
11027isl::checked::multi_val multi_aff::get_constant_multi_val() const
11028{
11029  return constant_multi_val();
11030}
11031
11032isl::checked::set multi_aff::domain() const
11033{
11034  return isl::checked::pw_multi_aff(*this).domain();
11035}
11036
11037isl::checked::multi_aff multi_aff::domain_map(isl::checked::space space)
11038{
11039  auto res = isl_multi_aff_domain_map(space.release());
11040  return manage(res);
11041}
11042
11043isl::checked::multi_aff multi_aff::domain_reverse() const
11044{
11045  auto res = isl_multi_aff_domain_reverse(copy());
11046  return manage(res);
11047}
11048
11049isl::checked::pw_multi_aff multi_aff::drop_unused_params() const
11050{
11051  return isl::checked::pw_multi_aff(*this).drop_unused_params();
11052}
11053
11054isl::checked::pw_multi_aff multi_aff::extract_pw_multi_aff(const isl::checked::space &space) const
11055{
11056  return isl::checked::pw_multi_aff(*this).extract_pw_multi_aff(space);
11057}
11058
11059isl::checked::multi_aff multi_aff::flat_range_product(isl::checked::multi_aff multi2) const
11060{
11061  auto res = isl_multi_aff_flat_range_product(copy(), multi2.release());
11062  return manage(res);
11063}
11064
11065isl::checked::multi_pw_aff multi_aff::flat_range_product(const isl::checked::multi_pw_aff &multi2) const
11066{
11067  return isl::checked::pw_multi_aff(*this).flat_range_product(multi2);
11068}
11069
11070isl::checked::multi_union_pw_aff multi_aff::flat_range_product(const isl::checked::multi_union_pw_aff &multi2) const
11071{
11072  return isl::checked::pw_multi_aff(*this).flat_range_product(multi2);
11073}
11074
11075isl::checked::pw_multi_aff multi_aff::flat_range_product(const isl::checked::pw_multi_aff &pma2) const
11076{
11077  return isl::checked::pw_multi_aff(*this).flat_range_product(pma2);
11078}
11079
11080isl::checked::union_pw_multi_aff multi_aff::flat_range_product(const isl::checked::union_pw_multi_aff &upma2) const
11081{
11082  return isl::checked::pw_multi_aff(*this).flat_range_product(upma2);
11083}
11084
11085isl::checked::multi_aff multi_aff::flat_range_product(const isl::checked::aff &multi2) const
11086{
11087  return this->flat_range_product(isl::checked::multi_aff(multi2));
11088}
11089
11090isl::checked::multi_aff multi_aff::floor() const
11091{
11092  auto res = isl_multi_aff_floor(copy());
11093  return manage(res);
11094}
11095
11096stat multi_aff::foreach_piece(const std::function<stat(isl::checked::set, isl::checked::multi_aff)> &fn) const
11097{
11098  return isl::checked::pw_multi_aff(*this).foreach_piece(fn);
11099}
11100
11101isl::checked::multi_aff multi_aff::gist(isl::checked::set context) const
11102{
11103  auto res = isl_multi_aff_gist(copy(), context.release());
11104  return manage(res);
11105}
11106
11107isl::checked::union_pw_multi_aff multi_aff::gist(const isl::checked::union_set &context) const
11108{
11109  return isl::checked::pw_multi_aff(*this).gist(context);
11110}
11111
11112isl::checked::multi_aff multi_aff::gist(const isl::checked::basic_set &context) const
11113{
11114  return this->gist(isl::checked::set(context));
11115}
11116
11117isl::checked::multi_aff multi_aff::gist(const isl::checked::point &context) const
11118{
11119  return this->gist(isl::checked::set(context));
11120}
11121
11122isl::checked::multi_aff multi_aff::gist_params(isl::checked::set context) const
11123{
11124  auto res = isl_multi_aff_gist_params(copy(), context.release());
11125  return manage(res);
11126}
11127
11128boolean multi_aff::has_range_tuple_id() const
11129{
11130  auto res = isl_multi_aff_has_range_tuple_id(get());
11131  return manage(res);
11132}
11133
11134isl::checked::multi_aff multi_aff::identity() const
11135{
11136  auto res = isl_multi_aff_identity_multi_aff(copy());
11137  return manage(res);
11138}
11139
11140isl::checked::multi_aff multi_aff::identity_on_domain(isl::checked::space space)
11141{
11142  auto res = isl_multi_aff_identity_on_domain_space(space.release());
11143  return manage(res);
11144}
11145
11146isl::checked::multi_aff multi_aff::insert_domain(isl::checked::space domain) const
11147{
11148  auto res = isl_multi_aff_insert_domain(copy(), domain.release());
11149  return manage(res);
11150}
11151
11152isl::checked::pw_multi_aff multi_aff::intersect_domain(const isl::checked::set &set) const
11153{
11154  return isl::checked::pw_multi_aff(*this).intersect_domain(set);
11155}
11156
11157isl::checked::union_pw_multi_aff multi_aff::intersect_domain(const isl::checked::space &space) const
11158{
11159  return isl::checked::pw_multi_aff(*this).intersect_domain(space);
11160}
11161
11162isl::checked::union_pw_multi_aff multi_aff::intersect_domain(const isl::checked::union_set &uset) const
11163{
11164  return isl::checked::pw_multi_aff(*this).intersect_domain(uset);
11165}
11166
11167isl::checked::union_pw_multi_aff multi_aff::intersect_domain_wrapped_domain(const isl::checked::union_set &uset) const
11168{
11169  return isl::checked::pw_multi_aff(*this).intersect_domain_wrapped_domain(uset);
11170}
11171
11172isl::checked::union_pw_multi_aff multi_aff::intersect_domain_wrapped_range(const isl::checked::union_set &uset) const
11173{
11174  return isl::checked::pw_multi_aff(*this).intersect_domain_wrapped_range(uset);
11175}
11176
11177isl::checked::pw_multi_aff multi_aff::intersect_params(const isl::checked::set &set) const
11178{
11179  return isl::checked::pw_multi_aff(*this).intersect_params(set);
11180}
11181
11182boolean multi_aff::involves_locals() const
11183{
11184  auto res = isl_multi_aff_involves_locals(get());
11185  return manage(res);
11186}
11187
11188boolean multi_aff::involves_nan() const
11189{
11190  auto res = isl_multi_aff_involves_nan(get());
11191  return manage(res);
11192}
11193
11194boolean multi_aff::involves_param(const isl::checked::id &id) const
11195{
11196  return isl::checked::pw_multi_aff(*this).involves_param(id);
11197}
11198
11199boolean multi_aff::involves_param(const std::string &id) const
11200{
11201  return this->involves_param(isl::checked::id(ctx(), id));
11202}
11203
11204boolean multi_aff::involves_param(const isl::checked::id_list &list) const
11205{
11206  return isl::checked::pw_multi_aff(*this).involves_param(list);
11207}
11208
11209boolean multi_aff::isa_multi_aff() const
11210{
11211  return isl::checked::pw_multi_aff(*this).isa_multi_aff();
11212}
11213
11214boolean multi_aff::isa_pw_multi_aff() const
11215{
11216  return isl::checked::pw_multi_aff(*this).isa_pw_multi_aff();
11217}
11218
11219isl::checked::aff_list multi_aff::list() const
11220{
11221  auto res = isl_multi_aff_get_list(get());
11222  return manage(res);
11223}
11224
11225isl::checked::aff_list multi_aff::get_list() const
11226{
11227  return list();
11228}
11229
11230isl::checked::multi_pw_aff multi_aff::max(const isl::checked::multi_pw_aff &multi2) const
11231{
11232  return isl::checked::pw_multi_aff(*this).max(multi2);
11233}
11234
11235isl::checked::multi_val multi_aff::max_multi_val() const
11236{
11237  return isl::checked::pw_multi_aff(*this).max_multi_val();
11238}
11239
11240isl::checked::multi_pw_aff multi_aff::min(const isl::checked::multi_pw_aff &multi2) const
11241{
11242  return isl::checked::pw_multi_aff(*this).min(multi2);
11243}
11244
11245isl::checked::multi_val multi_aff::min_multi_val() const
11246{
11247  return isl::checked::pw_multi_aff(*this).min_multi_val();
11248}
11249
11250isl::checked::multi_aff multi_aff::multi_val_on_domain(isl::checked::space space, isl::checked::multi_val mv)
11251{
11252  auto res = isl_multi_aff_multi_val_on_domain_space(space.release(), mv.release());
11253  return manage(res);
11254}
11255
11256class size multi_aff::n_piece() const
11257{
11258  return isl::checked::pw_multi_aff(*this).n_piece();
11259}
11260
11261isl::checked::multi_aff multi_aff::neg() const
11262{
11263  auto res = isl_multi_aff_neg(copy());
11264  return manage(res);
11265}
11266
11267boolean multi_aff::plain_is_empty() const
11268{
11269  return isl::checked::pw_multi_aff(*this).plain_is_empty();
11270}
11271
11272boolean multi_aff::plain_is_equal(const isl::checked::multi_aff &multi2) const
11273{
11274  auto res = isl_multi_aff_plain_is_equal(get(), multi2.get());
11275  return manage(res);
11276}
11277
11278boolean multi_aff::plain_is_equal(const isl::checked::multi_pw_aff &multi2) const
11279{
11280  return isl::checked::pw_multi_aff(*this).plain_is_equal(multi2);
11281}
11282
11283boolean multi_aff::plain_is_equal(const isl::checked::multi_union_pw_aff &multi2) const
11284{
11285  return isl::checked::pw_multi_aff(*this).plain_is_equal(multi2);
11286}
11287
11288boolean multi_aff::plain_is_equal(const isl::checked::pw_multi_aff &pma2) const
11289{
11290  return isl::checked::pw_multi_aff(*this).plain_is_equal(pma2);
11291}
11292
11293boolean multi_aff::plain_is_equal(const isl::checked::union_pw_multi_aff &upma2) const
11294{
11295  return isl::checked::pw_multi_aff(*this).plain_is_equal(upma2);
11296}
11297
11298boolean multi_aff::plain_is_equal(const isl::checked::aff &multi2) const
11299{
11300  return this->plain_is_equal(isl::checked::multi_aff(multi2));
11301}
11302
11303isl::checked::pw_multi_aff multi_aff::preimage_domain_wrapped_domain(const isl::checked::pw_multi_aff &pma2) const
11304{
11305  return isl::checked::pw_multi_aff(*this).preimage_domain_wrapped_domain(pma2);
11306}
11307
11308isl::checked::union_pw_multi_aff multi_aff::preimage_domain_wrapped_domain(const isl::checked::union_pw_multi_aff &upma2) const
11309{
11310  return isl::checked::pw_multi_aff(*this).preimage_domain_wrapped_domain(upma2);
11311}
11312
11313isl::checked::multi_aff multi_aff::product(isl::checked::multi_aff multi2) const
11314{
11315  auto res = isl_multi_aff_product(copy(), multi2.release());
11316  return manage(res);
11317}
11318
11319isl::checked::multi_pw_aff multi_aff::product(const isl::checked::multi_pw_aff &multi2) const
11320{
11321  return isl::checked::pw_multi_aff(*this).product(multi2);
11322}
11323
11324isl::checked::pw_multi_aff multi_aff::product(const isl::checked::pw_multi_aff &pma2) const
11325{
11326  return isl::checked::pw_multi_aff(*this).product(pma2);
11327}
11328
11329isl::checked::multi_aff multi_aff::product(const isl::checked::aff &multi2) const
11330{
11331  return this->product(isl::checked::multi_aff(multi2));
11332}
11333
11334isl::checked::multi_aff multi_aff::pullback(isl::checked::multi_aff ma2) const
11335{
11336  auto res = isl_multi_aff_pullback_multi_aff(copy(), ma2.release());
11337  return manage(res);
11338}
11339
11340isl::checked::multi_pw_aff multi_aff::pullback(const isl::checked::multi_pw_aff &mpa2) const
11341{
11342  return isl::checked::pw_multi_aff(*this).pullback(mpa2);
11343}
11344
11345isl::checked::pw_multi_aff multi_aff::pullback(const isl::checked::pw_multi_aff &pma2) const
11346{
11347  return isl::checked::pw_multi_aff(*this).pullback(pma2);
11348}
11349
11350isl::checked::union_pw_multi_aff multi_aff::pullback(const isl::checked::union_pw_multi_aff &upma2) const
11351{
11352  return isl::checked::pw_multi_aff(*this).pullback(upma2);
11353}
11354
11355isl::checked::multi_aff multi_aff::pullback(const isl::checked::aff &ma2) const
11356{
11357  return this->pullback(isl::checked::multi_aff(ma2));
11358}
11359
11360isl::checked::pw_multi_aff_list multi_aff::pw_multi_aff_list() const
11361{
11362  return isl::checked::pw_multi_aff(*this).pw_multi_aff_list();
11363}
11364
11365isl::checked::pw_multi_aff multi_aff::range_factor_domain() const
11366{
11367  return isl::checked::pw_multi_aff(*this).range_factor_domain();
11368}
11369
11370isl::checked::pw_multi_aff multi_aff::range_factor_range() const
11371{
11372  return isl::checked::pw_multi_aff(*this).range_factor_range();
11373}
11374
11375isl::checked::multi_aff multi_aff::range_map(isl::checked::space space)
11376{
11377  auto res = isl_multi_aff_range_map(space.release());
11378  return manage(res);
11379}
11380
11381isl::checked::multi_aff multi_aff::range_product(isl::checked::multi_aff multi2) const
11382{
11383  auto res = isl_multi_aff_range_product(copy(), multi2.release());
11384  return manage(res);
11385}
11386
11387isl::checked::multi_pw_aff multi_aff::range_product(const isl::checked::multi_pw_aff &multi2) const
11388{
11389  return isl::checked::pw_multi_aff(*this).range_product(multi2);
11390}
11391
11392isl::checked::multi_union_pw_aff multi_aff::range_product(const isl::checked::multi_union_pw_aff &multi2) const
11393{
11394  return isl::checked::pw_multi_aff(*this).range_product(multi2);
11395}
11396
11397isl::checked::pw_multi_aff multi_aff::range_product(const isl::checked::pw_multi_aff &pma2) const
11398{
11399  return isl::checked::pw_multi_aff(*this).range_product(pma2);
11400}
11401
11402isl::checked::union_pw_multi_aff multi_aff::range_product(const isl::checked::union_pw_multi_aff &upma2) const
11403{
11404  return isl::checked::pw_multi_aff(*this).range_product(upma2);
11405}
11406
11407isl::checked::multi_aff multi_aff::range_product(const isl::checked::aff &multi2) const
11408{
11409  return this->range_product(isl::checked::multi_aff(multi2));
11410}
11411
11412isl::checked::id multi_aff::range_tuple_id() const
11413{
11414  auto res = isl_multi_aff_get_range_tuple_id(get());
11415  return manage(res);
11416}
11417
11418isl::checked::id multi_aff::get_range_tuple_id() const
11419{
11420  return range_tuple_id();
11421}
11422
11423isl::checked::multi_aff multi_aff::reset_range_tuple_id() const
11424{
11425  auto res = isl_multi_aff_reset_range_tuple_id(copy());
11426  return manage(res);
11427}
11428
11429isl::checked::multi_aff multi_aff::scale(isl::checked::multi_val mv) const
11430{
11431  auto res = isl_multi_aff_scale_multi_val(copy(), mv.release());
11432  return manage(res);
11433}
11434
11435isl::checked::multi_aff multi_aff::scale(isl::checked::val v) const
11436{
11437  auto res = isl_multi_aff_scale_val(copy(), v.release());
11438  return manage(res);
11439}
11440
11441isl::checked::multi_aff multi_aff::scale(long v) const
11442{
11443  return this->scale(isl::checked::val(ctx(), v));
11444}
11445
11446isl::checked::multi_aff multi_aff::scale_down(isl::checked::multi_val mv) const
11447{
11448  auto res = isl_multi_aff_scale_down_multi_val(copy(), mv.release());
11449  return manage(res);
11450}
11451
11452isl::checked::multi_aff multi_aff::scale_down(isl::checked::val v) const
11453{
11454  auto res = isl_multi_aff_scale_down_val(copy(), v.release());
11455  return manage(res);
11456}
11457
11458isl::checked::multi_aff multi_aff::scale_down(long v) const
11459{
11460  return this->scale_down(isl::checked::val(ctx(), v));
11461}
11462
11463isl::checked::multi_aff multi_aff::set_at(int pos, isl::checked::aff el) const
11464{
11465  auto res = isl_multi_aff_set_at(copy(), pos, el.release());
11466  return manage(res);
11467}
11468
11469isl::checked::multi_pw_aff multi_aff::set_at(int pos, const isl::checked::pw_aff &el) const
11470{
11471  return isl::checked::pw_multi_aff(*this).set_at(pos, el);
11472}
11473
11474isl::checked::multi_union_pw_aff multi_aff::set_at(int pos, const isl::checked::union_pw_aff &el) const
11475{
11476  return isl::checked::pw_multi_aff(*this).set_at(pos, el);
11477}
11478
11479isl::checked::multi_aff multi_aff::set_range_tuple(isl::checked::id id) const
11480{
11481  auto res = isl_multi_aff_set_range_tuple_id(copy(), id.release());
11482  return manage(res);
11483}
11484
11485isl::checked::multi_aff multi_aff::set_range_tuple(const std::string &id) const
11486{
11487  return this->set_range_tuple(isl::checked::id(ctx(), id));
11488}
11489
11490class size multi_aff::size() const
11491{
11492  auto res = isl_multi_aff_size(get());
11493  return manage(res);
11494}
11495
11496isl::checked::space multi_aff::space() const
11497{
11498  auto res = isl_multi_aff_get_space(get());
11499  return manage(res);
11500}
11501
11502isl::checked::space multi_aff::get_space() const
11503{
11504  return space();
11505}
11506
11507isl::checked::multi_aff multi_aff::sub(isl::checked::multi_aff multi2) const
11508{
11509  auto res = isl_multi_aff_sub(copy(), multi2.release());
11510  return manage(res);
11511}
11512
11513isl::checked::multi_pw_aff multi_aff::sub(const isl::checked::multi_pw_aff &multi2) const
11514{
11515  return isl::checked::pw_multi_aff(*this).sub(multi2);
11516}
11517
11518isl::checked::multi_union_pw_aff multi_aff::sub(const isl::checked::multi_union_pw_aff &multi2) const
11519{
11520  return isl::checked::pw_multi_aff(*this).sub(multi2);
11521}
11522
11523isl::checked::pw_multi_aff multi_aff::sub(const isl::checked::pw_multi_aff &pma2) const
11524{
11525  return isl::checked::pw_multi_aff(*this).sub(pma2);
11526}
11527
11528isl::checked::union_pw_multi_aff multi_aff::sub(const isl::checked::union_pw_multi_aff &upma2) const
11529{
11530  return isl::checked::pw_multi_aff(*this).sub(upma2);
11531}
11532
11533isl::checked::multi_aff multi_aff::sub(const isl::checked::aff &multi2) const
11534{
11535  return this->sub(isl::checked::multi_aff(multi2));
11536}
11537
11538isl::checked::pw_multi_aff multi_aff::subtract_domain(const isl::checked::set &set) const
11539{
11540  return isl::checked::pw_multi_aff(*this).subtract_domain(set);
11541}
11542
11543isl::checked::union_pw_multi_aff multi_aff::subtract_domain(const isl::checked::space &space) const
11544{
11545  return isl::checked::pw_multi_aff(*this).subtract_domain(space);
11546}
11547
11548isl::checked::union_pw_multi_aff multi_aff::subtract_domain(const isl::checked::union_set &uset) const
11549{
11550  return isl::checked::pw_multi_aff(*this).subtract_domain(uset);
11551}
11552
11553isl::checked::pw_multi_aff_list multi_aff::to_list() const
11554{
11555  return isl::checked::pw_multi_aff(*this).to_list();
11556}
11557
11558isl::checked::multi_pw_aff multi_aff::to_multi_pw_aff() const
11559{
11560  auto res = isl_multi_aff_to_multi_pw_aff(copy());
11561  return manage(res);
11562}
11563
11564isl::checked::multi_union_pw_aff multi_aff::to_multi_union_pw_aff() const
11565{
11566  auto res = isl_multi_aff_to_multi_union_pw_aff(copy());
11567  return manage(res);
11568}
11569
11570isl::checked::pw_multi_aff multi_aff::to_pw_multi_aff() const
11571{
11572  auto res = isl_multi_aff_to_pw_multi_aff(copy());
11573  return manage(res);
11574}
11575
11576isl::checked::union_pw_multi_aff multi_aff::to_union_pw_multi_aff() const
11577{
11578  return isl::checked::pw_multi_aff(*this).to_union_pw_multi_aff();
11579}
11580
11581isl::checked::multi_aff multi_aff::unbind_params_insert_domain(isl::checked::multi_id domain) const
11582{
11583  auto res = isl_multi_aff_unbind_params_insert_domain(copy(), domain.release());
11584  return manage(res);
11585}
11586
11587isl::checked::multi_pw_aff multi_aff::union_add(const isl::checked::multi_pw_aff &mpa2) const
11588{
11589  return isl::checked::pw_multi_aff(*this).union_add(mpa2);
11590}
11591
11592isl::checked::multi_union_pw_aff multi_aff::union_add(const isl::checked::multi_union_pw_aff &mupa2) const
11593{
11594  return isl::checked::pw_multi_aff(*this).union_add(mupa2);
11595}
11596
11597isl::checked::pw_multi_aff multi_aff::union_add(const isl::checked::pw_multi_aff &pma2) const
11598{
11599  return isl::checked::pw_multi_aff(*this).union_add(pma2);
11600}
11601
11602isl::checked::union_pw_multi_aff multi_aff::union_add(const isl::checked::union_pw_multi_aff &upma2) const
11603{
11604  return isl::checked::pw_multi_aff(*this).union_add(upma2);
11605}
11606
11607isl::checked::multi_aff multi_aff::zero(isl::checked::space space)
11608{
11609  auto res = isl_multi_aff_zero(space.release());
11610  return manage(res);
11611}
11612
11613inline std::ostream &operator<<(std::ostream &os, const multi_aff &obj)
11614{
11615  char *str = isl_multi_aff_to_str(obj.get());
11616  if (!str) {
11617    os.setstate(std::ios_base::badbit);
11618    return os;
11619  }
11620  os << str;
11621  free(str);
11622  return os;
11623}
11624
11625// implementations for isl::multi_id
11626multi_id manage(__isl_take isl_multi_id *ptr) {
11627  return multi_id(ptr);
11628}
11629multi_id manage_copy(__isl_keep isl_multi_id *ptr) {
11630  ptr = isl_multi_id_copy(ptr);
11631  return multi_id(ptr);
11632}
11633
11634multi_id::multi_id(__isl_take isl_multi_id *ptr)
11635    : ptr(ptr) {}
11636
11637multi_id::multi_id()
11638    : ptr(nullptr) {}
11639
11640multi_id::multi_id(const multi_id &obj)
11641    : ptr(nullptr)
11642{
11643  ptr = obj.copy();
11644}
11645
11646multi_id::multi_id(isl::checked::space space, isl::checked::id_list list)
11647{
11648  auto res = isl_multi_id_from_id_list(space.release(), list.release());
11649  ptr = res;
11650}
11651
11652multi_id::multi_id(isl::checked::ctx ctx, const std::string &str)
11653{
11654  auto res = isl_multi_id_read_from_str(ctx.release(), str.c_str());
11655  ptr = res;
11656}
11657
11658multi_id &multi_id::operator=(multi_id obj) {
11659  std::swap(this->ptr, obj.ptr);
11660  return *this;
11661}
11662
11663multi_id::~multi_id() {
11664  if (ptr)
11665    isl_multi_id_free(ptr);
11666}
11667
11668__isl_give isl_multi_id *multi_id::copy() const & {
11669  return isl_multi_id_copy(ptr);
11670}
11671
11672__isl_keep isl_multi_id *multi_id::get() const {
11673  return ptr;
11674}
11675
11676__isl_give isl_multi_id *multi_id::release() {
11677  isl_multi_id *tmp = ptr;
11678  ptr = nullptr;
11679  return tmp;
11680}
11681
11682bool multi_id::is_null() const {
11683  return ptr == nullptr;
11684}
11685
11686isl::checked::ctx multi_id::ctx() const {
11687  return isl::checked::ctx(isl_multi_id_get_ctx(ptr));
11688}
11689
11690isl::checked::id multi_id::at(int pos) const
11691{
11692  auto res = isl_multi_id_get_at(get(), pos);
11693  return manage(res);
11694}
11695
11696isl::checked::id multi_id::get_at(int pos) const
11697{
11698  return at(pos);
11699}
11700
11701isl::checked::multi_id multi_id::flat_range_product(isl::checked::multi_id multi2) const
11702{
11703  auto res = isl_multi_id_flat_range_product(copy(), multi2.release());
11704  return manage(res);
11705}
11706
11707isl::checked::id_list multi_id::list() const
11708{
11709  auto res = isl_multi_id_get_list(get());
11710  return manage(res);
11711}
11712
11713isl::checked::id_list multi_id::get_list() const
11714{
11715  return list();
11716}
11717
11718boolean multi_id::plain_is_equal(const isl::checked::multi_id &multi2) const
11719{
11720  auto res = isl_multi_id_plain_is_equal(get(), multi2.get());
11721  return manage(res);
11722}
11723
11724isl::checked::multi_id multi_id::range_product(isl::checked::multi_id multi2) const
11725{
11726  auto res = isl_multi_id_range_product(copy(), multi2.release());
11727  return manage(res);
11728}
11729
11730isl::checked::multi_id multi_id::set_at(int pos, isl::checked::id el) const
11731{
11732  auto res = isl_multi_id_set_at(copy(), pos, el.release());
11733  return manage(res);
11734}
11735
11736isl::checked::multi_id multi_id::set_at(int pos, const std::string &el) const
11737{
11738  return this->set_at(pos, isl::checked::id(ctx(), el));
11739}
11740
11741class size multi_id::size() const
11742{
11743  auto res = isl_multi_id_size(get());
11744  return manage(res);
11745}
11746
11747isl::checked::space multi_id::space() const
11748{
11749  auto res = isl_multi_id_get_space(get());
11750  return manage(res);
11751}
11752
11753isl::checked::space multi_id::get_space() const
11754{
11755  return space();
11756}
11757
11758inline std::ostream &operator<<(std::ostream &os, const multi_id &obj)
11759{
11760  char *str = isl_multi_id_to_str(obj.get());
11761  if (!str) {
11762    os.setstate(std::ios_base::badbit);
11763    return os;
11764  }
11765  os << str;
11766  free(str);
11767  return os;
11768}
11769
11770// implementations for isl::multi_pw_aff
11771multi_pw_aff manage(__isl_take isl_multi_pw_aff *ptr) {
11772  return multi_pw_aff(ptr);
11773}
11774multi_pw_aff manage_copy(__isl_keep isl_multi_pw_aff *ptr) {
11775  ptr = isl_multi_pw_aff_copy(ptr);
11776  return multi_pw_aff(ptr);
11777}
11778
11779multi_pw_aff::multi_pw_aff(__isl_take isl_multi_pw_aff *ptr)
11780    : ptr(ptr) {}
11781
11782multi_pw_aff::multi_pw_aff()
11783    : ptr(nullptr) {}
11784
11785multi_pw_aff::multi_pw_aff(const multi_pw_aff &obj)
11786    : ptr(nullptr)
11787{
11788  ptr = obj.copy();
11789}
11790
11791multi_pw_aff::multi_pw_aff(isl::checked::aff aff)
11792{
11793  auto res = isl_multi_pw_aff_from_aff(aff.release());
11794  ptr = res;
11795}
11796
11797multi_pw_aff::multi_pw_aff(isl::checked::multi_aff ma)
11798{
11799  auto res = isl_multi_pw_aff_from_multi_aff(ma.release());
11800  ptr = res;
11801}
11802
11803multi_pw_aff::multi_pw_aff(isl::checked::pw_aff pa)
11804{
11805  auto res = isl_multi_pw_aff_from_pw_aff(pa.release());
11806  ptr = res;
11807}
11808
11809multi_pw_aff::multi_pw_aff(isl::checked::space space, isl::checked::pw_aff_list list)
11810{
11811  auto res = isl_multi_pw_aff_from_pw_aff_list(space.release(), list.release());
11812  ptr = res;
11813}
11814
11815multi_pw_aff::multi_pw_aff(isl::checked::pw_multi_aff pma)
11816{
11817  auto res = isl_multi_pw_aff_from_pw_multi_aff(pma.release());
11818  ptr = res;
11819}
11820
11821multi_pw_aff::multi_pw_aff(isl::checked::ctx ctx, const std::string &str)
11822{
11823  auto res = isl_multi_pw_aff_read_from_str(ctx.release(), str.c_str());
11824  ptr = res;
11825}
11826
11827multi_pw_aff &multi_pw_aff::operator=(multi_pw_aff obj) {
11828  std::swap(this->ptr, obj.ptr);
11829  return *this;
11830}
11831
11832multi_pw_aff::~multi_pw_aff() {
11833  if (ptr)
11834    isl_multi_pw_aff_free(ptr);
11835}
11836
11837__isl_give isl_multi_pw_aff *multi_pw_aff::copy() const & {
11838  return isl_multi_pw_aff_copy(ptr);
11839}
11840
11841__isl_keep isl_multi_pw_aff *multi_pw_aff::get() const {
11842  return ptr;
11843}
11844
11845__isl_give isl_multi_pw_aff *multi_pw_aff::release() {
11846  isl_multi_pw_aff *tmp = ptr;
11847  ptr = nullptr;
11848  return tmp;
11849}
11850
11851bool multi_pw_aff::is_null() const {
11852  return ptr == nullptr;
11853}
11854
11855isl::checked::ctx multi_pw_aff::ctx() const {
11856  return isl::checked::ctx(isl_multi_pw_aff_get_ctx(ptr));
11857}
11858
11859isl::checked::multi_pw_aff multi_pw_aff::add(isl::checked::multi_pw_aff multi2) const
11860{
11861  auto res = isl_multi_pw_aff_add(copy(), multi2.release());
11862  return manage(res);
11863}
11864
11865isl::checked::multi_union_pw_aff multi_pw_aff::add(const isl::checked::multi_union_pw_aff &multi2) const
11866{
11867  return isl::checked::multi_union_pw_aff(*this).add(multi2);
11868}
11869
11870isl::checked::multi_pw_aff multi_pw_aff::add(const isl::checked::aff &multi2) const
11871{
11872  return this->add(isl::checked::multi_pw_aff(multi2));
11873}
11874
11875isl::checked::multi_pw_aff multi_pw_aff::add(const isl::checked::multi_aff &multi2) const
11876{
11877  return this->add(isl::checked::multi_pw_aff(multi2));
11878}
11879
11880isl::checked::multi_pw_aff multi_pw_aff::add(const isl::checked::pw_aff &multi2) const
11881{
11882  return this->add(isl::checked::multi_pw_aff(multi2));
11883}
11884
11885isl::checked::multi_pw_aff multi_pw_aff::add(const isl::checked::pw_multi_aff &multi2) const
11886{
11887  return this->add(isl::checked::multi_pw_aff(multi2));
11888}
11889
11890isl::checked::multi_pw_aff multi_pw_aff::add_constant(isl::checked::multi_val mv) const
11891{
11892  auto res = isl_multi_pw_aff_add_constant_multi_val(copy(), mv.release());
11893  return manage(res);
11894}
11895
11896isl::checked::multi_pw_aff multi_pw_aff::add_constant(isl::checked::val v) const
11897{
11898  auto res = isl_multi_pw_aff_add_constant_val(copy(), v.release());
11899  return manage(res);
11900}
11901
11902isl::checked::multi_pw_aff multi_pw_aff::add_constant(long v) const
11903{
11904  return this->add_constant(isl::checked::val(ctx(), v));
11905}
11906
11907isl::checked::map multi_pw_aff::as_map() const
11908{
11909  auto res = isl_multi_pw_aff_as_map(copy());
11910  return manage(res);
11911}
11912
11913isl::checked::multi_aff multi_pw_aff::as_multi_aff() const
11914{
11915  auto res = isl_multi_pw_aff_as_multi_aff(copy());
11916  return manage(res);
11917}
11918
11919isl::checked::set multi_pw_aff::as_set() const
11920{
11921  auto res = isl_multi_pw_aff_as_set(copy());
11922  return manage(res);
11923}
11924
11925isl::checked::pw_aff multi_pw_aff::at(int pos) const
11926{
11927  auto res = isl_multi_pw_aff_get_at(get(), pos);
11928  return manage(res);
11929}
11930
11931isl::checked::pw_aff multi_pw_aff::get_at(int pos) const
11932{
11933  return at(pos);
11934}
11935
11936isl::checked::set multi_pw_aff::bind(isl::checked::multi_id tuple) const
11937{
11938  auto res = isl_multi_pw_aff_bind(copy(), tuple.release());
11939  return manage(res);
11940}
11941
11942isl::checked::multi_pw_aff multi_pw_aff::bind_domain(isl::checked::multi_id tuple) const
11943{
11944  auto res = isl_multi_pw_aff_bind_domain(copy(), tuple.release());
11945  return manage(res);
11946}
11947
11948isl::checked::multi_pw_aff multi_pw_aff::bind_domain_wrapped_domain(isl::checked::multi_id tuple) const
11949{
11950  auto res = isl_multi_pw_aff_bind_domain_wrapped_domain(copy(), tuple.release());
11951  return manage(res);
11952}
11953
11954isl::checked::multi_pw_aff multi_pw_aff::coalesce() const
11955{
11956  auto res = isl_multi_pw_aff_coalesce(copy());
11957  return manage(res);
11958}
11959
11960isl::checked::set multi_pw_aff::domain() const
11961{
11962  auto res = isl_multi_pw_aff_domain(copy());
11963  return manage(res);
11964}
11965
11966isl::checked::multi_pw_aff multi_pw_aff::domain_reverse() const
11967{
11968  auto res = isl_multi_pw_aff_domain_reverse(copy());
11969  return manage(res);
11970}
11971
11972isl::checked::multi_pw_aff multi_pw_aff::flat_range_product(isl::checked::multi_pw_aff multi2) const
11973{
11974  auto res = isl_multi_pw_aff_flat_range_product(copy(), multi2.release());
11975  return manage(res);
11976}
11977
11978isl::checked::multi_union_pw_aff multi_pw_aff::flat_range_product(const isl::checked::multi_union_pw_aff &multi2) const
11979{
11980  return isl::checked::multi_union_pw_aff(*this).flat_range_product(multi2);
11981}
11982
11983isl::checked::multi_pw_aff multi_pw_aff::flat_range_product(const isl::checked::aff &multi2) const
11984{
11985  return this->flat_range_product(isl::checked::multi_pw_aff(multi2));
11986}
11987
11988isl::checked::multi_pw_aff multi_pw_aff::flat_range_product(const isl::checked::multi_aff &multi2) const
11989{
11990  return this->flat_range_product(isl::checked::multi_pw_aff(multi2));
11991}
11992
11993isl::checked::multi_pw_aff multi_pw_aff::flat_range_product(const isl::checked::pw_aff &multi2) const
11994{
11995  return this->flat_range_product(isl::checked::multi_pw_aff(multi2));
11996}
11997
11998isl::checked::multi_pw_aff multi_pw_aff::flat_range_product(const isl::checked::pw_multi_aff &multi2) const
11999{
12000  return this->flat_range_product(isl::checked::multi_pw_aff(multi2));
12001}
12002
12003isl::checked::multi_pw_aff multi_pw_aff::gist(isl::checked::set set) const
12004{
12005  auto res = isl_multi_pw_aff_gist(copy(), set.release());
12006  return manage(res);
12007}
12008
12009isl::checked::multi_union_pw_aff multi_pw_aff::gist(const isl::checked::union_set &context) const
12010{
12011  return isl::checked::multi_union_pw_aff(*this).gist(context);
12012}
12013
12014isl::checked::multi_pw_aff multi_pw_aff::gist(const isl::checked::basic_set &set) const
12015{
12016  return this->gist(isl::checked::set(set));
12017}
12018
12019isl::checked::multi_pw_aff multi_pw_aff::gist(const isl::checked::point &set) const
12020{
12021  return this->gist(isl::checked::set(set));
12022}
12023
12024isl::checked::multi_pw_aff multi_pw_aff::gist_params(isl::checked::set set) const
12025{
12026  auto res = isl_multi_pw_aff_gist_params(copy(), set.release());
12027  return manage(res);
12028}
12029
12030boolean multi_pw_aff::has_range_tuple_id() const
12031{
12032  auto res = isl_multi_pw_aff_has_range_tuple_id(get());
12033  return manage(res);
12034}
12035
12036isl::checked::multi_pw_aff multi_pw_aff::identity() const
12037{
12038  auto res = isl_multi_pw_aff_identity_multi_pw_aff(copy());
12039  return manage(res);
12040}
12041
12042isl::checked::multi_pw_aff multi_pw_aff::identity_on_domain(isl::checked::space space)
12043{
12044  auto res = isl_multi_pw_aff_identity_on_domain_space(space.release());
12045  return manage(res);
12046}
12047
12048isl::checked::multi_pw_aff multi_pw_aff::insert_domain(isl::checked::space domain) const
12049{
12050  auto res = isl_multi_pw_aff_insert_domain(copy(), domain.release());
12051  return manage(res);
12052}
12053
12054isl::checked::multi_pw_aff multi_pw_aff::intersect_domain(isl::checked::set domain) const
12055{
12056  auto res = isl_multi_pw_aff_intersect_domain(copy(), domain.release());
12057  return manage(res);
12058}
12059
12060isl::checked::multi_union_pw_aff multi_pw_aff::intersect_domain(const isl::checked::union_set &uset) const
12061{
12062  return isl::checked::multi_union_pw_aff(*this).intersect_domain(uset);
12063}
12064
12065isl::checked::multi_pw_aff multi_pw_aff::intersect_domain(const isl::checked::basic_set &domain) const
12066{
12067  return this->intersect_domain(isl::checked::set(domain));
12068}
12069
12070isl::checked::multi_pw_aff multi_pw_aff::intersect_domain(const isl::checked::point &domain) const
12071{
12072  return this->intersect_domain(isl::checked::set(domain));
12073}
12074
12075isl::checked::multi_pw_aff multi_pw_aff::intersect_params(isl::checked::set set) const
12076{
12077  auto res = isl_multi_pw_aff_intersect_params(copy(), set.release());
12078  return manage(res);
12079}
12080
12081boolean multi_pw_aff::involves_nan() const
12082{
12083  auto res = isl_multi_pw_aff_involves_nan(get());
12084  return manage(res);
12085}
12086
12087boolean multi_pw_aff::involves_param(const isl::checked::id &id) const
12088{
12089  auto res = isl_multi_pw_aff_involves_param_id(get(), id.get());
12090  return manage(res);
12091}
12092
12093boolean multi_pw_aff::involves_param(const std::string &id) const
12094{
12095  return this->involves_param(isl::checked::id(ctx(), id));
12096}
12097
12098boolean multi_pw_aff::involves_param(const isl::checked::id_list &list) const
12099{
12100  auto res = isl_multi_pw_aff_involves_param_id_list(get(), list.get());
12101  return manage(res);
12102}
12103
12104boolean multi_pw_aff::isa_multi_aff() const
12105{
12106  auto res = isl_multi_pw_aff_isa_multi_aff(get());
12107  return manage(res);
12108}
12109
12110isl::checked::pw_aff_list multi_pw_aff::list() const
12111{
12112  auto res = isl_multi_pw_aff_get_list(get());
12113  return manage(res);
12114}
12115
12116isl::checked::pw_aff_list multi_pw_aff::get_list() const
12117{
12118  return list();
12119}
12120
12121isl::checked::multi_pw_aff multi_pw_aff::max(isl::checked::multi_pw_aff multi2) const
12122{
12123  auto res = isl_multi_pw_aff_max(copy(), multi2.release());
12124  return manage(res);
12125}
12126
12127isl::checked::multi_val multi_pw_aff::max_multi_val() const
12128{
12129  auto res = isl_multi_pw_aff_max_multi_val(copy());
12130  return manage(res);
12131}
12132
12133isl::checked::multi_pw_aff multi_pw_aff::min(isl::checked::multi_pw_aff multi2) const
12134{
12135  auto res = isl_multi_pw_aff_min(copy(), multi2.release());
12136  return manage(res);
12137}
12138
12139isl::checked::multi_val multi_pw_aff::min_multi_val() const
12140{
12141  auto res = isl_multi_pw_aff_min_multi_val(copy());
12142  return manage(res);
12143}
12144
12145isl::checked::multi_pw_aff multi_pw_aff::neg() const
12146{
12147  auto res = isl_multi_pw_aff_neg(copy());
12148  return manage(res);
12149}
12150
12151boolean multi_pw_aff::plain_is_equal(const isl::checked::multi_pw_aff &multi2) const
12152{
12153  auto res = isl_multi_pw_aff_plain_is_equal(get(), multi2.get());
12154  return manage(res);
12155}
12156
12157boolean multi_pw_aff::plain_is_equal(const isl::checked::multi_union_pw_aff &multi2) const
12158{
12159  return isl::checked::multi_union_pw_aff(*this).plain_is_equal(multi2);
12160}
12161
12162boolean multi_pw_aff::plain_is_equal(const isl::checked::aff &multi2) const
12163{
12164  return this->plain_is_equal(isl::checked::multi_pw_aff(multi2));
12165}
12166
12167boolean multi_pw_aff::plain_is_equal(const isl::checked::multi_aff &multi2) const
12168{
12169  return this->plain_is_equal(isl::checked::multi_pw_aff(multi2));
12170}
12171
12172boolean multi_pw_aff::plain_is_equal(const isl::checked::pw_aff &multi2) const
12173{
12174  return this->plain_is_equal(isl::checked::multi_pw_aff(multi2));
12175}
12176
12177boolean multi_pw_aff::plain_is_equal(const isl::checked::pw_multi_aff &multi2) const
12178{
12179  return this->plain_is_equal(isl::checked::multi_pw_aff(multi2));
12180}
12181
12182isl::checked::multi_pw_aff multi_pw_aff::product(isl::checked::multi_pw_aff multi2) const
12183{
12184  auto res = isl_multi_pw_aff_product(copy(), multi2.release());
12185  return manage(res);
12186}
12187
12188isl::checked::multi_pw_aff multi_pw_aff::pullback(isl::checked::multi_aff ma) const
12189{
12190  auto res = isl_multi_pw_aff_pullback_multi_aff(copy(), ma.release());
12191  return manage(res);
12192}
12193
12194isl::checked::multi_pw_aff multi_pw_aff::pullback(isl::checked::multi_pw_aff mpa2) const
12195{
12196  auto res = isl_multi_pw_aff_pullback_multi_pw_aff(copy(), mpa2.release());
12197  return manage(res);
12198}
12199
12200isl::checked::multi_pw_aff multi_pw_aff::pullback(isl::checked::pw_multi_aff pma) const
12201{
12202  auto res = isl_multi_pw_aff_pullback_pw_multi_aff(copy(), pma.release());
12203  return manage(res);
12204}
12205
12206isl::checked::multi_union_pw_aff multi_pw_aff::pullback(const isl::checked::union_pw_multi_aff &upma) const
12207{
12208  return isl::checked::multi_union_pw_aff(*this).pullback(upma);
12209}
12210
12211isl::checked::multi_pw_aff multi_pw_aff::range_product(isl::checked::multi_pw_aff multi2) const
12212{
12213  auto res = isl_multi_pw_aff_range_product(copy(), multi2.release());
12214  return manage(res);
12215}
12216
12217isl::checked::multi_union_pw_aff multi_pw_aff::range_product(const isl::checked::multi_union_pw_aff &multi2) const
12218{
12219  return isl::checked::multi_union_pw_aff(*this).range_product(multi2);
12220}
12221
12222isl::checked::multi_pw_aff multi_pw_aff::range_product(const isl::checked::aff &multi2) const
12223{
12224  return this->range_product(isl::checked::multi_pw_aff(multi2));
12225}
12226
12227isl::checked::multi_pw_aff multi_pw_aff::range_product(const isl::checked::multi_aff &multi2) const
12228{
12229  return this->range_product(isl::checked::multi_pw_aff(multi2));
12230}
12231
12232isl::checked::multi_pw_aff multi_pw_aff::range_product(const isl::checked::pw_aff &multi2) const
12233{
12234  return this->range_product(isl::checked::multi_pw_aff(multi2));
12235}
12236
12237isl::checked::multi_pw_aff multi_pw_aff::range_product(const isl::checked::pw_multi_aff &multi2) const
12238{
12239  return this->range_product(isl::checked::multi_pw_aff(multi2));
12240}
12241
12242isl::checked::id multi_pw_aff::range_tuple_id() const
12243{
12244  auto res = isl_multi_pw_aff_get_range_tuple_id(get());
12245  return manage(res);
12246}
12247
12248isl::checked::id multi_pw_aff::get_range_tuple_id() const
12249{
12250  return range_tuple_id();
12251}
12252
12253isl::checked::multi_pw_aff multi_pw_aff::reset_range_tuple_id() const
12254{
12255  auto res = isl_multi_pw_aff_reset_range_tuple_id(copy());
12256  return manage(res);
12257}
12258
12259isl::checked::multi_pw_aff multi_pw_aff::scale(isl::checked::multi_val mv) const
12260{
12261  auto res = isl_multi_pw_aff_scale_multi_val(copy(), mv.release());
12262  return manage(res);
12263}
12264
12265isl::checked::multi_pw_aff multi_pw_aff::scale(isl::checked::val v) const
12266{
12267  auto res = isl_multi_pw_aff_scale_val(copy(), v.release());
12268  return manage(res);
12269}
12270
12271isl::checked::multi_pw_aff multi_pw_aff::scale(long v) const
12272{
12273  return this->scale(isl::checked::val(ctx(), v));
12274}
12275
12276isl::checked::multi_pw_aff multi_pw_aff::scale_down(isl::checked::multi_val mv) const
12277{
12278  auto res = isl_multi_pw_aff_scale_down_multi_val(copy(), mv.release());
12279  return manage(res);
12280}
12281
12282isl::checked::multi_pw_aff multi_pw_aff::scale_down(isl::checked::val v) const
12283{
12284  auto res = isl_multi_pw_aff_scale_down_val(copy(), v.release());
12285  return manage(res);
12286}
12287
12288isl::checked::multi_pw_aff multi_pw_aff::scale_down(long v) const
12289{
12290  return this->scale_down(isl::checked::val(ctx(), v));
12291}
12292
12293isl::checked::multi_pw_aff multi_pw_aff::set_at(int pos, isl::checked::pw_aff el) const
12294{
12295  auto res = isl_multi_pw_aff_set_at(copy(), pos, el.release());
12296  return manage(res);
12297}
12298
12299isl::checked::multi_union_pw_aff multi_pw_aff::set_at(int pos, const isl::checked::union_pw_aff &el) const
12300{
12301  return isl::checked::multi_union_pw_aff(*this).set_at(pos, el);
12302}
12303
12304isl::checked::multi_pw_aff multi_pw_aff::set_range_tuple(isl::checked::id id) const
12305{
12306  auto res = isl_multi_pw_aff_set_range_tuple_id(copy(), id.release());
12307  return manage(res);
12308}
12309
12310isl::checked::multi_pw_aff multi_pw_aff::set_range_tuple(const std::string &id) const
12311{
12312  return this->set_range_tuple(isl::checked::id(ctx(), id));
12313}
12314
12315class size multi_pw_aff::size() const
12316{
12317  auto res = isl_multi_pw_aff_size(get());
12318  return manage(res);
12319}
12320
12321isl::checked::space multi_pw_aff::space() const
12322{
12323  auto res = isl_multi_pw_aff_get_space(get());
12324  return manage(res);
12325}
12326
12327isl::checked::space multi_pw_aff::get_space() const
12328{
12329  return space();
12330}
12331
12332isl::checked::multi_pw_aff multi_pw_aff::sub(isl::checked::multi_pw_aff multi2) const
12333{
12334  auto res = isl_multi_pw_aff_sub(copy(), multi2.release());
12335  return manage(res);
12336}
12337
12338isl::checked::multi_union_pw_aff multi_pw_aff::sub(const isl::checked::multi_union_pw_aff &multi2) const
12339{
12340  return isl::checked::multi_union_pw_aff(*this).sub(multi2);
12341}
12342
12343isl::checked::multi_pw_aff multi_pw_aff::sub(const isl::checked::aff &multi2) const
12344{
12345  return this->sub(isl::checked::multi_pw_aff(multi2));
12346}
12347
12348isl::checked::multi_pw_aff multi_pw_aff::sub(const isl::checked::multi_aff &multi2) const
12349{
12350  return this->sub(isl::checked::multi_pw_aff(multi2));
12351}
12352
12353isl::checked::multi_pw_aff multi_pw_aff::sub(const isl::checked::pw_aff &multi2) const
12354{
12355  return this->sub(isl::checked::multi_pw_aff(multi2));
12356}
12357
12358isl::checked::multi_pw_aff multi_pw_aff::sub(const isl::checked::pw_multi_aff &multi2) const
12359{
12360  return this->sub(isl::checked::multi_pw_aff(multi2));
12361}
12362
12363isl::checked::multi_pw_aff multi_pw_aff::unbind_params_insert_domain(isl::checked::multi_id domain) const
12364{
12365  auto res = isl_multi_pw_aff_unbind_params_insert_domain(copy(), domain.release());
12366  return manage(res);
12367}
12368
12369isl::checked::multi_pw_aff multi_pw_aff::union_add(isl::checked::multi_pw_aff mpa2) const
12370{
12371  auto res = isl_multi_pw_aff_union_add(copy(), mpa2.release());
12372  return manage(res);
12373}
12374
12375isl::checked::multi_union_pw_aff multi_pw_aff::union_add(const isl::checked::multi_union_pw_aff &mupa2) const
12376{
12377  return isl::checked::multi_union_pw_aff(*this).union_add(mupa2);
12378}
12379
12380isl::checked::multi_pw_aff multi_pw_aff::union_add(const isl::checked::aff &mpa2) const
12381{
12382  return this->union_add(isl::checked::multi_pw_aff(mpa2));
12383}
12384
12385isl::checked::multi_pw_aff multi_pw_aff::union_add(const isl::checked::multi_aff &mpa2) const
12386{
12387  return this->union_add(isl::checked::multi_pw_aff(mpa2));
12388}
12389
12390isl::checked::multi_pw_aff multi_pw_aff::union_add(const isl::checked::pw_aff &mpa2) const
12391{
12392  return this->union_add(isl::checked::multi_pw_aff(mpa2));
12393}
12394
12395isl::checked::multi_pw_aff multi_pw_aff::union_add(const isl::checked::pw_multi_aff &mpa2) const
12396{
12397  return this->union_add(isl::checked::multi_pw_aff(mpa2));
12398}
12399
12400isl::checked::multi_pw_aff multi_pw_aff::zero(isl::checked::space space)
12401{
12402  auto res = isl_multi_pw_aff_zero(space.release());
12403  return manage(res);
12404}
12405
12406inline std::ostream &operator<<(std::ostream &os, const multi_pw_aff &obj)
12407{
12408  char *str = isl_multi_pw_aff_to_str(obj.get());
12409  if (!str) {
12410    os.setstate(std::ios_base::badbit);
12411    return os;
12412  }
12413  os << str;
12414  free(str);
12415  return os;
12416}
12417
12418// implementations for isl::multi_union_pw_aff
12419multi_union_pw_aff manage(__isl_take isl_multi_union_pw_aff *ptr) {
12420  return multi_union_pw_aff(ptr);
12421}
12422multi_union_pw_aff manage_copy(__isl_keep isl_multi_union_pw_aff *ptr) {
12423  ptr = isl_multi_union_pw_aff_copy(ptr);
12424  return multi_union_pw_aff(ptr);
12425}
12426
12427multi_union_pw_aff::multi_union_pw_aff(__isl_take isl_multi_union_pw_aff *ptr)
12428    : ptr(ptr) {}
12429
12430multi_union_pw_aff::multi_union_pw_aff()
12431    : ptr(nullptr) {}
12432
12433multi_union_pw_aff::multi_union_pw_aff(const multi_union_pw_aff &obj)
12434    : ptr(nullptr)
12435{
12436  ptr = obj.copy();
12437}
12438
12439multi_union_pw_aff::multi_union_pw_aff(isl::checked::multi_pw_aff mpa)
12440{
12441  auto res = isl_multi_union_pw_aff_from_multi_pw_aff(mpa.release());
12442  ptr = res;
12443}
12444
12445multi_union_pw_aff::multi_union_pw_aff(isl::checked::union_pw_aff upa)
12446{
12447  auto res = isl_multi_union_pw_aff_from_union_pw_aff(upa.release());
12448  ptr = res;
12449}
12450
12451multi_union_pw_aff::multi_union_pw_aff(isl::checked::space space, isl::checked::union_pw_aff_list list)
12452{
12453  auto res = isl_multi_union_pw_aff_from_union_pw_aff_list(space.release(), list.release());
12454  ptr = res;
12455}
12456
12457multi_union_pw_aff::multi_union_pw_aff(isl::checked::ctx ctx, const std::string &str)
12458{
12459  auto res = isl_multi_union_pw_aff_read_from_str(ctx.release(), str.c_str());
12460  ptr = res;
12461}
12462
12463multi_union_pw_aff &multi_union_pw_aff::operator=(multi_union_pw_aff obj) {
12464  std::swap(this->ptr, obj.ptr);
12465  return *this;
12466}
12467
12468multi_union_pw_aff::~multi_union_pw_aff() {
12469  if (ptr)
12470    isl_multi_union_pw_aff_free(ptr);
12471}
12472
12473__isl_give isl_multi_union_pw_aff *multi_union_pw_aff::copy() const & {
12474  return isl_multi_union_pw_aff_copy(ptr);
12475}
12476
12477__isl_keep isl_multi_union_pw_aff *multi_union_pw_aff::get() const {
12478  return ptr;
12479}
12480
12481__isl_give isl_multi_union_pw_aff *multi_union_pw_aff::release() {
12482  isl_multi_union_pw_aff *tmp = ptr;
12483  ptr = nullptr;
12484  return tmp;
12485}
12486
12487bool multi_union_pw_aff::is_null() const {
12488  return ptr == nullptr;
12489}
12490
12491isl::checked::ctx multi_union_pw_aff::ctx() const {
12492  return isl::checked::ctx(isl_multi_union_pw_aff_get_ctx(ptr));
12493}
12494
12495isl::checked::multi_union_pw_aff multi_union_pw_aff::add(isl::checked::multi_union_pw_aff multi2) const
12496{
12497  auto res = isl_multi_union_pw_aff_add(copy(), multi2.release());
12498  return manage(res);
12499}
12500
12501isl::checked::union_pw_aff multi_union_pw_aff::at(int pos) const
12502{
12503  auto res = isl_multi_union_pw_aff_get_at(get(), pos);
12504  return manage(res);
12505}
12506
12507isl::checked::union_pw_aff multi_union_pw_aff::get_at(int pos) const
12508{
12509  return at(pos);
12510}
12511
12512isl::checked::union_set multi_union_pw_aff::bind(isl::checked::multi_id tuple) const
12513{
12514  auto res = isl_multi_union_pw_aff_bind(copy(), tuple.release());
12515  return manage(res);
12516}
12517
12518isl::checked::multi_union_pw_aff multi_union_pw_aff::coalesce() const
12519{
12520  auto res = isl_multi_union_pw_aff_coalesce(copy());
12521  return manage(res);
12522}
12523
12524isl::checked::union_set multi_union_pw_aff::domain() const
12525{
12526  auto res = isl_multi_union_pw_aff_domain(copy());
12527  return manage(res);
12528}
12529
12530isl::checked::multi_union_pw_aff multi_union_pw_aff::flat_range_product(isl::checked::multi_union_pw_aff multi2) const
12531{
12532  auto res = isl_multi_union_pw_aff_flat_range_product(copy(), multi2.release());
12533  return manage(res);
12534}
12535
12536isl::checked::multi_union_pw_aff multi_union_pw_aff::gist(isl::checked::union_set context) const
12537{
12538  auto res = isl_multi_union_pw_aff_gist(copy(), context.release());
12539  return manage(res);
12540}
12541
12542isl::checked::multi_union_pw_aff multi_union_pw_aff::gist_params(isl::checked::set context) const
12543{
12544  auto res = isl_multi_union_pw_aff_gist_params(copy(), context.release());
12545  return manage(res);
12546}
12547
12548boolean multi_union_pw_aff::has_range_tuple_id() const
12549{
12550  auto res = isl_multi_union_pw_aff_has_range_tuple_id(get());
12551  return manage(res);
12552}
12553
12554isl::checked::multi_union_pw_aff multi_union_pw_aff::intersect_domain(isl::checked::union_set uset) const
12555{
12556  auto res = isl_multi_union_pw_aff_intersect_domain(copy(), uset.release());
12557  return manage(res);
12558}
12559
12560isl::checked::multi_union_pw_aff multi_union_pw_aff::intersect_params(isl::checked::set params) const
12561{
12562  auto res = isl_multi_union_pw_aff_intersect_params(copy(), params.release());
12563  return manage(res);
12564}
12565
12566boolean multi_union_pw_aff::involves_nan() const
12567{
12568  auto res = isl_multi_union_pw_aff_involves_nan(get());
12569  return manage(res);
12570}
12571
12572isl::checked::union_pw_aff_list multi_union_pw_aff::list() const
12573{
12574  auto res = isl_multi_union_pw_aff_get_list(get());
12575  return manage(res);
12576}
12577
12578isl::checked::union_pw_aff_list multi_union_pw_aff::get_list() const
12579{
12580  return list();
12581}
12582
12583isl::checked::multi_union_pw_aff multi_union_pw_aff::neg() const
12584{
12585  auto res = isl_multi_union_pw_aff_neg(copy());
12586  return manage(res);
12587}
12588
12589boolean multi_union_pw_aff::plain_is_equal(const isl::checked::multi_union_pw_aff &multi2) const
12590{
12591  auto res = isl_multi_union_pw_aff_plain_is_equal(get(), multi2.get());
12592  return manage(res);
12593}
12594
12595isl::checked::multi_union_pw_aff multi_union_pw_aff::pullback(isl::checked::union_pw_multi_aff upma) const
12596{
12597  auto res = isl_multi_union_pw_aff_pullback_union_pw_multi_aff(copy(), upma.release());
12598  return manage(res);
12599}
12600
12601isl::checked::multi_union_pw_aff multi_union_pw_aff::range_product(isl::checked::multi_union_pw_aff multi2) const
12602{
12603  auto res = isl_multi_union_pw_aff_range_product(copy(), multi2.release());
12604  return manage(res);
12605}
12606
12607isl::checked::id multi_union_pw_aff::range_tuple_id() const
12608{
12609  auto res = isl_multi_union_pw_aff_get_range_tuple_id(get());
12610  return manage(res);
12611}
12612
12613isl::checked::id multi_union_pw_aff::get_range_tuple_id() const
12614{
12615  return range_tuple_id();
12616}
12617
12618isl::checked::multi_union_pw_aff multi_union_pw_aff::reset_range_tuple_id() const
12619{
12620  auto res = isl_multi_union_pw_aff_reset_range_tuple_id(copy());
12621  return manage(res);
12622}
12623
12624isl::checked::multi_union_pw_aff multi_union_pw_aff::scale(isl::checked::multi_val mv) const
12625{
12626  auto res = isl_multi_union_pw_aff_scale_multi_val(copy(), mv.release());
12627  return manage(res);
12628}
12629
12630isl::checked::multi_union_pw_aff multi_union_pw_aff::scale(isl::checked::val v) const
12631{
12632  auto res = isl_multi_union_pw_aff_scale_val(copy(), v.release());
12633  return manage(res);
12634}
12635
12636isl::checked::multi_union_pw_aff multi_union_pw_aff::scale(long v) const
12637{
12638  return this->scale(isl::checked::val(ctx(), v));
12639}
12640
12641isl::checked::multi_union_pw_aff multi_union_pw_aff::scale_down(isl::checked::multi_val mv) const
12642{
12643  auto res = isl_multi_union_pw_aff_scale_down_multi_val(copy(), mv.release());
12644  return manage(res);
12645}
12646
12647isl::checked::multi_union_pw_aff multi_union_pw_aff::scale_down(isl::checked::val v) const
12648{
12649  auto res = isl_multi_union_pw_aff_scale_down_val(copy(), v.release());
12650  return manage(res);
12651}
12652
12653isl::checked::multi_union_pw_aff multi_union_pw_aff::scale_down(long v) const
12654{
12655  return this->scale_down(isl::checked::val(ctx(), v));
12656}
12657
12658isl::checked::multi_union_pw_aff multi_union_pw_aff::set_at(int pos, isl::checked::union_pw_aff el) const
12659{
12660  auto res = isl_multi_union_pw_aff_set_at(copy(), pos, el.release());
12661  return manage(res);
12662}
12663
12664isl::checked::multi_union_pw_aff multi_union_pw_aff::set_range_tuple(isl::checked::id id) const
12665{
12666  auto res = isl_multi_union_pw_aff_set_range_tuple_id(copy(), id.release());
12667  return manage(res);
12668}
12669
12670isl::checked::multi_union_pw_aff multi_union_pw_aff::set_range_tuple(const std::string &id) const
12671{
12672  return this->set_range_tuple(isl::checked::id(ctx(), id));
12673}
12674
12675class size multi_union_pw_aff::size() const
12676{
12677  auto res = isl_multi_union_pw_aff_size(get());
12678  return manage(res);
12679}
12680
12681isl::checked::space multi_union_pw_aff::space() const
12682{
12683  auto res = isl_multi_union_pw_aff_get_space(get());
12684  return manage(res);
12685}
12686
12687isl::checked::space multi_union_pw_aff::get_space() const
12688{
12689  return space();
12690}
12691
12692isl::checked::multi_union_pw_aff multi_union_pw_aff::sub(isl::checked::multi_union_pw_aff multi2) const
12693{
12694  auto res = isl_multi_union_pw_aff_sub(copy(), multi2.release());
12695  return manage(res);
12696}
12697
12698isl::checked::multi_union_pw_aff multi_union_pw_aff::union_add(isl::checked::multi_union_pw_aff mupa2) const
12699{
12700  auto res = isl_multi_union_pw_aff_union_add(copy(), mupa2.release());
12701  return manage(res);
12702}
12703
12704isl::checked::multi_union_pw_aff multi_union_pw_aff::zero(isl::checked::space space)
12705{
12706  auto res = isl_multi_union_pw_aff_zero(space.release());
12707  return manage(res);
12708}
12709
12710inline std::ostream &operator<<(std::ostream &os, const multi_union_pw_aff &obj)
12711{
12712  char *str = isl_multi_union_pw_aff_to_str(obj.get());
12713  if (!str) {
12714    os.setstate(std::ios_base::badbit);
12715    return os;
12716  }
12717  os << str;
12718  free(str);
12719  return os;
12720}
12721
12722// implementations for isl::multi_val
12723multi_val manage(__isl_take isl_multi_val *ptr) {
12724  return multi_val(ptr);
12725}
12726multi_val manage_copy(__isl_keep isl_multi_val *ptr) {
12727  ptr = isl_multi_val_copy(ptr);
12728  return multi_val(ptr);
12729}
12730
12731multi_val::multi_val(__isl_take isl_multi_val *ptr)
12732    : ptr(ptr) {}
12733
12734multi_val::multi_val()
12735    : ptr(nullptr) {}
12736
12737multi_val::multi_val(const multi_val &obj)
12738    : ptr(nullptr)
12739{
12740  ptr = obj.copy();
12741}
12742
12743multi_val::multi_val(isl::checked::space space, isl::checked::val_list list)
12744{
12745  auto res = isl_multi_val_from_val_list(space.release(), list.release());
12746  ptr = res;
12747}
12748
12749multi_val::multi_val(isl::checked::ctx ctx, const std::string &str)
12750{
12751  auto res = isl_multi_val_read_from_str(ctx.release(), str.c_str());
12752  ptr = res;
12753}
12754
12755multi_val &multi_val::operator=(multi_val obj) {
12756  std::swap(this->ptr, obj.ptr);
12757  return *this;
12758}
12759
12760multi_val::~multi_val() {
12761  if (ptr)
12762    isl_multi_val_free(ptr);
12763}
12764
12765__isl_give isl_multi_val *multi_val::copy() const & {
12766  return isl_multi_val_copy(ptr);
12767}
12768
12769__isl_keep isl_multi_val *multi_val::get() const {
12770  return ptr;
12771}
12772
12773__isl_give isl_multi_val *multi_val::release() {
12774  isl_multi_val *tmp = ptr;
12775  ptr = nullptr;
12776  return tmp;
12777}
12778
12779bool multi_val::is_null() const {
12780  return ptr == nullptr;
12781}
12782
12783isl::checked::ctx multi_val::ctx() const {
12784  return isl::checked::ctx(isl_multi_val_get_ctx(ptr));
12785}
12786
12787isl::checked::multi_val multi_val::add(isl::checked::multi_val multi2) const
12788{
12789  auto res = isl_multi_val_add(copy(), multi2.release());
12790  return manage(res);
12791}
12792
12793isl::checked::multi_val multi_val::add(isl::checked::val v) const
12794{
12795  auto res = isl_multi_val_add_val(copy(), v.release());
12796  return manage(res);
12797}
12798
12799isl::checked::multi_val multi_val::add(long v) const
12800{
12801  return this->add(isl::checked::val(ctx(), v));
12802}
12803
12804isl::checked::val multi_val::at(int pos) const
12805{
12806  auto res = isl_multi_val_get_at(get(), pos);
12807  return manage(res);
12808}
12809
12810isl::checked::val multi_val::get_at(int pos) const
12811{
12812  return at(pos);
12813}
12814
12815isl::checked::multi_val multi_val::flat_range_product(isl::checked::multi_val multi2) const
12816{
12817  auto res = isl_multi_val_flat_range_product(copy(), multi2.release());
12818  return manage(res);
12819}
12820
12821boolean multi_val::has_range_tuple_id() const
12822{
12823  auto res = isl_multi_val_has_range_tuple_id(get());
12824  return manage(res);
12825}
12826
12827boolean multi_val::involves_nan() const
12828{
12829  auto res = isl_multi_val_involves_nan(get());
12830  return manage(res);
12831}
12832
12833isl::checked::val_list multi_val::list() const
12834{
12835  auto res = isl_multi_val_get_list(get());
12836  return manage(res);
12837}
12838
12839isl::checked::val_list multi_val::get_list() const
12840{
12841  return list();
12842}
12843
12844isl::checked::multi_val multi_val::max(isl::checked::multi_val multi2) const
12845{
12846  auto res = isl_multi_val_max(copy(), multi2.release());
12847  return manage(res);
12848}
12849
12850isl::checked::multi_val multi_val::min(isl::checked::multi_val multi2) const
12851{
12852  auto res = isl_multi_val_min(copy(), multi2.release());
12853  return manage(res);
12854}
12855
12856isl::checked::multi_val multi_val::neg() const
12857{
12858  auto res = isl_multi_val_neg(copy());
12859  return manage(res);
12860}
12861
12862boolean multi_val::plain_is_equal(const isl::checked::multi_val &multi2) const
12863{
12864  auto res = isl_multi_val_plain_is_equal(get(), multi2.get());
12865  return manage(res);
12866}
12867
12868isl::checked::multi_val multi_val::product(isl::checked::multi_val multi2) const
12869{
12870  auto res = isl_multi_val_product(copy(), multi2.release());
12871  return manage(res);
12872}
12873
12874isl::checked::multi_val multi_val::range_product(isl::checked::multi_val multi2) const
12875{
12876  auto res = isl_multi_val_range_product(copy(), multi2.release());
12877  return manage(res);
12878}
12879
12880isl::checked::id multi_val::range_tuple_id() const
12881{
12882  auto res = isl_multi_val_get_range_tuple_id(get());
12883  return manage(res);
12884}
12885
12886isl::checked::id multi_val::get_range_tuple_id() const
12887{
12888  return range_tuple_id();
12889}
12890
12891isl::checked::multi_val multi_val::reset_range_tuple_id() const
12892{
12893  auto res = isl_multi_val_reset_range_tuple_id(copy());
12894  return manage(res);
12895}
12896
12897isl::checked::multi_val multi_val::scale(isl::checked::multi_val mv) const
12898{
12899  auto res = isl_multi_val_scale_multi_val(copy(), mv.release());
12900  return manage(res);
12901}
12902
12903isl::checked::multi_val multi_val::scale(isl::checked::val v) const
12904{
12905  auto res = isl_multi_val_scale_val(copy(), v.release());
12906  return manage(res);
12907}
12908
12909isl::checked::multi_val multi_val::scale(long v) const
12910{
12911  return this->scale(isl::checked::val(ctx(), v));
12912}
12913
12914isl::checked::multi_val multi_val::scale_down(isl::checked::multi_val mv) const
12915{
12916  auto res = isl_multi_val_scale_down_multi_val(copy(), mv.release());
12917  return manage(res);
12918}
12919
12920isl::checked::multi_val multi_val::scale_down(isl::checked::val v) const
12921{
12922  auto res = isl_multi_val_scale_down_val(copy(), v.release());
12923  return manage(res);
12924}
12925
12926isl::checked::multi_val multi_val::scale_down(long v) const
12927{
12928  return this->scale_down(isl::checked::val(ctx(), v));
12929}
12930
12931isl::checked::multi_val multi_val::set_at(int pos, isl::checked::val el) const
12932{
12933  auto res = isl_multi_val_set_at(copy(), pos, el.release());
12934  return manage(res);
12935}
12936
12937isl::checked::multi_val multi_val::set_at(int pos, long el) const
12938{
12939  return this->set_at(pos, isl::checked::val(ctx(), el));
12940}
12941
12942isl::checked::multi_val multi_val::set_range_tuple(isl::checked::id id) const
12943{
12944  auto res = isl_multi_val_set_range_tuple_id(copy(), id.release());
12945  return manage(res);
12946}
12947
12948isl::checked::multi_val multi_val::set_range_tuple(const std::string &id) const
12949{
12950  return this->set_range_tuple(isl::checked::id(ctx(), id));
12951}
12952
12953class size multi_val::size() const
12954{
12955  auto res = isl_multi_val_size(get());
12956  return manage(res);
12957}
12958
12959isl::checked::space multi_val::space() const
12960{
12961  auto res = isl_multi_val_get_space(get());
12962  return manage(res);
12963}
12964
12965isl::checked::space multi_val::get_space() const
12966{
12967  return space();
12968}
12969
12970isl::checked::multi_val multi_val::sub(isl::checked::multi_val multi2) const
12971{
12972  auto res = isl_multi_val_sub(copy(), multi2.release());
12973  return manage(res);
12974}
12975
12976isl::checked::multi_val multi_val::zero(isl::checked::space space)
12977{
12978  auto res = isl_multi_val_zero(space.release());
12979  return manage(res);
12980}
12981
12982inline std::ostream &operator<<(std::ostream &os, const multi_val &obj)
12983{
12984  char *str = isl_multi_val_to_str(obj.get());
12985  if (!str) {
12986    os.setstate(std::ios_base::badbit);
12987    return os;
12988  }
12989  os << str;
12990  free(str);
12991  return os;
12992}
12993
12994// implementations for isl::point
12995point manage(__isl_take isl_point *ptr) {
12996  return point(ptr);
12997}
12998point manage_copy(__isl_keep isl_point *ptr) {
12999  ptr = isl_point_copy(ptr);
13000  return point(ptr);
13001}
13002
13003point::point(__isl_take isl_point *ptr)
13004    : ptr(ptr) {}
13005
13006point::point()
13007    : ptr(nullptr) {}
13008
13009point::point(const point &obj)
13010    : ptr(nullptr)
13011{
13012  ptr = obj.copy();
13013}
13014
13015point &point::operator=(point obj) {
13016  std::swap(this->ptr, obj.ptr);
13017  return *this;
13018}
13019
13020point::~point() {
13021  if (ptr)
13022    isl_point_free(ptr);
13023}
13024
13025__isl_give isl_point *point::copy() const & {
13026  return isl_point_copy(ptr);
13027}
13028
13029__isl_keep isl_point *point::get() const {
13030  return ptr;
13031}
13032
13033__isl_give isl_point *point::release() {
13034  isl_point *tmp = ptr;
13035  ptr = nullptr;
13036  return tmp;
13037}
13038
13039bool point::is_null() const {
13040  return ptr == nullptr;
13041}
13042
13043isl::checked::ctx point::ctx() const {
13044  return isl::checked::ctx(isl_point_get_ctx(ptr));
13045}
13046
13047isl::checked::basic_set point::affine_hull() const
13048{
13049  return isl::checked::basic_set(*this).affine_hull();
13050}
13051
13052isl::checked::basic_set point::apply(const isl::checked::basic_map &bmap) const
13053{
13054  return isl::checked::basic_set(*this).apply(bmap);
13055}
13056
13057isl::checked::set point::apply(const isl::checked::map &map) const
13058{
13059  return isl::checked::basic_set(*this).apply(map);
13060}
13061
13062isl::checked::union_set point::apply(const isl::checked::union_map &umap) const
13063{
13064  return isl::checked::basic_set(*this).apply(umap);
13065}
13066
13067isl::checked::pw_multi_aff point::as_pw_multi_aff() const
13068{
13069  return isl::checked::basic_set(*this).as_pw_multi_aff();
13070}
13071
13072isl::checked::set point::as_set() const
13073{
13074  return isl::checked::basic_set(*this).as_set();
13075}
13076
13077isl::checked::set point::bind(const isl::checked::multi_id &tuple) const
13078{
13079  return isl::checked::basic_set(*this).bind(tuple);
13080}
13081
13082isl::checked::set point::coalesce() const
13083{
13084  return isl::checked::basic_set(*this).coalesce();
13085}
13086
13087isl::checked::set point::complement() const
13088{
13089  return isl::checked::basic_set(*this).complement();
13090}
13091
13092isl::checked::union_set point::compute_divs() const
13093{
13094  return isl::checked::basic_set(*this).compute_divs();
13095}
13096
13097isl::checked::basic_set point::detect_equalities() const
13098{
13099  return isl::checked::basic_set(*this).detect_equalities();
13100}
13101
13102isl::checked::val point::dim_max_val(int pos) const
13103{
13104  return isl::checked::basic_set(*this).dim_max_val(pos);
13105}
13106
13107isl::checked::val point::dim_min_val(int pos) const
13108{
13109  return isl::checked::basic_set(*this).dim_min_val(pos);
13110}
13111
13112isl::checked::set point::drop_unused_params() const
13113{
13114  return isl::checked::basic_set(*this).drop_unused_params();
13115}
13116
13117boolean point::every_set(const std::function<boolean(isl::checked::set)> &test) const
13118{
13119  return isl::checked::basic_set(*this).every_set(test);
13120}
13121
13122isl::checked::set point::extract_set(const isl::checked::space &space) const
13123{
13124  return isl::checked::basic_set(*this).extract_set(space);
13125}
13126
13127isl::checked::basic_set point::flatten() const
13128{
13129  return isl::checked::basic_set(*this).flatten();
13130}
13131
13132stat point::foreach_basic_set(const std::function<stat(isl::checked::basic_set)> &fn) const
13133{
13134  return isl::checked::basic_set(*this).foreach_basic_set(fn);
13135}
13136
13137stat point::foreach_point(const std::function<stat(isl::checked::point)> &fn) const
13138{
13139  return isl::checked::basic_set(*this).foreach_point(fn);
13140}
13141
13142stat point::foreach_set(const std::function<stat(isl::checked::set)> &fn) const
13143{
13144  return isl::checked::basic_set(*this).foreach_set(fn);
13145}
13146
13147isl::checked::basic_set point::gist(const isl::checked::basic_set &context) const
13148{
13149  return isl::checked::basic_set(*this).gist(context);
13150}
13151
13152isl::checked::set point::gist(const isl::checked::set &context) const
13153{
13154  return isl::checked::basic_set(*this).gist(context);
13155}
13156
13157isl::checked::union_set point::gist(const isl::checked::union_set &context) const
13158{
13159  return isl::checked::basic_set(*this).gist(context);
13160}
13161
13162isl::checked::set point::gist_params(const isl::checked::set &context) const
13163{
13164  return isl::checked::basic_set(*this).gist_params(context);
13165}
13166
13167isl::checked::map point::identity() const
13168{
13169  return isl::checked::basic_set(*this).identity();
13170}
13171
13172isl::checked::pw_aff point::indicator_function() const
13173{
13174  return isl::checked::basic_set(*this).indicator_function();
13175}
13176
13177isl::checked::map point::insert_domain(const isl::checked::space &domain) const
13178{
13179  return isl::checked::basic_set(*this).insert_domain(domain);
13180}
13181
13182isl::checked::basic_set point::intersect(const isl::checked::basic_set &bset2) const
13183{
13184  return isl::checked::basic_set(*this).intersect(bset2);
13185}
13186
13187isl::checked::set point::intersect(const isl::checked::set &set2) const
13188{
13189  return isl::checked::basic_set(*this).intersect(set2);
13190}
13191
13192isl::checked::union_set point::intersect(const isl::checked::union_set &uset2) const
13193{
13194  return isl::checked::basic_set(*this).intersect(uset2);
13195}
13196
13197isl::checked::basic_set point::intersect_params(const isl::checked::basic_set &bset2) const
13198{
13199  return isl::checked::basic_set(*this).intersect_params(bset2);
13200}
13201
13202isl::checked::set point::intersect_params(const isl::checked::set &params) const
13203{
13204  return isl::checked::basic_set(*this).intersect_params(params);
13205}
13206
13207boolean point::involves_locals() const
13208{
13209  return isl::checked::basic_set(*this).involves_locals();
13210}
13211
13212boolean point::is_disjoint(const isl::checked::set &set2) const
13213{
13214  return isl::checked::basic_set(*this).is_disjoint(set2);
13215}
13216
13217boolean point::is_disjoint(const isl::checked::union_set &uset2) const
13218{
13219  return isl::checked::basic_set(*this).is_disjoint(uset2);
13220}
13221
13222boolean point::is_empty() const
13223{
13224  return isl::checked::basic_set(*this).is_empty();
13225}
13226
13227boolean point::is_equal(const isl::checked::basic_set &bset2) const
13228{
13229  return isl::checked::basic_set(*this).is_equal(bset2);
13230}
13231
13232boolean point::is_equal(const isl::checked::set &set2) const
13233{
13234  return isl::checked::basic_set(*this).is_equal(set2);
13235}
13236
13237boolean point::is_equal(const isl::checked::union_set &uset2) const
13238{
13239  return isl::checked::basic_set(*this).is_equal(uset2);
13240}
13241
13242boolean point::is_singleton() const
13243{
13244  return isl::checked::basic_set(*this).is_singleton();
13245}
13246
13247boolean point::is_strict_subset(const isl::checked::set &set2) const
13248{
13249  return isl::checked::basic_set(*this).is_strict_subset(set2);
13250}
13251
13252boolean point::is_strict_subset(const isl::checked::union_set &uset2) const
13253{
13254  return isl::checked::basic_set(*this).is_strict_subset(uset2);
13255}
13256
13257boolean point::is_subset(const isl::checked::basic_set &bset2) const
13258{
13259  return isl::checked::basic_set(*this).is_subset(bset2);
13260}
13261
13262boolean point::is_subset(const isl::checked::set &set2) const
13263{
13264  return isl::checked::basic_set(*this).is_subset(set2);
13265}
13266
13267boolean point::is_subset(const isl::checked::union_set &uset2) const
13268{
13269  return isl::checked::basic_set(*this).is_subset(uset2);
13270}
13271
13272boolean point::is_wrapping() const
13273{
13274  return isl::checked::basic_set(*this).is_wrapping();
13275}
13276
13277boolean point::isa_set() const
13278{
13279  return isl::checked::basic_set(*this).isa_set();
13280}
13281
13282isl::checked::fixed_box point::lattice_tile() const
13283{
13284  return isl::checked::basic_set(*this).lattice_tile();
13285}
13286
13287isl::checked::set point::lexmax() const
13288{
13289  return isl::checked::basic_set(*this).lexmax();
13290}
13291
13292isl::checked::pw_multi_aff point::lexmax_pw_multi_aff() const
13293{
13294  return isl::checked::basic_set(*this).lexmax_pw_multi_aff();
13295}
13296
13297isl::checked::set point::lexmin() const
13298{
13299  return isl::checked::basic_set(*this).lexmin();
13300}
13301
13302isl::checked::pw_multi_aff point::lexmin_pw_multi_aff() const
13303{
13304  return isl::checked::basic_set(*this).lexmin_pw_multi_aff();
13305}
13306
13307isl::checked::set point::lower_bound(const isl::checked::multi_pw_aff &lower) const
13308{
13309  return isl::checked::basic_set(*this).lower_bound(lower);
13310}
13311
13312isl::checked::set point::lower_bound(const isl::checked::multi_val &lower) const
13313{
13314  return isl::checked::basic_set(*this).lower_bound(lower);
13315}
13316
13317isl::checked::multi_pw_aff point::max_multi_pw_aff() const
13318{
13319  return isl::checked::basic_set(*this).max_multi_pw_aff();
13320}
13321
13322isl::checked::val point::max_val(const isl::checked::aff &obj) const
13323{
13324  return isl::checked::basic_set(*this).max_val(obj);
13325}
13326
13327isl::checked::multi_pw_aff point::min_multi_pw_aff() const
13328{
13329  return isl::checked::basic_set(*this).min_multi_pw_aff();
13330}
13331
13332isl::checked::val point::min_val(const isl::checked::aff &obj) const
13333{
13334  return isl::checked::basic_set(*this).min_val(obj);
13335}
13336
13337isl::checked::multi_val point::multi_val() const
13338{
13339  auto res = isl_point_get_multi_val(get());
13340  return manage(res);
13341}
13342
13343isl::checked::multi_val point::get_multi_val() const
13344{
13345  return multi_val();
13346}
13347
13348class size point::n_basic_set() const
13349{
13350  return isl::checked::basic_set(*this).n_basic_set();
13351}
13352
13353isl::checked::pw_aff point::param_pw_aff_on_domain(const isl::checked::id &id) const
13354{
13355  return isl::checked::basic_set(*this).param_pw_aff_on_domain(id);
13356}
13357
13358isl::checked::pw_aff point::param_pw_aff_on_domain(const std::string &id) const
13359{
13360  return this->param_pw_aff_on_domain(isl::checked::id(ctx(), id));
13361}
13362
13363isl::checked::basic_set point::params() const
13364{
13365  return isl::checked::basic_set(*this).params();
13366}
13367
13368isl::checked::multi_val point::plain_multi_val_if_fixed() const
13369{
13370  return isl::checked::basic_set(*this).plain_multi_val_if_fixed();
13371}
13372
13373isl::checked::basic_set point::polyhedral_hull() const
13374{
13375  return isl::checked::basic_set(*this).polyhedral_hull();
13376}
13377
13378isl::checked::set point::preimage(const isl::checked::multi_aff &ma) const
13379{
13380  return isl::checked::basic_set(*this).preimage(ma);
13381}
13382
13383isl::checked::set point::preimage(const isl::checked::multi_pw_aff &mpa) const
13384{
13385  return isl::checked::basic_set(*this).preimage(mpa);
13386}
13387
13388isl::checked::set point::preimage(const isl::checked::pw_multi_aff &pma) const
13389{
13390  return isl::checked::basic_set(*this).preimage(pma);
13391}
13392
13393isl::checked::union_set point::preimage(const isl::checked::union_pw_multi_aff &upma) const
13394{
13395  return isl::checked::basic_set(*this).preimage(upma);
13396}
13397
13398isl::checked::set point::product(const isl::checked::set &set2) const
13399{
13400  return isl::checked::basic_set(*this).product(set2);
13401}
13402
13403isl::checked::set point::project_out_all_params() const
13404{
13405  return isl::checked::basic_set(*this).project_out_all_params();
13406}
13407
13408isl::checked::set point::project_out_param(const isl::checked::id &id) const
13409{
13410  return isl::checked::basic_set(*this).project_out_param(id);
13411}
13412
13413isl::checked::set point::project_out_param(const std::string &id) const
13414{
13415  return this->project_out_param(isl::checked::id(ctx(), id));
13416}
13417
13418isl::checked::set point::project_out_param(const isl::checked::id_list &list) const
13419{
13420  return isl::checked::basic_set(*this).project_out_param(list);
13421}
13422
13423isl::checked::pw_aff point::pw_aff_on_domain(const isl::checked::val &v) const
13424{
13425  return isl::checked::basic_set(*this).pw_aff_on_domain(v);
13426}
13427
13428isl::checked::pw_aff point::pw_aff_on_domain(long v) const
13429{
13430  return this->pw_aff_on_domain(isl::checked::val(ctx(), v));
13431}
13432
13433isl::checked::pw_multi_aff point::pw_multi_aff_on_domain(const isl::checked::multi_val &mv) const
13434{
13435  return isl::checked::basic_set(*this).pw_multi_aff_on_domain(mv);
13436}
13437
13438isl::checked::basic_set point::sample() const
13439{
13440  return isl::checked::basic_set(*this).sample();
13441}
13442
13443isl::checked::point point::sample_point() const
13444{
13445  return isl::checked::basic_set(*this).sample_point();
13446}
13447
13448isl::checked::set_list point::set_list() const
13449{
13450  return isl::checked::basic_set(*this).set_list();
13451}
13452
13453isl::checked::fixed_box point::simple_fixed_box_hull() const
13454{
13455  return isl::checked::basic_set(*this).simple_fixed_box_hull();
13456}
13457
13458isl::checked::space point::space() const
13459{
13460  return isl::checked::basic_set(*this).space();
13461}
13462
13463isl::checked::val point::stride(int pos) const
13464{
13465  return isl::checked::basic_set(*this).stride(pos);
13466}
13467
13468isl::checked::set point::subtract(const isl::checked::set &set2) const
13469{
13470  return isl::checked::basic_set(*this).subtract(set2);
13471}
13472
13473isl::checked::union_set point::subtract(const isl::checked::union_set &uset2) const
13474{
13475  return isl::checked::basic_set(*this).subtract(uset2);
13476}
13477
13478isl::checked::set_list point::to_list() const
13479{
13480  return isl::checked::basic_set(*this).to_list();
13481}
13482
13483isl::checked::set point::to_set() const
13484{
13485  auto res = isl_point_to_set(copy());
13486  return manage(res);
13487}
13488
13489isl::checked::union_set point::to_union_set() const
13490{
13491  return isl::checked::basic_set(*this).to_union_set();
13492}
13493
13494isl::checked::map point::translation() const
13495{
13496  return isl::checked::basic_set(*this).translation();
13497}
13498
13499class size point::tuple_dim() const
13500{
13501  return isl::checked::basic_set(*this).tuple_dim();
13502}
13503
13504isl::checked::set point::unbind_params(const isl::checked::multi_id &tuple) const
13505{
13506  return isl::checked::basic_set(*this).unbind_params(tuple);
13507}
13508
13509isl::checked::map point::unbind_params_insert_domain(const isl::checked::multi_id &domain) const
13510{
13511  return isl::checked::basic_set(*this).unbind_params_insert_domain(domain);
13512}
13513
13514isl::checked::set point::unite(const isl::checked::basic_set &bset2) const
13515{
13516  return isl::checked::basic_set(*this).unite(bset2);
13517}
13518
13519isl::checked::set point::unite(const isl::checked::set &set2) const
13520{
13521  return isl::checked::basic_set(*this).unite(set2);
13522}
13523
13524isl::checked::union_set point::unite(const isl::checked::union_set &uset2) const
13525{
13526  return isl::checked::basic_set(*this).unite(uset2);
13527}
13528
13529isl::checked::basic_set point::unshifted_simple_hull() const
13530{
13531  return isl::checked::basic_set(*this).unshifted_simple_hull();
13532}
13533
13534isl::checked::map point::unwrap() const
13535{
13536  return isl::checked::basic_set(*this).unwrap();
13537}
13538
13539isl::checked::set point::upper_bound(const isl::checked::multi_pw_aff &upper) const
13540{
13541  return isl::checked::basic_set(*this).upper_bound(upper);
13542}
13543
13544isl::checked::set point::upper_bound(const isl::checked::multi_val &upper) const
13545{
13546  return isl::checked::basic_set(*this).upper_bound(upper);
13547}
13548
13549isl::checked::set point::wrapped_reverse() const
13550{
13551  return isl::checked::basic_set(*this).wrapped_reverse();
13552}
13553
13554inline std::ostream &operator<<(std::ostream &os, const point &obj)
13555{
13556  char *str = isl_point_to_str(obj.get());
13557  if (!str) {
13558    os.setstate(std::ios_base::badbit);
13559    return os;
13560  }
13561  os << str;
13562  free(str);
13563  return os;
13564}
13565
13566// implementations for isl::pw_aff
13567pw_aff manage(__isl_take isl_pw_aff *ptr) {
13568  return pw_aff(ptr);
13569}
13570pw_aff manage_copy(__isl_keep isl_pw_aff *ptr) {
13571  ptr = isl_pw_aff_copy(ptr);
13572  return pw_aff(ptr);
13573}
13574
13575pw_aff::pw_aff(__isl_take isl_pw_aff *ptr)
13576    : ptr(ptr) {}
13577
13578pw_aff::pw_aff()
13579    : ptr(nullptr) {}
13580
13581pw_aff::pw_aff(const pw_aff &obj)
13582    : ptr(nullptr)
13583{
13584  ptr = obj.copy();
13585}
13586
13587pw_aff::pw_aff(isl::checked::aff aff)
13588{
13589  auto res = isl_pw_aff_from_aff(aff.release());
13590  ptr = res;
13591}
13592
13593pw_aff::pw_aff(isl::checked::ctx ctx, const std::string &str)
13594{
13595  auto res = isl_pw_aff_read_from_str(ctx.release(), str.c_str());
13596  ptr = res;
13597}
13598
13599pw_aff &pw_aff::operator=(pw_aff obj) {
13600  std::swap(this->ptr, obj.ptr);
13601  return *this;
13602}
13603
13604pw_aff::~pw_aff() {
13605  if (ptr)
13606    isl_pw_aff_free(ptr);
13607}
13608
13609__isl_give isl_pw_aff *pw_aff::copy() const & {
13610  return isl_pw_aff_copy(ptr);
13611}
13612
13613__isl_keep isl_pw_aff *pw_aff::get() const {
13614  return ptr;
13615}
13616
13617__isl_give isl_pw_aff *pw_aff::release() {
13618  isl_pw_aff *tmp = ptr;
13619  ptr = nullptr;
13620  return tmp;
13621}
13622
13623bool pw_aff::is_null() const {
13624  return ptr == nullptr;
13625}
13626
13627isl::checked::ctx pw_aff::ctx() const {
13628  return isl::checked::ctx(isl_pw_aff_get_ctx(ptr));
13629}
13630
13631isl::checked::multi_pw_aff pw_aff::add(const isl::checked::multi_pw_aff &multi2) const
13632{
13633  return isl::checked::pw_multi_aff(*this).add(multi2);
13634}
13635
13636isl::checked::multi_union_pw_aff pw_aff::add(const isl::checked::multi_union_pw_aff &multi2) const
13637{
13638  return isl::checked::union_pw_aff(*this).add(multi2);
13639}
13640
13641isl::checked::pw_aff pw_aff::add(isl::checked::pw_aff pwaff2) const
13642{
13643  auto res = isl_pw_aff_add(copy(), pwaff2.release());
13644  return manage(res);
13645}
13646
13647isl::checked::pw_multi_aff pw_aff::add(const isl::checked::pw_multi_aff &pma2) const
13648{
13649  return isl::checked::pw_multi_aff(*this).add(pma2);
13650}
13651
13652isl::checked::union_pw_aff pw_aff::add(const isl::checked::union_pw_aff &upa2) const
13653{
13654  return isl::checked::union_pw_aff(*this).add(upa2);
13655}
13656
13657isl::checked::union_pw_multi_aff pw_aff::add(const isl::checked::union_pw_multi_aff &upma2) const
13658{
13659  return isl::checked::union_pw_aff(*this).add(upma2);
13660}
13661
13662isl::checked::pw_aff pw_aff::add(const isl::checked::aff &pwaff2) const
13663{
13664  return this->add(isl::checked::pw_aff(pwaff2));
13665}
13666
13667isl::checked::pw_aff pw_aff::add_constant(isl::checked::val v) const
13668{
13669  auto res = isl_pw_aff_add_constant_val(copy(), v.release());
13670  return manage(res);
13671}
13672
13673isl::checked::pw_aff pw_aff::add_constant(long v) const
13674{
13675  return this->add_constant(isl::checked::val(ctx(), v));
13676}
13677
13678isl::checked::pw_multi_aff pw_aff::add_constant(const isl::checked::multi_val &mv) const
13679{
13680  return isl::checked::pw_multi_aff(*this).add_constant(mv);
13681}
13682
13683isl::checked::union_pw_multi_aff pw_aff::apply(const isl::checked::union_pw_multi_aff &upma2) const
13684{
13685  return isl::checked::union_pw_aff(*this).apply(upma2);
13686}
13687
13688isl::checked::aff pw_aff::as_aff() const
13689{
13690  auto res = isl_pw_aff_as_aff(copy());
13691  return manage(res);
13692}
13693
13694isl::checked::map pw_aff::as_map() const
13695{
13696  auto res = isl_pw_aff_as_map(copy());
13697  return manage(res);
13698}
13699
13700isl::checked::multi_aff pw_aff::as_multi_aff() const
13701{
13702  return isl::checked::pw_multi_aff(*this).as_multi_aff();
13703}
13704
13705isl::checked::multi_union_pw_aff pw_aff::as_multi_union_pw_aff() const
13706{
13707  return isl::checked::union_pw_aff(*this).as_multi_union_pw_aff();
13708}
13709
13710isl::checked::pw_multi_aff pw_aff::as_pw_multi_aff() const
13711{
13712  return isl::checked::union_pw_aff(*this).as_pw_multi_aff();
13713}
13714
13715isl::checked::set pw_aff::as_set() const
13716{
13717  return isl::checked::pw_multi_aff(*this).as_set();
13718}
13719
13720isl::checked::union_map pw_aff::as_union_map() const
13721{
13722  return isl::checked::union_pw_aff(*this).as_union_map();
13723}
13724
13725isl::checked::pw_aff pw_aff::at(int pos) const
13726{
13727  return isl::checked::pw_multi_aff(*this).at(pos);
13728}
13729
13730isl::checked::set pw_aff::bind(const isl::checked::multi_id &tuple) const
13731{
13732  return isl::checked::multi_pw_aff(*this).bind(tuple);
13733}
13734
13735isl::checked::set pw_aff::bind(isl::checked::id id) const
13736{
13737  auto res = isl_pw_aff_bind_id(copy(), id.release());
13738  return manage(res);
13739}
13740
13741isl::checked::set pw_aff::bind(const std::string &id) const
13742{
13743  return this->bind(isl::checked::id(ctx(), id));
13744}
13745
13746isl::checked::pw_aff pw_aff::bind_domain(isl::checked::multi_id tuple) const
13747{
13748  auto res = isl_pw_aff_bind_domain(copy(), tuple.release());
13749  return manage(res);
13750}
13751
13752isl::checked::pw_aff pw_aff::bind_domain_wrapped_domain(isl::checked::multi_id tuple) const
13753{
13754  auto res = isl_pw_aff_bind_domain_wrapped_domain(copy(), tuple.release());
13755  return manage(res);
13756}
13757
13758isl::checked::pw_aff pw_aff::ceil() const
13759{
13760  auto res = isl_pw_aff_ceil(copy());
13761  return manage(res);
13762}
13763
13764isl::checked::pw_aff pw_aff::coalesce() const
13765{
13766  auto res = isl_pw_aff_coalesce(copy());
13767  return manage(res);
13768}
13769
13770isl::checked::pw_aff pw_aff::cond(isl::checked::pw_aff pwaff_true, isl::checked::pw_aff pwaff_false) const
13771{
13772  auto res = isl_pw_aff_cond(copy(), pwaff_true.release(), pwaff_false.release());
13773  return manage(res);
13774}
13775
13776isl::checked::pw_aff pw_aff::div(isl::checked::pw_aff pa2) const
13777{
13778  auto res = isl_pw_aff_div(copy(), pa2.release());
13779  return manage(res);
13780}
13781
13782isl::checked::set pw_aff::domain() const
13783{
13784  auto res = isl_pw_aff_domain(copy());
13785  return manage(res);
13786}
13787
13788isl::checked::pw_aff pw_aff::domain_reverse() const
13789{
13790  auto res = isl_pw_aff_domain_reverse(copy());
13791  return manage(res);
13792}
13793
13794isl::checked::pw_aff pw_aff::drop_unused_params() const
13795{
13796  auto res = isl_pw_aff_drop_unused_params(copy());
13797  return manage(res);
13798}
13799
13800isl::checked::set pw_aff::eq_set(isl::checked::pw_aff pwaff2) const
13801{
13802  auto res = isl_pw_aff_eq_set(copy(), pwaff2.release());
13803  return manage(res);
13804}
13805
13806isl::checked::val pw_aff::eval(isl::checked::point pnt) const
13807{
13808  auto res = isl_pw_aff_eval(copy(), pnt.release());
13809  return manage(res);
13810}
13811
13812isl::checked::pw_multi_aff pw_aff::extract_pw_multi_aff(const isl::checked::space &space) const
13813{
13814  return isl::checked::union_pw_aff(*this).extract_pw_multi_aff(space);
13815}
13816
13817isl::checked::multi_pw_aff pw_aff::flat_range_product(const isl::checked::multi_pw_aff &multi2) const
13818{
13819  return isl::checked::pw_multi_aff(*this).flat_range_product(multi2);
13820}
13821
13822isl::checked::multi_union_pw_aff pw_aff::flat_range_product(const isl::checked::multi_union_pw_aff &multi2) const
13823{
13824  return isl::checked::union_pw_aff(*this).flat_range_product(multi2);
13825}
13826
13827isl::checked::pw_multi_aff pw_aff::flat_range_product(const isl::checked::pw_multi_aff &pma2) const
13828{
13829  return isl::checked::pw_multi_aff(*this).flat_range_product(pma2);
13830}
13831
13832isl::checked::union_pw_multi_aff pw_aff::flat_range_product(const isl::checked::union_pw_multi_aff &upma2) const
13833{
13834  return isl::checked::union_pw_aff(*this).flat_range_product(upma2);
13835}
13836
13837isl::checked::pw_aff pw_aff::floor() const
13838{
13839  auto res = isl_pw_aff_floor(copy());
13840  return manage(res);
13841}
13842
13843stat pw_aff::foreach_piece(const std::function<stat(isl::checked::set, isl::checked::multi_aff)> &fn) const
13844{
13845  return isl::checked::pw_multi_aff(*this).foreach_piece(fn);
13846}
13847
13848isl::checked::set pw_aff::ge_set(isl::checked::pw_aff pwaff2) const
13849{
13850  auto res = isl_pw_aff_ge_set(copy(), pwaff2.release());
13851  return manage(res);
13852}
13853
13854isl::checked::pw_aff pw_aff::gist(isl::checked::set context) const
13855{
13856  auto res = isl_pw_aff_gist(copy(), context.release());
13857  return manage(res);
13858}
13859
13860isl::checked::union_pw_aff pw_aff::gist(const isl::checked::union_set &context) const
13861{
13862  return isl::checked::union_pw_aff(*this).gist(context);
13863}
13864
13865isl::checked::pw_aff pw_aff::gist(const isl::checked::basic_set &context) const
13866{
13867  return this->gist(isl::checked::set(context));
13868}
13869
13870isl::checked::pw_aff pw_aff::gist(const isl::checked::point &context) const
13871{
13872  return this->gist(isl::checked::set(context));
13873}
13874
13875isl::checked::pw_aff pw_aff::gist_params(isl::checked::set context) const
13876{
13877  auto res = isl_pw_aff_gist_params(copy(), context.release());
13878  return manage(res);
13879}
13880
13881isl::checked::set pw_aff::gt_set(isl::checked::pw_aff pwaff2) const
13882{
13883  auto res = isl_pw_aff_gt_set(copy(), pwaff2.release());
13884  return manage(res);
13885}
13886
13887boolean pw_aff::has_range_tuple_id() const
13888{
13889  return isl::checked::pw_multi_aff(*this).has_range_tuple_id();
13890}
13891
13892isl::checked::multi_pw_aff pw_aff::identity() const
13893{
13894  return isl::checked::pw_multi_aff(*this).identity();
13895}
13896
13897isl::checked::pw_aff pw_aff::insert_domain(isl::checked::space domain) const
13898{
13899  auto res = isl_pw_aff_insert_domain(copy(), domain.release());
13900  return manage(res);
13901}
13902
13903isl::checked::pw_aff pw_aff::intersect_domain(isl::checked::set set) const
13904{
13905  auto res = isl_pw_aff_intersect_domain(copy(), set.release());
13906  return manage(res);
13907}
13908
13909isl::checked::union_pw_aff pw_aff::intersect_domain(const isl::checked::space &space) const
13910{
13911  return isl::checked::union_pw_aff(*this).intersect_domain(space);
13912}
13913
13914isl::checked::union_pw_aff pw_aff::intersect_domain(const isl::checked::union_set &uset) const
13915{
13916  return isl::checked::union_pw_aff(*this).intersect_domain(uset);
13917}
13918
13919isl::checked::pw_aff pw_aff::intersect_domain(const isl::checked::basic_set &set) const
13920{
13921  return this->intersect_domain(isl::checked::set(set));
13922}
13923
13924isl::checked::pw_aff pw_aff::intersect_domain(const isl::checked::point &set) const
13925{
13926  return this->intersect_domain(isl::checked::set(set));
13927}
13928
13929isl::checked::union_pw_aff pw_aff::intersect_domain_wrapped_domain(const isl::checked::union_set &uset) const
13930{
13931  return isl::checked::union_pw_aff(*this).intersect_domain_wrapped_domain(uset);
13932}
13933
13934isl::checked::union_pw_aff pw_aff::intersect_domain_wrapped_range(const isl::checked::union_set &uset) const
13935{
13936  return isl::checked::union_pw_aff(*this).intersect_domain_wrapped_range(uset);
13937}
13938
13939isl::checked::pw_aff pw_aff::intersect_params(isl::checked::set set) const
13940{
13941  auto res = isl_pw_aff_intersect_params(copy(), set.release());
13942  return manage(res);
13943}
13944
13945boolean pw_aff::involves_locals() const
13946{
13947  return isl::checked::pw_multi_aff(*this).involves_locals();
13948}
13949
13950boolean pw_aff::involves_nan() const
13951{
13952  return isl::checked::multi_pw_aff(*this).involves_nan();
13953}
13954
13955boolean pw_aff::involves_param(const isl::checked::id &id) const
13956{
13957  return isl::checked::pw_multi_aff(*this).involves_param(id);
13958}
13959
13960boolean pw_aff::involves_param(const std::string &id) const
13961{
13962  return this->involves_param(isl::checked::id(ctx(), id));
13963}
13964
13965boolean pw_aff::involves_param(const isl::checked::id_list &list) const
13966{
13967  return isl::checked::pw_multi_aff(*this).involves_param(list);
13968}
13969
13970boolean pw_aff::isa_aff() const
13971{
13972  auto res = isl_pw_aff_isa_aff(get());
13973  return manage(res);
13974}
13975
13976boolean pw_aff::isa_multi_aff() const
13977{
13978  return isl::checked::pw_multi_aff(*this).isa_multi_aff();
13979}
13980
13981boolean pw_aff::isa_pw_multi_aff() const
13982{
13983  return isl::checked::union_pw_aff(*this).isa_pw_multi_aff();
13984}
13985
13986isl::checked::set pw_aff::le_set(isl::checked::pw_aff pwaff2) const
13987{
13988  auto res = isl_pw_aff_le_set(copy(), pwaff2.release());
13989  return manage(res);
13990}
13991
13992isl::checked::pw_aff_list pw_aff::list() const
13993{
13994  return isl::checked::multi_pw_aff(*this).list();
13995}
13996
13997isl::checked::set pw_aff::lt_set(isl::checked::pw_aff pwaff2) const
13998{
13999  auto res = isl_pw_aff_lt_set(copy(), pwaff2.release());
14000  return manage(res);
14001}
14002
14003isl::checked::multi_pw_aff pw_aff::max(const isl::checked::multi_pw_aff &multi2) const
14004{
14005  return isl::checked::pw_multi_aff(*this).max(multi2);
14006}
14007
14008isl::checked::pw_aff pw_aff::max(isl::checked::pw_aff pwaff2) const
14009{
14010  auto res = isl_pw_aff_max(copy(), pwaff2.release());
14011  return manage(res);
14012}
14013
14014isl::checked::pw_aff pw_aff::max(const isl::checked::aff &pwaff2) const
14015{
14016  return this->max(isl::checked::pw_aff(pwaff2));
14017}
14018
14019isl::checked::multi_val pw_aff::max_multi_val() const
14020{
14021  return isl::checked::pw_multi_aff(*this).max_multi_val();
14022}
14023
14024isl::checked::val pw_aff::max_val() const
14025{
14026  auto res = isl_pw_aff_max_val(copy());
14027  return manage(res);
14028}
14029
14030isl::checked::multi_pw_aff pw_aff::min(const isl::checked::multi_pw_aff &multi2) const
14031{
14032  return isl::checked::pw_multi_aff(*this).min(multi2);
14033}
14034
14035isl::checked::pw_aff pw_aff::min(isl::checked::pw_aff pwaff2) const
14036{
14037  auto res = isl_pw_aff_min(copy(), pwaff2.release());
14038  return manage(res);
14039}
14040
14041isl::checked::pw_aff pw_aff::min(const isl::checked::aff &pwaff2) const
14042{
14043  return this->min(isl::checked::pw_aff(pwaff2));
14044}
14045
14046isl::checked::multi_val pw_aff::min_multi_val() const
14047{
14048  return isl::checked::pw_multi_aff(*this).min_multi_val();
14049}
14050
14051isl::checked::val pw_aff::min_val() const
14052{
14053  auto res = isl_pw_aff_min_val(copy());
14054  return manage(res);
14055}
14056
14057isl::checked::pw_aff pw_aff::mod(isl::checked::val mod) const
14058{
14059  auto res = isl_pw_aff_mod_val(copy(), mod.release());
14060  return manage(res);
14061}
14062
14063isl::checked::pw_aff pw_aff::mod(long mod) const
14064{
14065  return this->mod(isl::checked::val(ctx(), mod));
14066}
14067
14068isl::checked::pw_aff pw_aff::mul(isl::checked::pw_aff pwaff2) const
14069{
14070  auto res = isl_pw_aff_mul(copy(), pwaff2.release());
14071  return manage(res);
14072}
14073
14074class size pw_aff::n_piece() const
14075{
14076  return isl::checked::pw_multi_aff(*this).n_piece();
14077}
14078
14079isl::checked::set pw_aff::ne_set(isl::checked::pw_aff pwaff2) const
14080{
14081  auto res = isl_pw_aff_ne_set(copy(), pwaff2.release());
14082  return manage(res);
14083}
14084
14085isl::checked::pw_aff pw_aff::neg() const
14086{
14087  auto res = isl_pw_aff_neg(copy());
14088  return manage(res);
14089}
14090
14091isl::checked::pw_aff pw_aff::param_on_domain(isl::checked::set domain, isl::checked::id id)
14092{
14093  auto res = isl_pw_aff_param_on_domain_id(domain.release(), id.release());
14094  return manage(res);
14095}
14096
14097isl::checked::set pw_aff::params() const
14098{
14099  auto res = isl_pw_aff_params(copy());
14100  return manage(res);
14101}
14102
14103boolean pw_aff::plain_is_empty() const
14104{
14105  return isl::checked::union_pw_aff(*this).plain_is_empty();
14106}
14107
14108boolean pw_aff::plain_is_equal(const isl::checked::multi_pw_aff &multi2) const
14109{
14110  return isl::checked::pw_multi_aff(*this).plain_is_equal(multi2);
14111}
14112
14113boolean pw_aff::plain_is_equal(const isl::checked::multi_union_pw_aff &multi2) const
14114{
14115  return isl::checked::union_pw_aff(*this).plain_is_equal(multi2);
14116}
14117
14118boolean pw_aff::plain_is_equal(const isl::checked::pw_aff &pwaff2) const
14119{
14120  auto res = isl_pw_aff_plain_is_equal(get(), pwaff2.get());
14121  return manage(res);
14122}
14123
14124boolean pw_aff::plain_is_equal(const isl::checked::pw_multi_aff &pma2) const
14125{
14126  return isl::checked::pw_multi_aff(*this).plain_is_equal(pma2);
14127}
14128
14129boolean pw_aff::plain_is_equal(const isl::checked::union_pw_aff &upa2) const
14130{
14131  return isl::checked::union_pw_aff(*this).plain_is_equal(upa2);
14132}
14133
14134boolean pw_aff::plain_is_equal(const isl::checked::union_pw_multi_aff &upma2) const
14135{
14136  return isl::checked::union_pw_aff(*this).plain_is_equal(upma2);
14137}
14138
14139boolean pw_aff::plain_is_equal(const isl::checked::aff &pwaff2) const
14140{
14141  return this->plain_is_equal(isl::checked::pw_aff(pwaff2));
14142}
14143
14144isl::checked::pw_multi_aff pw_aff::preimage_domain_wrapped_domain(const isl::checked::pw_multi_aff &pma2) const
14145{
14146  return isl::checked::pw_multi_aff(*this).preimage_domain_wrapped_domain(pma2);
14147}
14148
14149isl::checked::union_pw_multi_aff pw_aff::preimage_domain_wrapped_domain(const isl::checked::union_pw_multi_aff &upma2) const
14150{
14151  return isl::checked::union_pw_aff(*this).preimage_domain_wrapped_domain(upma2);
14152}
14153
14154isl::checked::multi_pw_aff pw_aff::product(const isl::checked::multi_pw_aff &multi2) const
14155{
14156  return isl::checked::pw_multi_aff(*this).product(multi2);
14157}
14158
14159isl::checked::pw_multi_aff pw_aff::product(const isl::checked::pw_multi_aff &pma2) const
14160{
14161  return isl::checked::pw_multi_aff(*this).product(pma2);
14162}
14163
14164isl::checked::pw_aff pw_aff::pullback(isl::checked::multi_aff ma) const
14165{
14166  auto res = isl_pw_aff_pullback_multi_aff(copy(), ma.release());
14167  return manage(res);
14168}
14169
14170isl::checked::pw_aff pw_aff::pullback(isl::checked::multi_pw_aff mpa) const
14171{
14172  auto res = isl_pw_aff_pullback_multi_pw_aff(copy(), mpa.release());
14173  return manage(res);
14174}
14175
14176isl::checked::pw_aff pw_aff::pullback(isl::checked::pw_multi_aff pma) const
14177{
14178  auto res = isl_pw_aff_pullback_pw_multi_aff(copy(), pma.release());
14179  return manage(res);
14180}
14181
14182isl::checked::union_pw_aff pw_aff::pullback(const isl::checked::union_pw_multi_aff &upma) const
14183{
14184  return isl::checked::union_pw_aff(*this).pullback(upma);
14185}
14186
14187isl::checked::pw_multi_aff_list pw_aff::pw_multi_aff_list() const
14188{
14189  return isl::checked::union_pw_aff(*this).pw_multi_aff_list();
14190}
14191
14192isl::checked::pw_multi_aff pw_aff::range_factor_domain() const
14193{
14194  return isl::checked::pw_multi_aff(*this).range_factor_domain();
14195}
14196
14197isl::checked::pw_multi_aff pw_aff::range_factor_range() const
14198{
14199  return isl::checked::pw_multi_aff(*this).range_factor_range();
14200}
14201
14202isl::checked::multi_pw_aff pw_aff::range_product(const isl::checked::multi_pw_aff &multi2) const
14203{
14204  return isl::checked::pw_multi_aff(*this).range_product(multi2);
14205}
14206
14207isl::checked::multi_union_pw_aff pw_aff::range_product(const isl::checked::multi_union_pw_aff &multi2) const
14208{
14209  return isl::checked::union_pw_aff(*this).range_product(multi2);
14210}
14211
14212isl::checked::pw_multi_aff pw_aff::range_product(const isl::checked::pw_multi_aff &pma2) const
14213{
14214  return isl::checked::pw_multi_aff(*this).range_product(pma2);
14215}
14216
14217isl::checked::union_pw_multi_aff pw_aff::range_product(const isl::checked::union_pw_multi_aff &upma2) const
14218{
14219  return isl::checked::union_pw_aff(*this).range_product(upma2);
14220}
14221
14222isl::checked::id pw_aff::range_tuple_id() const
14223{
14224  return isl::checked::pw_multi_aff(*this).range_tuple_id();
14225}
14226
14227isl::checked::multi_pw_aff pw_aff::reset_range_tuple_id() const
14228{
14229  return isl::checked::multi_pw_aff(*this).reset_range_tuple_id();
14230}
14231
14232isl::checked::pw_aff pw_aff::scale(isl::checked::val v) const
14233{
14234  auto res = isl_pw_aff_scale_val(copy(), v.release());
14235  return manage(res);
14236}
14237
14238isl::checked::pw_aff pw_aff::scale(long v) const
14239{
14240  return this->scale(isl::checked::val(ctx(), v));
14241}
14242
14243isl::checked::pw_multi_aff pw_aff::scale(const isl::checked::multi_val &mv) const
14244{
14245  return isl::checked::pw_multi_aff(*this).scale(mv);
14246}
14247
14248isl::checked::pw_aff pw_aff::scale_down(isl::checked::val f) const
14249{
14250  auto res = isl_pw_aff_scale_down_val(copy(), f.release());
14251  return manage(res);
14252}
14253
14254isl::checked::pw_aff pw_aff::scale_down(long f) const
14255{
14256  return this->scale_down(isl::checked::val(ctx(), f));
14257}
14258
14259isl::checked::pw_multi_aff pw_aff::scale_down(const isl::checked::multi_val &mv) const
14260{
14261  return isl::checked::pw_multi_aff(*this).scale_down(mv);
14262}
14263
14264isl::checked::multi_pw_aff pw_aff::set_at(int pos, const isl::checked::pw_aff &el) const
14265{
14266  return isl::checked::pw_multi_aff(*this).set_at(pos, el);
14267}
14268
14269isl::checked::multi_union_pw_aff pw_aff::set_at(int pos, const isl::checked::union_pw_aff &el) const
14270{
14271  return isl::checked::union_pw_aff(*this).set_at(pos, el);
14272}
14273
14274isl::checked::pw_multi_aff pw_aff::set_range_tuple(const isl::checked::id &id) const
14275{
14276  return isl::checked::pw_multi_aff(*this).set_range_tuple(id);
14277}
14278
14279isl::checked::pw_multi_aff pw_aff::set_range_tuple(const std::string &id) const
14280{
14281  return this->set_range_tuple(isl::checked::id(ctx(), id));
14282}
14283
14284class size pw_aff::size() const
14285{
14286  return isl::checked::multi_pw_aff(*this).size();
14287}
14288
14289isl::checked::space pw_aff::space() const
14290{
14291  auto res = isl_pw_aff_get_space(get());
14292  return manage(res);
14293}
14294
14295isl::checked::space pw_aff::get_space() const
14296{
14297  return space();
14298}
14299
14300isl::checked::multi_pw_aff pw_aff::sub(const isl::checked::multi_pw_aff &multi2) const
14301{
14302  return isl::checked::pw_multi_aff(*this).sub(multi2);
14303}
14304
14305isl::checked::multi_union_pw_aff pw_aff::sub(const isl::checked::multi_union_pw_aff &multi2) const
14306{
14307  return isl::checked::union_pw_aff(*this).sub(multi2);
14308}
14309
14310isl::checked::pw_aff pw_aff::sub(isl::checked::pw_aff pwaff2) const
14311{
14312  auto res = isl_pw_aff_sub(copy(), pwaff2.release());
14313  return manage(res);
14314}
14315
14316isl::checked::pw_multi_aff pw_aff::sub(const isl::checked::pw_multi_aff &pma2) const
14317{
14318  return isl::checked::pw_multi_aff(*this).sub(pma2);
14319}
14320
14321isl::checked::union_pw_aff pw_aff::sub(const isl::checked::union_pw_aff &upa2) const
14322{
14323  return isl::checked::union_pw_aff(*this).sub(upa2);
14324}
14325
14326isl::checked::union_pw_multi_aff pw_aff::sub(const isl::checked::union_pw_multi_aff &upma2) const
14327{
14328  return isl::checked::union_pw_aff(*this).sub(upma2);
14329}
14330
14331isl::checked::pw_aff pw_aff::sub(const isl::checked::aff &pwaff2) const
14332{
14333  return this->sub(isl::checked::pw_aff(pwaff2));
14334}
14335
14336isl::checked::pw_aff pw_aff::subtract_domain(isl::checked::set set) const
14337{
14338  auto res = isl_pw_aff_subtract_domain(copy(), set.release());
14339  return manage(res);
14340}
14341
14342isl::checked::union_pw_aff pw_aff::subtract_domain(const isl::checked::space &space) const
14343{
14344  return isl::checked::union_pw_aff(*this).subtract_domain(space);
14345}
14346
14347isl::checked::union_pw_aff pw_aff::subtract_domain(const isl::checked::union_set &uset) const
14348{
14349  return isl::checked::union_pw_aff(*this).subtract_domain(uset);
14350}
14351
14352isl::checked::pw_aff pw_aff::subtract_domain(const isl::checked::basic_set &set) const
14353{
14354  return this->subtract_domain(isl::checked::set(set));
14355}
14356
14357isl::checked::pw_aff pw_aff::subtract_domain(const isl::checked::point &set) const
14358{
14359  return this->subtract_domain(isl::checked::set(set));
14360}
14361
14362isl::checked::pw_aff pw_aff::tdiv_q(isl::checked::pw_aff pa2) const
14363{
14364  auto res = isl_pw_aff_tdiv_q(copy(), pa2.release());
14365  return manage(res);
14366}
14367
14368isl::checked::pw_aff pw_aff::tdiv_r(isl::checked::pw_aff pa2) const
14369{
14370  auto res = isl_pw_aff_tdiv_r(copy(), pa2.release());
14371  return manage(res);
14372}
14373
14374isl::checked::pw_aff_list pw_aff::to_list() const
14375{
14376  auto res = isl_pw_aff_to_list(copy());
14377  return manage(res);
14378}
14379
14380isl::checked::multi_pw_aff pw_aff::to_multi_pw_aff() const
14381{
14382  return isl::checked::pw_multi_aff(*this).to_multi_pw_aff();
14383}
14384
14385isl::checked::union_pw_aff pw_aff::to_union_pw_aff() const
14386{
14387  auto res = isl_pw_aff_to_union_pw_aff(copy());
14388  return manage(res);
14389}
14390
14391isl::checked::union_pw_multi_aff pw_aff::to_union_pw_multi_aff() const
14392{
14393  return isl::checked::pw_multi_aff(*this).to_union_pw_multi_aff();
14394}
14395
14396isl::checked::multi_pw_aff pw_aff::unbind_params_insert_domain(const isl::checked::multi_id &domain) const
14397{
14398  return isl::checked::pw_multi_aff(*this).unbind_params_insert_domain(domain);
14399}
14400
14401isl::checked::multi_pw_aff pw_aff::union_add(const isl::checked::multi_pw_aff &mpa2) const
14402{
14403  return isl::checked::pw_multi_aff(*this).union_add(mpa2);
14404}
14405
14406isl::checked::multi_union_pw_aff pw_aff::union_add(const isl::checked::multi_union_pw_aff &mupa2) const
14407{
14408  return isl::checked::union_pw_aff(*this).union_add(mupa2);
14409}
14410
14411isl::checked::pw_aff pw_aff::union_add(isl::checked::pw_aff pwaff2) const
14412{
14413  auto res = isl_pw_aff_union_add(copy(), pwaff2.release());
14414  return manage(res);
14415}
14416
14417isl::checked::pw_multi_aff pw_aff::union_add(const isl::checked::pw_multi_aff &pma2) const
14418{
14419  return isl::checked::pw_multi_aff(*this).union_add(pma2);
14420}
14421
14422isl::checked::union_pw_aff pw_aff::union_add(const isl::checked::union_pw_aff &upa2) const
14423{
14424  return isl::checked::union_pw_aff(*this).union_add(upa2);
14425}
14426
14427isl::checked::union_pw_multi_aff pw_aff::union_add(const isl::checked::union_pw_multi_aff &upma2) const
14428{
14429  return isl::checked::union_pw_aff(*this).union_add(upma2);
14430}
14431
14432isl::checked::pw_aff pw_aff::union_add(const isl::checked::aff &pwaff2) const
14433{
14434  return this->union_add(isl::checked::pw_aff(pwaff2));
14435}
14436
14437inline std::ostream &operator<<(std::ostream &os, const pw_aff &obj)
14438{
14439  char *str = isl_pw_aff_to_str(obj.get());
14440  if (!str) {
14441    os.setstate(std::ios_base::badbit);
14442    return os;
14443  }
14444  os << str;
14445  free(str);
14446  return os;
14447}
14448
14449// implementations for isl::pw_aff_list
14450pw_aff_list manage(__isl_take isl_pw_aff_list *ptr) {
14451  return pw_aff_list(ptr);
14452}
14453pw_aff_list manage_copy(__isl_keep isl_pw_aff_list *ptr) {
14454  ptr = isl_pw_aff_list_copy(ptr);
14455  return pw_aff_list(ptr);
14456}
14457
14458pw_aff_list::pw_aff_list(__isl_take isl_pw_aff_list *ptr)
14459    : ptr(ptr) {}
14460
14461pw_aff_list::pw_aff_list()
14462    : ptr(nullptr) {}
14463
14464pw_aff_list::pw_aff_list(const pw_aff_list &obj)
14465    : ptr(nullptr)
14466{
14467  ptr = obj.copy();
14468}
14469
14470pw_aff_list::pw_aff_list(isl::checked::ctx ctx, int n)
14471{
14472  auto res = isl_pw_aff_list_alloc(ctx.release(), n);
14473  ptr = res;
14474}
14475
14476pw_aff_list::pw_aff_list(isl::checked::pw_aff el)
14477{
14478  auto res = isl_pw_aff_list_from_pw_aff(el.release());
14479  ptr = res;
14480}
14481
14482pw_aff_list::pw_aff_list(isl::checked::ctx ctx, const std::string &str)
14483{
14484  auto res = isl_pw_aff_list_read_from_str(ctx.release(), str.c_str());
14485  ptr = res;
14486}
14487
14488pw_aff_list &pw_aff_list::operator=(pw_aff_list obj) {
14489  std::swap(this->ptr, obj.ptr);
14490  return *this;
14491}
14492
14493pw_aff_list::~pw_aff_list() {
14494  if (ptr)
14495    isl_pw_aff_list_free(ptr);
14496}
14497
14498__isl_give isl_pw_aff_list *pw_aff_list::copy() const & {
14499  return isl_pw_aff_list_copy(ptr);
14500}
14501
14502__isl_keep isl_pw_aff_list *pw_aff_list::get() const {
14503  return ptr;
14504}
14505
14506__isl_give isl_pw_aff_list *pw_aff_list::release() {
14507  isl_pw_aff_list *tmp = ptr;
14508  ptr = nullptr;
14509  return tmp;
14510}
14511
14512bool pw_aff_list::is_null() const {
14513  return ptr == nullptr;
14514}
14515
14516isl::checked::ctx pw_aff_list::ctx() const {
14517  return isl::checked::ctx(isl_pw_aff_list_get_ctx(ptr));
14518}
14519
14520isl::checked::pw_aff_list pw_aff_list::add(isl::checked::pw_aff el) const
14521{
14522  auto res = isl_pw_aff_list_add(copy(), el.release());
14523  return manage(res);
14524}
14525
14526isl::checked::pw_aff pw_aff_list::at(int index) const
14527{
14528  auto res = isl_pw_aff_list_get_at(get(), index);
14529  return manage(res);
14530}
14531
14532isl::checked::pw_aff pw_aff_list::get_at(int index) const
14533{
14534  return at(index);
14535}
14536
14537isl::checked::pw_aff_list pw_aff_list::clear() const
14538{
14539  auto res = isl_pw_aff_list_clear(copy());
14540  return manage(res);
14541}
14542
14543isl::checked::pw_aff_list pw_aff_list::concat(isl::checked::pw_aff_list list2) const
14544{
14545  auto res = isl_pw_aff_list_concat(copy(), list2.release());
14546  return manage(res);
14547}
14548
14549isl::checked::pw_aff_list pw_aff_list::drop(unsigned int first, unsigned int n) const
14550{
14551  auto res = isl_pw_aff_list_drop(copy(), first, n);
14552  return manage(res);
14553}
14554
14555stat pw_aff_list::foreach(const std::function<stat(isl::checked::pw_aff)> &fn) const
14556{
14557  struct fn_data {
14558    std::function<stat(isl::checked::pw_aff)> func;
14559  } fn_data = { fn };
14560  auto fn_lambda = [](isl_pw_aff *arg_0, void *arg_1) -> isl_stat {
14561    auto *data = static_cast<struct fn_data *>(arg_1);
14562    auto ret = (data->func)(manage(arg_0));
14563    return ret.release();
14564  };
14565  auto res = isl_pw_aff_list_foreach(get(), fn_lambda, &fn_data);
14566  return manage(res);
14567}
14568
14569stat pw_aff_list::foreach_scc(const std::function<boolean(isl::checked::pw_aff, isl::checked::pw_aff)> &follows, const std::function<stat(isl::checked::pw_aff_list)> &fn) const
14570{
14571  struct follows_data {
14572    std::function<boolean(isl::checked::pw_aff, isl::checked::pw_aff)> func;
14573  } follows_data = { follows };
14574  auto follows_lambda = [](isl_pw_aff *arg_0, isl_pw_aff *arg_1, void *arg_2) -> isl_bool {
14575    auto *data = static_cast<struct follows_data *>(arg_2);
14576    auto ret = (data->func)(manage_copy(arg_0), manage_copy(arg_1));
14577    return ret.release();
14578  };
14579  struct fn_data {
14580    std::function<stat(isl::checked::pw_aff_list)> func;
14581  } fn_data = { fn };
14582  auto fn_lambda = [](isl_pw_aff_list *arg_0, void *arg_1) -> isl_stat {
14583    auto *data = static_cast<struct fn_data *>(arg_1);
14584    auto ret = (data->func)(manage(arg_0));
14585    return ret.release();
14586  };
14587  auto res = isl_pw_aff_list_foreach_scc(get(), follows_lambda, &follows_data, fn_lambda, &fn_data);
14588  return manage(res);
14589}
14590
14591isl::checked::pw_aff_list pw_aff_list::insert(unsigned int pos, isl::checked::pw_aff el) const
14592{
14593  auto res = isl_pw_aff_list_insert(copy(), pos, el.release());
14594  return manage(res);
14595}
14596
14597isl::checked::pw_aff_list pw_aff_list::set_at(int index, isl::checked::pw_aff el) const
14598{
14599  auto res = isl_pw_aff_list_set_at(copy(), index, el.release());
14600  return manage(res);
14601}
14602
14603class size pw_aff_list::size() const
14604{
14605  auto res = isl_pw_aff_list_size(get());
14606  return manage(res);
14607}
14608
14609inline std::ostream &operator<<(std::ostream &os, const pw_aff_list &obj)
14610{
14611  char *str = isl_pw_aff_list_to_str(obj.get());
14612  if (!str) {
14613    os.setstate(std::ios_base::badbit);
14614    return os;
14615  }
14616  os << str;
14617  free(str);
14618  return os;
14619}
14620
14621// implementations for isl::pw_multi_aff
14622pw_multi_aff manage(__isl_take isl_pw_multi_aff *ptr) {
14623  return pw_multi_aff(ptr);
14624}
14625pw_multi_aff manage_copy(__isl_keep isl_pw_multi_aff *ptr) {
14626  ptr = isl_pw_multi_aff_copy(ptr);
14627  return pw_multi_aff(ptr);
14628}
14629
14630pw_multi_aff::pw_multi_aff(__isl_take isl_pw_multi_aff *ptr)
14631    : ptr(ptr) {}
14632
14633pw_multi_aff::pw_multi_aff()
14634    : ptr(nullptr) {}
14635
14636pw_multi_aff::pw_multi_aff(const pw_multi_aff &obj)
14637    : ptr(nullptr)
14638{
14639  ptr = obj.copy();
14640}
14641
14642pw_multi_aff::pw_multi_aff(isl::checked::multi_aff ma)
14643{
14644  auto res = isl_pw_multi_aff_from_multi_aff(ma.release());
14645  ptr = res;
14646}
14647
14648pw_multi_aff::pw_multi_aff(isl::checked::pw_aff pa)
14649{
14650  auto res = isl_pw_multi_aff_from_pw_aff(pa.release());
14651  ptr = res;
14652}
14653
14654pw_multi_aff::pw_multi_aff(isl::checked::ctx ctx, const std::string &str)
14655{
14656  auto res = isl_pw_multi_aff_read_from_str(ctx.release(), str.c_str());
14657  ptr = res;
14658}
14659
14660pw_multi_aff &pw_multi_aff::operator=(pw_multi_aff obj) {
14661  std::swap(this->ptr, obj.ptr);
14662  return *this;
14663}
14664
14665pw_multi_aff::~pw_multi_aff() {
14666  if (ptr)
14667    isl_pw_multi_aff_free(ptr);
14668}
14669
14670__isl_give isl_pw_multi_aff *pw_multi_aff::copy() const & {
14671  return isl_pw_multi_aff_copy(ptr);
14672}
14673
14674__isl_keep isl_pw_multi_aff *pw_multi_aff::get() const {
14675  return ptr;
14676}
14677
14678__isl_give isl_pw_multi_aff *pw_multi_aff::release() {
14679  isl_pw_multi_aff *tmp = ptr;
14680  ptr = nullptr;
14681  return tmp;
14682}
14683
14684bool pw_multi_aff::is_null() const {
14685  return ptr == nullptr;
14686}
14687
14688isl::checked::ctx pw_multi_aff::ctx() const {
14689  return isl::checked::ctx(isl_pw_multi_aff_get_ctx(ptr));
14690}
14691
14692isl::checked::multi_pw_aff pw_multi_aff::add(const isl::checked::multi_pw_aff &multi2) const
14693{
14694  return isl::checked::multi_pw_aff(*this).add(multi2);
14695}
14696
14697isl::checked::multi_union_pw_aff pw_multi_aff::add(const isl::checked::multi_union_pw_aff &multi2) const
14698{
14699  return isl::checked::multi_pw_aff(*this).add(multi2);
14700}
14701
14702isl::checked::pw_multi_aff pw_multi_aff::add(isl::checked::pw_multi_aff pma2) const
14703{
14704  auto res = isl_pw_multi_aff_add(copy(), pma2.release());
14705  return manage(res);
14706}
14707
14708isl::checked::union_pw_multi_aff pw_multi_aff::add(const isl::checked::union_pw_multi_aff &upma2) const
14709{
14710  return isl::checked::union_pw_multi_aff(*this).add(upma2);
14711}
14712
14713isl::checked::pw_multi_aff pw_multi_aff::add(const isl::checked::multi_aff &pma2) const
14714{
14715  return this->add(isl::checked::pw_multi_aff(pma2));
14716}
14717
14718isl::checked::pw_multi_aff pw_multi_aff::add(const isl::checked::pw_aff &pma2) const
14719{
14720  return this->add(isl::checked::pw_multi_aff(pma2));
14721}
14722
14723isl::checked::pw_multi_aff pw_multi_aff::add_constant(isl::checked::multi_val mv) const
14724{
14725  auto res = isl_pw_multi_aff_add_constant_multi_val(copy(), mv.release());
14726  return manage(res);
14727}
14728
14729isl::checked::pw_multi_aff pw_multi_aff::add_constant(isl::checked::val v) const
14730{
14731  auto res = isl_pw_multi_aff_add_constant_val(copy(), v.release());
14732  return manage(res);
14733}
14734
14735isl::checked::pw_multi_aff pw_multi_aff::add_constant(long v) const
14736{
14737  return this->add_constant(isl::checked::val(ctx(), v));
14738}
14739
14740isl::checked::union_pw_multi_aff pw_multi_aff::apply(const isl::checked::union_pw_multi_aff &upma2) const
14741{
14742  return isl::checked::union_pw_multi_aff(*this).apply(upma2);
14743}
14744
14745isl::checked::map pw_multi_aff::as_map() const
14746{
14747  auto res = isl_pw_multi_aff_as_map(copy());
14748  return manage(res);
14749}
14750
14751isl::checked::multi_aff pw_multi_aff::as_multi_aff() const
14752{
14753  auto res = isl_pw_multi_aff_as_multi_aff(copy());
14754  return manage(res);
14755}
14756
14757isl::checked::multi_union_pw_aff pw_multi_aff::as_multi_union_pw_aff() const
14758{
14759  return isl::checked::union_pw_multi_aff(*this).as_multi_union_pw_aff();
14760}
14761
14762isl::checked::pw_multi_aff pw_multi_aff::as_pw_multi_aff() const
14763{
14764  return isl::checked::union_pw_multi_aff(*this).as_pw_multi_aff();
14765}
14766
14767isl::checked::set pw_multi_aff::as_set() const
14768{
14769  auto res = isl_pw_multi_aff_as_set(copy());
14770  return manage(res);
14771}
14772
14773isl::checked::union_map pw_multi_aff::as_union_map() const
14774{
14775  return isl::checked::union_pw_multi_aff(*this).as_union_map();
14776}
14777
14778isl::checked::pw_aff pw_multi_aff::at(int pos) const
14779{
14780  auto res = isl_pw_multi_aff_get_at(get(), pos);
14781  return manage(res);
14782}
14783
14784isl::checked::pw_aff pw_multi_aff::get_at(int pos) const
14785{
14786  return at(pos);
14787}
14788
14789isl::checked::set pw_multi_aff::bind(const isl::checked::multi_id &tuple) const
14790{
14791  return isl::checked::multi_pw_aff(*this).bind(tuple);
14792}
14793
14794isl::checked::pw_multi_aff pw_multi_aff::bind_domain(isl::checked::multi_id tuple) const
14795{
14796  auto res = isl_pw_multi_aff_bind_domain(copy(), tuple.release());
14797  return manage(res);
14798}
14799
14800isl::checked::pw_multi_aff pw_multi_aff::bind_domain_wrapped_domain(isl::checked::multi_id tuple) const
14801{
14802  auto res = isl_pw_multi_aff_bind_domain_wrapped_domain(copy(), tuple.release());
14803  return manage(res);
14804}
14805
14806isl::checked::pw_multi_aff pw_multi_aff::coalesce() const
14807{
14808  auto res = isl_pw_multi_aff_coalesce(copy());
14809  return manage(res);
14810}
14811
14812isl::checked::set pw_multi_aff::domain() const
14813{
14814  auto res = isl_pw_multi_aff_domain(copy());
14815  return manage(res);
14816}
14817
14818isl::checked::pw_multi_aff pw_multi_aff::domain_map(isl::checked::space space)
14819{
14820  auto res = isl_pw_multi_aff_domain_map(space.release());
14821  return manage(res);
14822}
14823
14824isl::checked::pw_multi_aff pw_multi_aff::domain_reverse() const
14825{
14826  auto res = isl_pw_multi_aff_domain_reverse(copy());
14827  return manage(res);
14828}
14829
14830isl::checked::pw_multi_aff pw_multi_aff::drop_unused_params() const
14831{
14832  auto res = isl_pw_multi_aff_drop_unused_params(copy());
14833  return manage(res);
14834}
14835
14836isl::checked::pw_multi_aff pw_multi_aff::extract_pw_multi_aff(const isl::checked::space &space) const
14837{
14838  return isl::checked::union_pw_multi_aff(*this).extract_pw_multi_aff(space);
14839}
14840
14841isl::checked::multi_pw_aff pw_multi_aff::flat_range_product(const isl::checked::multi_pw_aff &multi2) const
14842{
14843  return isl::checked::multi_pw_aff(*this).flat_range_product(multi2);
14844}
14845
14846isl::checked::multi_union_pw_aff pw_multi_aff::flat_range_product(const isl::checked::multi_union_pw_aff &multi2) const
14847{
14848  return isl::checked::multi_pw_aff(*this).flat_range_product(multi2);
14849}
14850
14851isl::checked::pw_multi_aff pw_multi_aff::flat_range_product(isl::checked::pw_multi_aff pma2) const
14852{
14853  auto res = isl_pw_multi_aff_flat_range_product(copy(), pma2.release());
14854  return manage(res);
14855}
14856
14857isl::checked::union_pw_multi_aff pw_multi_aff::flat_range_product(const isl::checked::union_pw_multi_aff &upma2) const
14858{
14859  return isl::checked::union_pw_multi_aff(*this).flat_range_product(upma2);
14860}
14861
14862isl::checked::pw_multi_aff pw_multi_aff::flat_range_product(const isl::checked::multi_aff &pma2) const
14863{
14864  return this->flat_range_product(isl::checked::pw_multi_aff(pma2));
14865}
14866
14867isl::checked::pw_multi_aff pw_multi_aff::flat_range_product(const isl::checked::pw_aff &pma2) const
14868{
14869  return this->flat_range_product(isl::checked::pw_multi_aff(pma2));
14870}
14871
14872stat pw_multi_aff::foreach_piece(const std::function<stat(isl::checked::set, isl::checked::multi_aff)> &fn) const
14873{
14874  struct fn_data {
14875    std::function<stat(isl::checked::set, isl::checked::multi_aff)> func;
14876  } fn_data = { fn };
14877  auto fn_lambda = [](isl_set *arg_0, isl_multi_aff *arg_1, void *arg_2) -> isl_stat {
14878    auto *data = static_cast<struct fn_data *>(arg_2);
14879    auto ret = (data->func)(manage(arg_0), manage(arg_1));
14880    return ret.release();
14881  };
14882  auto res = isl_pw_multi_aff_foreach_piece(get(), fn_lambda, &fn_data);
14883  return manage(res);
14884}
14885
14886isl::checked::pw_multi_aff pw_multi_aff::gist(isl::checked::set set) const
14887{
14888  auto res = isl_pw_multi_aff_gist(copy(), set.release());
14889  return manage(res);
14890}
14891
14892isl::checked::union_pw_multi_aff pw_multi_aff::gist(const isl::checked::union_set &context) const
14893{
14894  return isl::checked::union_pw_multi_aff(*this).gist(context);
14895}
14896
14897isl::checked::pw_multi_aff pw_multi_aff::gist(const isl::checked::basic_set &set) const
14898{
14899  return this->gist(isl::checked::set(set));
14900}
14901
14902isl::checked::pw_multi_aff pw_multi_aff::gist(const isl::checked::point &set) const
14903{
14904  return this->gist(isl::checked::set(set));
14905}
14906
14907isl::checked::pw_multi_aff pw_multi_aff::gist_params(isl::checked::set set) const
14908{
14909  auto res = isl_pw_multi_aff_gist_params(copy(), set.release());
14910  return manage(res);
14911}
14912
14913boolean pw_multi_aff::has_range_tuple_id() const
14914{
14915  auto res = isl_pw_multi_aff_has_range_tuple_id(get());
14916  return manage(res);
14917}
14918
14919isl::checked::multi_pw_aff pw_multi_aff::identity() const
14920{
14921  return isl::checked::multi_pw_aff(*this).identity();
14922}
14923
14924isl::checked::pw_multi_aff pw_multi_aff::identity_on_domain(isl::checked::space space)
14925{
14926  auto res = isl_pw_multi_aff_identity_on_domain_space(space.release());
14927  return manage(res);
14928}
14929
14930isl::checked::pw_multi_aff pw_multi_aff::insert_domain(isl::checked::space domain) const
14931{
14932  auto res = isl_pw_multi_aff_insert_domain(copy(), domain.release());
14933  return manage(res);
14934}
14935
14936isl::checked::pw_multi_aff pw_multi_aff::intersect_domain(isl::checked::set set) const
14937{
14938  auto res = isl_pw_multi_aff_intersect_domain(copy(), set.release());
14939  return manage(res);
14940}
14941
14942isl::checked::union_pw_multi_aff pw_multi_aff::intersect_domain(const isl::checked::space &space) const
14943{
14944  return isl::checked::union_pw_multi_aff(*this).intersect_domain(space);
14945}
14946
14947isl::checked::union_pw_multi_aff pw_multi_aff::intersect_domain(const isl::checked::union_set &uset) const
14948{
14949  return isl::checked::union_pw_multi_aff(*this).intersect_domain(uset);
14950}
14951
14952isl::checked::pw_multi_aff pw_multi_aff::intersect_domain(const isl::checked::basic_set &set) const
14953{
14954  return this->intersect_domain(isl::checked::set(set));
14955}
14956
14957isl::checked::pw_multi_aff pw_multi_aff::intersect_domain(const isl::checked::point &set) const
14958{
14959  return this->intersect_domain(isl::checked::set(set));
14960}
14961
14962isl::checked::union_pw_multi_aff pw_multi_aff::intersect_domain_wrapped_domain(const isl::checked::union_set &uset) const
14963{
14964  return isl::checked::union_pw_multi_aff(*this).intersect_domain_wrapped_domain(uset);
14965}
14966
14967isl::checked::union_pw_multi_aff pw_multi_aff::intersect_domain_wrapped_range(const isl::checked::union_set &uset) const
14968{
14969  return isl::checked::union_pw_multi_aff(*this).intersect_domain_wrapped_range(uset);
14970}
14971
14972isl::checked::pw_multi_aff pw_multi_aff::intersect_params(isl::checked::set set) const
14973{
14974  auto res = isl_pw_multi_aff_intersect_params(copy(), set.release());
14975  return manage(res);
14976}
14977
14978boolean pw_multi_aff::involves_locals() const
14979{
14980  auto res = isl_pw_multi_aff_involves_locals(get());
14981  return manage(res);
14982}
14983
14984boolean pw_multi_aff::involves_nan() const
14985{
14986  return isl::checked::multi_pw_aff(*this).involves_nan();
14987}
14988
14989boolean pw_multi_aff::involves_param(const isl::checked::id &id) const
14990{
14991  return isl::checked::multi_pw_aff(*this).involves_param(id);
14992}
14993
14994boolean pw_multi_aff::involves_param(const std::string &id) const
14995{
14996  return this->involves_param(isl::checked::id(ctx(), id));
14997}
14998
14999boolean pw_multi_aff::involves_param(const isl::checked::id_list &list) const
15000{
15001  return isl::checked::multi_pw_aff(*this).involves_param(list);
15002}
15003
15004boolean pw_multi_aff::isa_multi_aff() const
15005{
15006  auto res = isl_pw_multi_aff_isa_multi_aff(get());
15007  return manage(res);
15008}
15009
15010boolean pw_multi_aff::isa_pw_multi_aff() const
15011{
15012  return isl::checked::union_pw_multi_aff(*this).isa_pw_multi_aff();
15013}
15014
15015isl::checked::pw_aff_list pw_multi_aff::list() const
15016{
15017  return isl::checked::multi_pw_aff(*this).list();
15018}
15019
15020isl::checked::multi_pw_aff pw_multi_aff::max(const isl::checked::multi_pw_aff &multi2) const
15021{
15022  return isl::checked::multi_pw_aff(*this).max(multi2);
15023}
15024
15025isl::checked::multi_val pw_multi_aff::max_multi_val() const
15026{
15027  auto res = isl_pw_multi_aff_max_multi_val(copy());
15028  return manage(res);
15029}
15030
15031isl::checked::multi_pw_aff pw_multi_aff::min(const isl::checked::multi_pw_aff &multi2) const
15032{
15033  return isl::checked::multi_pw_aff(*this).min(multi2);
15034}
15035
15036isl::checked::multi_val pw_multi_aff::min_multi_val() const
15037{
15038  auto res = isl_pw_multi_aff_min_multi_val(copy());
15039  return manage(res);
15040}
15041
15042isl::checked::pw_multi_aff pw_multi_aff::multi_val_on_domain(isl::checked::set domain, isl::checked::multi_val mv)
15043{
15044  auto res = isl_pw_multi_aff_multi_val_on_domain(domain.release(), mv.release());
15045  return manage(res);
15046}
15047
15048class size pw_multi_aff::n_piece() const
15049{
15050  auto res = isl_pw_multi_aff_n_piece(get());
15051  return manage(res);
15052}
15053
15054isl::checked::multi_pw_aff pw_multi_aff::neg() const
15055{
15056  return isl::checked::multi_pw_aff(*this).neg();
15057}
15058
15059boolean pw_multi_aff::plain_is_empty() const
15060{
15061  return isl::checked::union_pw_multi_aff(*this).plain_is_empty();
15062}
15063
15064boolean pw_multi_aff::plain_is_equal(const isl::checked::multi_pw_aff &multi2) const
15065{
15066  return isl::checked::multi_pw_aff(*this).plain_is_equal(multi2);
15067}
15068
15069boolean pw_multi_aff::plain_is_equal(const isl::checked::multi_union_pw_aff &multi2) const
15070{
15071  return isl::checked::multi_pw_aff(*this).plain_is_equal(multi2);
15072}
15073
15074boolean pw_multi_aff::plain_is_equal(const isl::checked::pw_multi_aff &pma2) const
15075{
15076  auto res = isl_pw_multi_aff_plain_is_equal(get(), pma2.get());
15077  return manage(res);
15078}
15079
15080boolean pw_multi_aff::plain_is_equal(const isl::checked::union_pw_multi_aff &upma2) const
15081{
15082  return isl::checked::union_pw_multi_aff(*this).plain_is_equal(upma2);
15083}
15084
15085boolean pw_multi_aff::plain_is_equal(const isl::checked::multi_aff &pma2) const
15086{
15087  return this->plain_is_equal(isl::checked::pw_multi_aff(pma2));
15088}
15089
15090boolean pw_multi_aff::plain_is_equal(const isl::checked::pw_aff &pma2) const
15091{
15092  return this->plain_is_equal(isl::checked::pw_multi_aff(pma2));
15093}
15094
15095isl::checked::pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(isl::checked::pw_multi_aff pma2) const
15096{
15097  auto res = isl_pw_multi_aff_preimage_domain_wrapped_domain_pw_multi_aff(copy(), pma2.release());
15098  return manage(res);
15099}
15100
15101isl::checked::union_pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(const isl::checked::union_pw_multi_aff &upma2) const
15102{
15103  return isl::checked::union_pw_multi_aff(*this).preimage_domain_wrapped_domain(upma2);
15104}
15105
15106isl::checked::pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(const isl::checked::multi_aff &pma2) const
15107{
15108  return this->preimage_domain_wrapped_domain(isl::checked::pw_multi_aff(pma2));
15109}
15110
15111isl::checked::pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(const isl::checked::pw_aff &pma2) const
15112{
15113  return this->preimage_domain_wrapped_domain(isl::checked::pw_multi_aff(pma2));
15114}
15115
15116isl::checked::multi_pw_aff pw_multi_aff::product(const isl::checked::multi_pw_aff &multi2) const
15117{
15118  return isl::checked::multi_pw_aff(*this).product(multi2);
15119}
15120
15121isl::checked::pw_multi_aff pw_multi_aff::product(isl::checked::pw_multi_aff pma2) const
15122{
15123  auto res = isl_pw_multi_aff_product(copy(), pma2.release());
15124  return manage(res);
15125}
15126
15127isl::checked::pw_multi_aff pw_multi_aff::product(const isl::checked::multi_aff &pma2) const
15128{
15129  return this->product(isl::checked::pw_multi_aff(pma2));
15130}
15131
15132isl::checked::pw_multi_aff pw_multi_aff::product(const isl::checked::pw_aff &pma2) const
15133{
15134  return this->product(isl::checked::pw_multi_aff(pma2));
15135}
15136
15137isl::checked::multi_pw_aff pw_multi_aff::pullback(const isl::checked::multi_pw_aff &mpa2) const
15138{
15139  return isl::checked::multi_pw_aff(*this).pullback(mpa2);
15140}
15141
15142isl::checked::pw_multi_aff pw_multi_aff::pullback(isl::checked::multi_aff ma) const
15143{
15144  auto res = isl_pw_multi_aff_pullback_multi_aff(copy(), ma.release());
15145  return manage(res);
15146}
15147
15148isl::checked::pw_multi_aff pw_multi_aff::pullback(isl::checked::pw_multi_aff pma2) const
15149{
15150  auto res = isl_pw_multi_aff_pullback_pw_multi_aff(copy(), pma2.release());
15151  return manage(res);
15152}
15153
15154isl::checked::union_pw_multi_aff pw_multi_aff::pullback(const isl::checked::union_pw_multi_aff &upma2) const
15155{
15156  return isl::checked::union_pw_multi_aff(*this).pullback(upma2);
15157}
15158
15159isl::checked::pw_multi_aff_list pw_multi_aff::pw_multi_aff_list() const
15160{
15161  return isl::checked::union_pw_multi_aff(*this).pw_multi_aff_list();
15162}
15163
15164isl::checked::pw_multi_aff pw_multi_aff::range_factor_domain() const
15165{
15166  auto res = isl_pw_multi_aff_range_factor_domain(copy());
15167  return manage(res);
15168}
15169
15170isl::checked::pw_multi_aff pw_multi_aff::range_factor_range() const
15171{
15172  auto res = isl_pw_multi_aff_range_factor_range(copy());
15173  return manage(res);
15174}
15175
15176isl::checked::pw_multi_aff pw_multi_aff::range_map(isl::checked::space space)
15177{
15178  auto res = isl_pw_multi_aff_range_map(space.release());
15179  return manage(res);
15180}
15181
15182isl::checked::multi_pw_aff pw_multi_aff::range_product(const isl::checked::multi_pw_aff &multi2) const
15183{
15184  return isl::checked::multi_pw_aff(*this).range_product(multi2);
15185}
15186
15187isl::checked::multi_union_pw_aff pw_multi_aff::range_product(const isl::checked::multi_union_pw_aff &multi2) const
15188{
15189  return isl::checked::multi_pw_aff(*this).range_product(multi2);
15190}
15191
15192isl::checked::pw_multi_aff pw_multi_aff::range_product(isl::checked::pw_multi_aff pma2) const
15193{
15194  auto res = isl_pw_multi_aff_range_product(copy(), pma2.release());
15195  return manage(res);
15196}
15197
15198isl::checked::union_pw_multi_aff pw_multi_aff::range_product(const isl::checked::union_pw_multi_aff &upma2) const
15199{
15200  return isl::checked::union_pw_multi_aff(*this).range_product(upma2);
15201}
15202
15203isl::checked::pw_multi_aff pw_multi_aff::range_product(const isl::checked::multi_aff &pma2) const
15204{
15205  return this->range_product(isl::checked::pw_multi_aff(pma2));
15206}
15207
15208isl::checked::pw_multi_aff pw_multi_aff::range_product(const isl::checked::pw_aff &pma2) const
15209{
15210  return this->range_product(isl::checked::pw_multi_aff(pma2));
15211}
15212
15213isl::checked::id pw_multi_aff::range_tuple_id() const
15214{
15215  auto res = isl_pw_multi_aff_get_range_tuple_id(get());
15216  return manage(res);
15217}
15218
15219isl::checked::id pw_multi_aff::get_range_tuple_id() const
15220{
15221  return range_tuple_id();
15222}
15223
15224isl::checked::multi_pw_aff pw_multi_aff::reset_range_tuple_id() const
15225{
15226  return isl::checked::multi_pw_aff(*this).reset_range_tuple_id();
15227}
15228
15229isl::checked::pw_multi_aff pw_multi_aff::scale(isl::checked::multi_val mv) const
15230{
15231  auto res = isl_pw_multi_aff_scale_multi_val(copy(), mv.release());
15232  return manage(res);
15233}
15234
15235isl::checked::pw_multi_aff pw_multi_aff::scale(isl::checked::val v) const
15236{
15237  auto res = isl_pw_multi_aff_scale_val(copy(), v.release());
15238  return manage(res);
15239}
15240
15241isl::checked::pw_multi_aff pw_multi_aff::scale(long v) const
15242{
15243  return this->scale(isl::checked::val(ctx(), v));
15244}
15245
15246isl::checked::pw_multi_aff pw_multi_aff::scale_down(isl::checked::multi_val mv) const
15247{
15248  auto res = isl_pw_multi_aff_scale_down_multi_val(copy(), mv.release());
15249  return manage(res);
15250}
15251
15252isl::checked::pw_multi_aff pw_multi_aff::scale_down(isl::checked::val v) const
15253{
15254  auto res = isl_pw_multi_aff_scale_down_val(copy(), v.release());
15255  return manage(res);
15256}
15257
15258isl::checked::pw_multi_aff pw_multi_aff::scale_down(long v) const
15259{
15260  return this->scale_down(isl::checked::val(ctx(), v));
15261}
15262
15263isl::checked::multi_pw_aff pw_multi_aff::set_at(int pos, const isl::checked::pw_aff &el) const
15264{
15265  return isl::checked::multi_pw_aff(*this).set_at(pos, el);
15266}
15267
15268isl::checked::multi_union_pw_aff pw_multi_aff::set_at(int pos, const isl::checked::union_pw_aff &el) const
15269{
15270  return isl::checked::multi_pw_aff(*this).set_at(pos, el);
15271}
15272
15273isl::checked::pw_multi_aff pw_multi_aff::set_range_tuple(isl::checked::id id) const
15274{
15275  auto res = isl_pw_multi_aff_set_range_tuple_id(copy(), id.release());
15276  return manage(res);
15277}
15278
15279isl::checked::pw_multi_aff pw_multi_aff::set_range_tuple(const std::string &id) const
15280{
15281  return this->set_range_tuple(isl::checked::id(ctx(), id));
15282}
15283
15284class size pw_multi_aff::size() const
15285{
15286  return isl::checked::multi_pw_aff(*this).size();
15287}
15288
15289isl::checked::space pw_multi_aff::space() const
15290{
15291  auto res = isl_pw_multi_aff_get_space(get());
15292  return manage(res);
15293}
15294
15295isl::checked::space pw_multi_aff::get_space() const
15296{
15297  return space();
15298}
15299
15300isl::checked::multi_pw_aff pw_multi_aff::sub(const isl::checked::multi_pw_aff &multi2) const
15301{
15302  return isl::checked::multi_pw_aff(*this).sub(multi2);
15303}
15304
15305isl::checked::multi_union_pw_aff pw_multi_aff::sub(const isl::checked::multi_union_pw_aff &multi2) const
15306{
15307  return isl::checked::multi_pw_aff(*this).sub(multi2);
15308}
15309
15310isl::checked::pw_multi_aff pw_multi_aff::sub(isl::checked::pw_multi_aff pma2) const
15311{
15312  auto res = isl_pw_multi_aff_sub(copy(), pma2.release());
15313  return manage(res);
15314}
15315
15316isl::checked::union_pw_multi_aff pw_multi_aff::sub(const isl::checked::union_pw_multi_aff &upma2) const
15317{
15318  return isl::checked::union_pw_multi_aff(*this).sub(upma2);
15319}
15320
15321isl::checked::pw_multi_aff pw_multi_aff::sub(const isl::checked::multi_aff &pma2) const
15322{
15323  return this->sub(isl::checked::pw_multi_aff(pma2));
15324}
15325
15326isl::checked::pw_multi_aff pw_multi_aff::sub(const isl::checked::pw_aff &pma2) const
15327{
15328  return this->sub(isl::checked::pw_multi_aff(pma2));
15329}
15330
15331isl::checked::pw_multi_aff pw_multi_aff::subtract_domain(isl::checked::set set) const
15332{
15333  auto res = isl_pw_multi_aff_subtract_domain(copy(), set.release());
15334  return manage(res);
15335}
15336
15337isl::checked::union_pw_multi_aff pw_multi_aff::subtract_domain(const isl::checked::space &space) const
15338{
15339  return isl::checked::union_pw_multi_aff(*this).subtract_domain(space);
15340}
15341
15342isl::checked::union_pw_multi_aff pw_multi_aff::subtract_domain(const isl::checked::union_set &uset) const
15343{
15344  return isl::checked::union_pw_multi_aff(*this).subtract_domain(uset);
15345}
15346
15347isl::checked::pw_multi_aff pw_multi_aff::subtract_domain(const isl::checked::basic_set &set) const
15348{
15349  return this->subtract_domain(isl::checked::set(set));
15350}
15351
15352isl::checked::pw_multi_aff pw_multi_aff::subtract_domain(const isl::checked::point &set) const
15353{
15354  return this->subtract_domain(isl::checked::set(set));
15355}
15356
15357isl::checked::pw_multi_aff_list pw_multi_aff::to_list() const
15358{
15359  auto res = isl_pw_multi_aff_to_list(copy());
15360  return manage(res);
15361}
15362
15363isl::checked::multi_pw_aff pw_multi_aff::to_multi_pw_aff() const
15364{
15365  auto res = isl_pw_multi_aff_to_multi_pw_aff(copy());
15366  return manage(res);
15367}
15368
15369isl::checked::union_pw_multi_aff pw_multi_aff::to_union_pw_multi_aff() const
15370{
15371  auto res = isl_pw_multi_aff_to_union_pw_multi_aff(copy());
15372  return manage(res);
15373}
15374
15375isl::checked::multi_pw_aff pw_multi_aff::unbind_params_insert_domain(const isl::checked::multi_id &domain) const
15376{
15377  return isl::checked::multi_pw_aff(*this).unbind_params_insert_domain(domain);
15378}
15379
15380isl::checked::multi_pw_aff pw_multi_aff::union_add(const isl::checked::multi_pw_aff &mpa2) const
15381{
15382  return isl::checked::multi_pw_aff(*this).union_add(mpa2);
15383}
15384
15385isl::checked::multi_union_pw_aff pw_multi_aff::union_add(const isl::checked::multi_union_pw_aff &mupa2) const
15386{
15387  return isl::checked::multi_pw_aff(*this).union_add(mupa2);
15388}
15389
15390isl::checked::pw_multi_aff pw_multi_aff::union_add(isl::checked::pw_multi_aff pma2) const
15391{
15392  auto res = isl_pw_multi_aff_union_add(copy(), pma2.release());
15393  return manage(res);
15394}
15395
15396isl::checked::union_pw_multi_aff pw_multi_aff::union_add(const isl::checked::union_pw_multi_aff &upma2) const
15397{
15398  return isl::checked::union_pw_multi_aff(*this).union_add(upma2);
15399}
15400
15401isl::checked::pw_multi_aff pw_multi_aff::union_add(const isl::checked::multi_aff &pma2) const
15402{
15403  return this->union_add(isl::checked::pw_multi_aff(pma2));
15404}
15405
15406isl::checked::pw_multi_aff pw_multi_aff::union_add(const isl::checked::pw_aff &pma2) const
15407{
15408  return this->union_add(isl::checked::pw_multi_aff(pma2));
15409}
15410
15411isl::checked::pw_multi_aff pw_multi_aff::zero(isl::checked::space space)
15412{
15413  auto res = isl_pw_multi_aff_zero(space.release());
15414  return manage(res);
15415}
15416
15417inline std::ostream &operator<<(std::ostream &os, const pw_multi_aff &obj)
15418{
15419  char *str = isl_pw_multi_aff_to_str(obj.get());
15420  if (!str) {
15421    os.setstate(std::ios_base::badbit);
15422    return os;
15423  }
15424  os << str;
15425  free(str);
15426  return os;
15427}
15428
15429// implementations for isl::pw_multi_aff_list
15430pw_multi_aff_list manage(__isl_take isl_pw_multi_aff_list *ptr) {
15431  return pw_multi_aff_list(ptr);
15432}
15433pw_multi_aff_list manage_copy(__isl_keep isl_pw_multi_aff_list *ptr) {
15434  ptr = isl_pw_multi_aff_list_copy(ptr);
15435  return pw_multi_aff_list(ptr);
15436}
15437
15438pw_multi_aff_list::pw_multi_aff_list(__isl_take isl_pw_multi_aff_list *ptr)
15439    : ptr(ptr) {}
15440
15441pw_multi_aff_list::pw_multi_aff_list()
15442    : ptr(nullptr) {}
15443
15444pw_multi_aff_list::pw_multi_aff_list(const pw_multi_aff_list &obj)
15445    : ptr(nullptr)
15446{
15447  ptr = obj.copy();
15448}
15449
15450pw_multi_aff_list::pw_multi_aff_list(isl::checked::ctx ctx, int n)
15451{
15452  auto res = isl_pw_multi_aff_list_alloc(ctx.release(), n);
15453  ptr = res;
15454}
15455
15456pw_multi_aff_list::pw_multi_aff_list(isl::checked::pw_multi_aff el)
15457{
15458  auto res = isl_pw_multi_aff_list_from_pw_multi_aff(el.release());
15459  ptr = res;
15460}
15461
15462pw_multi_aff_list::pw_multi_aff_list(isl::checked::ctx ctx, const std::string &str)
15463{
15464  auto res = isl_pw_multi_aff_list_read_from_str(ctx.release(), str.c_str());
15465  ptr = res;
15466}
15467
15468pw_multi_aff_list &pw_multi_aff_list::operator=(pw_multi_aff_list obj) {
15469  std::swap(this->ptr, obj.ptr);
15470  return *this;
15471}
15472
15473pw_multi_aff_list::~pw_multi_aff_list() {
15474  if (ptr)
15475    isl_pw_multi_aff_list_free(ptr);
15476}
15477
15478__isl_give isl_pw_multi_aff_list *pw_multi_aff_list::copy() const & {
15479  return isl_pw_multi_aff_list_copy(ptr);
15480}
15481
15482__isl_keep isl_pw_multi_aff_list *pw_multi_aff_list::get() const {
15483  return ptr;
15484}
15485
15486__isl_give isl_pw_multi_aff_list *pw_multi_aff_list::release() {
15487  isl_pw_multi_aff_list *tmp = ptr;
15488  ptr = nullptr;
15489  return tmp;
15490}
15491
15492bool pw_multi_aff_list::is_null() const {
15493  return ptr == nullptr;
15494}
15495
15496isl::checked::ctx pw_multi_aff_list::ctx() const {
15497  return isl::checked::ctx(isl_pw_multi_aff_list_get_ctx(ptr));
15498}
15499
15500isl::checked::pw_multi_aff_list pw_multi_aff_list::add(isl::checked::pw_multi_aff el) const
15501{
15502  auto res = isl_pw_multi_aff_list_add(copy(), el.release());
15503  return manage(res);
15504}
15505
15506isl::checked::pw_multi_aff pw_multi_aff_list::at(int index) const
15507{
15508  auto res = isl_pw_multi_aff_list_get_at(get(), index);
15509  return manage(res);
15510}
15511
15512isl::checked::pw_multi_aff pw_multi_aff_list::get_at(int index) const
15513{
15514  return at(index);
15515}
15516
15517isl::checked::pw_multi_aff_list pw_multi_aff_list::clear() const
15518{
15519  auto res = isl_pw_multi_aff_list_clear(copy());
15520  return manage(res);
15521}
15522
15523isl::checked::pw_multi_aff_list pw_multi_aff_list::concat(isl::checked::pw_multi_aff_list list2) const
15524{
15525  auto res = isl_pw_multi_aff_list_concat(copy(), list2.release());
15526  return manage(res);
15527}
15528
15529isl::checked::pw_multi_aff_list pw_multi_aff_list::drop(unsigned int first, unsigned int n) const
15530{
15531  auto res = isl_pw_multi_aff_list_drop(copy(), first, n);
15532  return manage(res);
15533}
15534
15535stat pw_multi_aff_list::foreach(const std::function<stat(isl::checked::pw_multi_aff)> &fn) const
15536{
15537  struct fn_data {
15538    std::function<stat(isl::checked::pw_multi_aff)> func;
15539  } fn_data = { fn };
15540  auto fn_lambda = [](isl_pw_multi_aff *arg_0, void *arg_1) -> isl_stat {
15541    auto *data = static_cast<struct fn_data *>(arg_1);
15542    auto ret = (data->func)(manage(arg_0));
15543    return ret.release();
15544  };
15545  auto res = isl_pw_multi_aff_list_foreach(get(), fn_lambda, &fn_data);
15546  return manage(res);
15547}
15548
15549stat pw_multi_aff_list::foreach_scc(const std::function<boolean(isl::checked::pw_multi_aff, isl::checked::pw_multi_aff)> &follows, const std::function<stat(isl::checked::pw_multi_aff_list)> &fn) const
15550{
15551  struct follows_data {
15552    std::function<boolean(isl::checked::pw_multi_aff, isl::checked::pw_multi_aff)> func;
15553  } follows_data = { follows };
15554  auto follows_lambda = [](isl_pw_multi_aff *arg_0, isl_pw_multi_aff *arg_1, void *arg_2) -> isl_bool {
15555    auto *data = static_cast<struct follows_data *>(arg_2);
15556    auto ret = (data->func)(manage_copy(arg_0), manage_copy(arg_1));
15557    return ret.release();
15558  };
15559  struct fn_data {
15560    std::function<stat(isl::checked::pw_multi_aff_list)> func;
15561  } fn_data = { fn };
15562  auto fn_lambda = [](isl_pw_multi_aff_list *arg_0, void *arg_1) -> isl_stat {
15563    auto *data = static_cast<struct fn_data *>(arg_1);
15564    auto ret = (data->func)(manage(arg_0));
15565    return ret.release();
15566  };
15567  auto res = isl_pw_multi_aff_list_foreach_scc(get(), follows_lambda, &follows_data, fn_lambda, &fn_data);
15568  return manage(res);
15569}
15570
15571isl::checked::pw_multi_aff_list pw_multi_aff_list::insert(unsigned int pos, isl::checked::pw_multi_aff el) const
15572{
15573  auto res = isl_pw_multi_aff_list_insert(copy(), pos, el.release());
15574  return manage(res);
15575}
15576
15577isl::checked::pw_multi_aff_list pw_multi_aff_list::set_at(int index, isl::checked::pw_multi_aff el) const
15578{
15579  auto res = isl_pw_multi_aff_list_set_at(copy(), index, el.release());
15580  return manage(res);
15581}
15582
15583class size pw_multi_aff_list::size() const
15584{
15585  auto res = isl_pw_multi_aff_list_size(get());
15586  return manage(res);
15587}
15588
15589inline std::ostream &operator<<(std::ostream &os, const pw_multi_aff_list &obj)
15590{
15591  char *str = isl_pw_multi_aff_list_to_str(obj.get());
15592  if (!str) {
15593    os.setstate(std::ios_base::badbit);
15594    return os;
15595  }
15596  os << str;
15597  free(str);
15598  return os;
15599}
15600
15601// implementations for isl::schedule
15602schedule manage(__isl_take isl_schedule *ptr) {
15603  return schedule(ptr);
15604}
15605schedule manage_copy(__isl_keep isl_schedule *ptr) {
15606  ptr = isl_schedule_copy(ptr);
15607  return schedule(ptr);
15608}
15609
15610schedule::schedule(__isl_take isl_schedule *ptr)
15611    : ptr(ptr) {}
15612
15613schedule::schedule()
15614    : ptr(nullptr) {}
15615
15616schedule::schedule(const schedule &obj)
15617    : ptr(nullptr)
15618{
15619  ptr = obj.copy();
15620}
15621
15622schedule::schedule(isl::checked::ctx ctx, const std::string &str)
15623{
15624  auto res = isl_schedule_read_from_str(ctx.release(), str.c_str());
15625  ptr = res;
15626}
15627
15628schedule &schedule::operator=(schedule obj) {
15629  std::swap(this->ptr, obj.ptr);
15630  return *this;
15631}
15632
15633schedule::~schedule() {
15634  if (ptr)
15635    isl_schedule_free(ptr);
15636}
15637
15638__isl_give isl_schedule *schedule::copy() const & {
15639  return isl_schedule_copy(ptr);
15640}
15641
15642__isl_keep isl_schedule *schedule::get() const {
15643  return ptr;
15644}
15645
15646__isl_give isl_schedule *schedule::release() {
15647  isl_schedule *tmp = ptr;
15648  ptr = nullptr;
15649  return tmp;
15650}
15651
15652bool schedule::is_null() const {
15653  return ptr == nullptr;
15654}
15655
15656isl::checked::ctx schedule::ctx() const {
15657  return isl::checked::ctx(isl_schedule_get_ctx(ptr));
15658}
15659
15660isl::checked::union_set schedule::domain() const
15661{
15662  auto res = isl_schedule_get_domain(get());
15663  return manage(res);
15664}
15665
15666isl::checked::union_set schedule::get_domain() const
15667{
15668  return domain();
15669}
15670
15671isl::checked::schedule schedule::from_domain(isl::checked::union_set domain)
15672{
15673  auto res = isl_schedule_from_domain(domain.release());
15674  return manage(res);
15675}
15676
15677isl::checked::union_map schedule::map() const
15678{
15679  auto res = isl_schedule_get_map(get());
15680  return manage(res);
15681}
15682
15683isl::checked::union_map schedule::get_map() const
15684{
15685  return map();
15686}
15687
15688isl::checked::schedule schedule::pullback(isl::checked::union_pw_multi_aff upma) const
15689{
15690  auto res = isl_schedule_pullback_union_pw_multi_aff(copy(), upma.release());
15691  return manage(res);
15692}
15693
15694isl::checked::schedule_node schedule::root() const
15695{
15696  auto res = isl_schedule_get_root(get());
15697  return manage(res);
15698}
15699
15700isl::checked::schedule_node schedule::get_root() const
15701{
15702  return root();
15703}
15704
15705inline std::ostream &operator<<(std::ostream &os, const schedule &obj)
15706{
15707  char *str = isl_schedule_to_str(obj.get());
15708  if (!str) {
15709    os.setstate(std::ios_base::badbit);
15710    return os;
15711  }
15712  os << str;
15713  free(str);
15714  return os;
15715}
15716
15717// implementations for isl::schedule_constraints
15718schedule_constraints manage(__isl_take isl_schedule_constraints *ptr) {
15719  return schedule_constraints(ptr);
15720}
15721schedule_constraints manage_copy(__isl_keep isl_schedule_constraints *ptr) {
15722  ptr = isl_schedule_constraints_copy(ptr);
15723  return schedule_constraints(ptr);
15724}
15725
15726schedule_constraints::schedule_constraints(__isl_take isl_schedule_constraints *ptr)
15727    : ptr(ptr) {}
15728
15729schedule_constraints::schedule_constraints()
15730    : ptr(nullptr) {}
15731
15732schedule_constraints::schedule_constraints(const schedule_constraints &obj)
15733    : ptr(nullptr)
15734{
15735  ptr = obj.copy();
15736}
15737
15738schedule_constraints::schedule_constraints(isl::checked::ctx ctx, const std::string &str)
15739{
15740  auto res = isl_schedule_constraints_read_from_str(ctx.release(), str.c_str());
15741  ptr = res;
15742}
15743
15744schedule_constraints &schedule_constraints::operator=(schedule_constraints obj) {
15745  std::swap(this->ptr, obj.ptr);
15746  return *this;
15747}
15748
15749schedule_constraints::~schedule_constraints() {
15750  if (ptr)
15751    isl_schedule_constraints_free(ptr);
15752}
15753
15754__isl_give isl_schedule_constraints *schedule_constraints::copy() const & {
15755  return isl_schedule_constraints_copy(ptr);
15756}
15757
15758__isl_keep isl_schedule_constraints *schedule_constraints::get() const {
15759  return ptr;
15760}
15761
15762__isl_give isl_schedule_constraints *schedule_constraints::release() {
15763  isl_schedule_constraints *tmp = ptr;
15764  ptr = nullptr;
15765  return tmp;
15766}
15767
15768bool schedule_constraints::is_null() const {
15769  return ptr == nullptr;
15770}
15771
15772isl::checked::ctx schedule_constraints::ctx() const {
15773  return isl::checked::ctx(isl_schedule_constraints_get_ctx(ptr));
15774}
15775
15776isl::checked::union_map schedule_constraints::coincidence() const
15777{
15778  auto res = isl_schedule_constraints_get_coincidence(get());
15779  return manage(res);
15780}
15781
15782isl::checked::union_map schedule_constraints::get_coincidence() const
15783{
15784  return coincidence();
15785}
15786
15787isl::checked::schedule schedule_constraints::compute_schedule() const
15788{
15789  auto res = isl_schedule_constraints_compute_schedule(copy());
15790  return manage(res);
15791}
15792
15793isl::checked::union_map schedule_constraints::conditional_validity() const
15794{
15795  auto res = isl_schedule_constraints_get_conditional_validity(get());
15796  return manage(res);
15797}
15798
15799isl::checked::union_map schedule_constraints::get_conditional_validity() const
15800{
15801  return conditional_validity();
15802}
15803
15804isl::checked::union_map schedule_constraints::conditional_validity_condition() const
15805{
15806  auto res = isl_schedule_constraints_get_conditional_validity_condition(get());
15807  return manage(res);
15808}
15809
15810isl::checked::union_map schedule_constraints::get_conditional_validity_condition() const
15811{
15812  return conditional_validity_condition();
15813}
15814
15815isl::checked::set schedule_constraints::context() const
15816{
15817  auto res = isl_schedule_constraints_get_context(get());
15818  return manage(res);
15819}
15820
15821isl::checked::set schedule_constraints::get_context() const
15822{
15823  return context();
15824}
15825
15826isl::checked::union_set schedule_constraints::domain() const
15827{
15828  auto res = isl_schedule_constraints_get_domain(get());
15829  return manage(res);
15830}
15831
15832isl::checked::union_set schedule_constraints::get_domain() const
15833{
15834  return domain();
15835}
15836
15837isl::checked::schedule_constraints schedule_constraints::on_domain(isl::checked::union_set domain)
15838{
15839  auto res = isl_schedule_constraints_on_domain(domain.release());
15840  return manage(res);
15841}
15842
15843isl::checked::union_map schedule_constraints::proximity() const
15844{
15845  auto res = isl_schedule_constraints_get_proximity(get());
15846  return manage(res);
15847}
15848
15849isl::checked::union_map schedule_constraints::get_proximity() const
15850{
15851  return proximity();
15852}
15853
15854isl::checked::schedule_constraints schedule_constraints::set_coincidence(isl::checked::union_map coincidence) const
15855{
15856  auto res = isl_schedule_constraints_set_coincidence(copy(), coincidence.release());
15857  return manage(res);
15858}
15859
15860isl::checked::schedule_constraints schedule_constraints::set_conditional_validity(isl::checked::union_map condition, isl::checked::union_map validity) const
15861{
15862  auto res = isl_schedule_constraints_set_conditional_validity(copy(), condition.release(), validity.release());
15863  return manage(res);
15864}
15865
15866isl::checked::schedule_constraints schedule_constraints::set_context(isl::checked::set context) const
15867{
15868  auto res = isl_schedule_constraints_set_context(copy(), context.release());
15869  return manage(res);
15870}
15871
15872isl::checked::schedule_constraints schedule_constraints::set_proximity(isl::checked::union_map proximity) const
15873{
15874  auto res = isl_schedule_constraints_set_proximity(copy(), proximity.release());
15875  return manage(res);
15876}
15877
15878isl::checked::schedule_constraints schedule_constraints::set_validity(isl::checked::union_map validity) const
15879{
15880  auto res = isl_schedule_constraints_set_validity(copy(), validity.release());
15881  return manage(res);
15882}
15883
15884isl::checked::union_map schedule_constraints::validity() const
15885{
15886  auto res = isl_schedule_constraints_get_validity(get());
15887  return manage(res);
15888}
15889
15890isl::checked::union_map schedule_constraints::get_validity() const
15891{
15892  return validity();
15893}
15894
15895inline std::ostream &operator<<(std::ostream &os, const schedule_constraints &obj)
15896{
15897  char *str = isl_schedule_constraints_to_str(obj.get());
15898  if (!str) {
15899    os.setstate(std::ios_base::badbit);
15900    return os;
15901  }
15902  os << str;
15903  free(str);
15904  return os;
15905}
15906
15907// implementations for isl::schedule_node
15908schedule_node manage(__isl_take isl_schedule_node *ptr) {
15909  return schedule_node(ptr);
15910}
15911schedule_node manage_copy(__isl_keep isl_schedule_node *ptr) {
15912  ptr = isl_schedule_node_copy(ptr);
15913  return schedule_node(ptr);
15914}
15915
15916schedule_node::schedule_node(__isl_take isl_schedule_node *ptr)
15917    : ptr(ptr) {}
15918
15919schedule_node::schedule_node()
15920    : ptr(nullptr) {}
15921
15922schedule_node::schedule_node(const schedule_node &obj)
15923    : ptr(nullptr)
15924{
15925  ptr = obj.copy();
15926}
15927
15928schedule_node &schedule_node::operator=(schedule_node obj) {
15929  std::swap(this->ptr, obj.ptr);
15930  return *this;
15931}
15932
15933schedule_node::~schedule_node() {
15934  if (ptr)
15935    isl_schedule_node_free(ptr);
15936}
15937
15938__isl_give isl_schedule_node *schedule_node::copy() const & {
15939  return isl_schedule_node_copy(ptr);
15940}
15941
15942__isl_keep isl_schedule_node *schedule_node::get() const {
15943  return ptr;
15944}
15945
15946__isl_give isl_schedule_node *schedule_node::release() {
15947  isl_schedule_node *tmp = ptr;
15948  ptr = nullptr;
15949  return tmp;
15950}
15951
15952bool schedule_node::is_null() const {
15953  return ptr == nullptr;
15954}
15955
15956template <typename T, typename>
15957boolean schedule_node::isa_type(T subtype) const
15958{
15959  if (is_null())
15960    return boolean();
15961  return isl_schedule_node_get_type(get()) == subtype;
15962}
15963template <class T>
15964boolean schedule_node::isa() const
15965{
15966  return isa_type<decltype(T::type)>(T::type);
15967}
15968template <class T>
15969T schedule_node::as() const
15970{
15971 if (isa<T>().is_false())
15972    isl_die(ctx().get(), isl_error_invalid, "not an object of the requested subtype", return T());
15973  return T(copy());
15974}
15975
15976isl::checked::ctx schedule_node::ctx() const {
15977  return isl::checked::ctx(isl_schedule_node_get_ctx(ptr));
15978}
15979
15980isl::checked::schedule_node schedule_node::ancestor(int generation) const
15981{
15982  auto res = isl_schedule_node_ancestor(copy(), generation);
15983  return manage(res);
15984}
15985
15986class size schedule_node::ancestor_child_position(const isl::checked::schedule_node &ancestor) const
15987{
15988  auto res = isl_schedule_node_get_ancestor_child_position(get(), ancestor.get());
15989  return manage(res);
15990}
15991
15992class size schedule_node::get_ancestor_child_position(const isl::checked::schedule_node &ancestor) const
15993{
15994  return ancestor_child_position(ancestor);
15995}
15996
15997isl::checked::schedule_node schedule_node::child(int pos) const
15998{
15999  auto res = isl_schedule_node_child(copy(), pos);
16000  return manage(res);
16001}
16002
16003class size schedule_node::child_position() const
16004{
16005  auto res = isl_schedule_node_get_child_position(get());
16006  return manage(res);
16007}
16008
16009class size schedule_node::get_child_position() const
16010{
16011  return child_position();
16012}
16013
16014boolean schedule_node::every_descendant(const std::function<boolean(isl::checked::schedule_node)> &test) const
16015{
16016  struct test_data {
16017    std::function<boolean(isl::checked::schedule_node)> func;
16018  } test_data = { test };
16019  auto test_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_bool {
16020    auto *data = static_cast<struct test_data *>(arg_1);
16021    auto ret = (data->func)(manage_copy(arg_0));
16022    return ret.release();
16023  };
16024  auto res = isl_schedule_node_every_descendant(get(), test_lambda, &test_data);
16025  return manage(res);
16026}
16027
16028isl::checked::schedule_node schedule_node::first_child() const
16029{
16030  auto res = isl_schedule_node_first_child(copy());
16031  return manage(res);
16032}
16033
16034stat schedule_node::foreach_ancestor_top_down(const std::function<stat(isl::checked::schedule_node)> &fn) const
16035{
16036  struct fn_data {
16037    std::function<stat(isl::checked::schedule_node)> func;
16038  } fn_data = { fn };
16039  auto fn_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_stat {
16040    auto *data = static_cast<struct fn_data *>(arg_1);
16041    auto ret = (data->func)(manage_copy(arg_0));
16042    return ret.release();
16043  };
16044  auto res = isl_schedule_node_foreach_ancestor_top_down(get(), fn_lambda, &fn_data);
16045  return manage(res);
16046}
16047
16048stat schedule_node::foreach_descendant_top_down(const std::function<boolean(isl::checked::schedule_node)> &fn) const
16049{
16050  struct fn_data {
16051    std::function<boolean(isl::checked::schedule_node)> func;
16052  } fn_data = { fn };
16053  auto fn_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_bool {
16054    auto *data = static_cast<struct fn_data *>(arg_1);
16055    auto ret = (data->func)(manage_copy(arg_0));
16056    return ret.release();
16057  };
16058  auto res = isl_schedule_node_foreach_descendant_top_down(get(), fn_lambda, &fn_data);
16059  return manage(res);
16060}
16061
16062isl::checked::schedule_node schedule_node::from_domain(isl::checked::union_set domain)
16063{
16064  auto res = isl_schedule_node_from_domain(domain.release());
16065  return manage(res);
16066}
16067
16068isl::checked::schedule_node schedule_node::from_extension(isl::checked::union_map extension)
16069{
16070  auto res = isl_schedule_node_from_extension(extension.release());
16071  return manage(res);
16072}
16073
16074isl::checked::schedule_node schedule_node::graft_after(isl::checked::schedule_node graft) const
16075{
16076  auto res = isl_schedule_node_graft_after(copy(), graft.release());
16077  return manage(res);
16078}
16079
16080isl::checked::schedule_node schedule_node::graft_before(isl::checked::schedule_node graft) const
16081{
16082  auto res = isl_schedule_node_graft_before(copy(), graft.release());
16083  return manage(res);
16084}
16085
16086boolean schedule_node::has_children() const
16087{
16088  auto res = isl_schedule_node_has_children(get());
16089  return manage(res);
16090}
16091
16092boolean schedule_node::has_next_sibling() const
16093{
16094  auto res = isl_schedule_node_has_next_sibling(get());
16095  return manage(res);
16096}
16097
16098boolean schedule_node::has_parent() const
16099{
16100  auto res = isl_schedule_node_has_parent(get());
16101  return manage(res);
16102}
16103
16104boolean schedule_node::has_previous_sibling() const
16105{
16106  auto res = isl_schedule_node_has_previous_sibling(get());
16107  return manage(res);
16108}
16109
16110isl::checked::schedule_node schedule_node::insert_context(isl::checked::set context) const
16111{
16112  auto res = isl_schedule_node_insert_context(copy(), context.release());
16113  return manage(res);
16114}
16115
16116isl::checked::schedule_node schedule_node::insert_filter(isl::checked::union_set filter) const
16117{
16118  auto res = isl_schedule_node_insert_filter(copy(), filter.release());
16119  return manage(res);
16120}
16121
16122isl::checked::schedule_node schedule_node::insert_guard(isl::checked::set context) const
16123{
16124  auto res = isl_schedule_node_insert_guard(copy(), context.release());
16125  return manage(res);
16126}
16127
16128isl::checked::schedule_node schedule_node::insert_mark(isl::checked::id mark) const
16129{
16130  auto res = isl_schedule_node_insert_mark(copy(), mark.release());
16131  return manage(res);
16132}
16133
16134isl::checked::schedule_node schedule_node::insert_mark(const std::string &mark) const
16135{
16136  return this->insert_mark(isl::checked::id(ctx(), mark));
16137}
16138
16139isl::checked::schedule_node schedule_node::insert_partial_schedule(isl::checked::multi_union_pw_aff schedule) const
16140{
16141  auto res = isl_schedule_node_insert_partial_schedule(copy(), schedule.release());
16142  return manage(res);
16143}
16144
16145isl::checked::schedule_node schedule_node::insert_sequence(isl::checked::union_set_list filters) const
16146{
16147  auto res = isl_schedule_node_insert_sequence(copy(), filters.release());
16148  return manage(res);
16149}
16150
16151isl::checked::schedule_node schedule_node::insert_set(isl::checked::union_set_list filters) const
16152{
16153  auto res = isl_schedule_node_insert_set(copy(), filters.release());
16154  return manage(res);
16155}
16156
16157boolean schedule_node::is_equal(const isl::checked::schedule_node &node2) const
16158{
16159  auto res = isl_schedule_node_is_equal(get(), node2.get());
16160  return manage(res);
16161}
16162
16163boolean schedule_node::is_subtree_anchored() const
16164{
16165  auto res = isl_schedule_node_is_subtree_anchored(get());
16166  return manage(res);
16167}
16168
16169isl::checked::schedule_node schedule_node::map_descendant_bottom_up(const std::function<isl::checked::schedule_node(isl::checked::schedule_node)> &fn) const
16170{
16171  struct fn_data {
16172    std::function<isl::checked::schedule_node(isl::checked::schedule_node)> func;
16173  } fn_data = { fn };
16174  auto fn_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_schedule_node * {
16175    auto *data = static_cast<struct fn_data *>(arg_1);
16176    auto ret = (data->func)(manage(arg_0));
16177    return ret.release();
16178  };
16179  auto res = isl_schedule_node_map_descendant_bottom_up(copy(), fn_lambda, &fn_data);
16180  return manage(res);
16181}
16182
16183class size schedule_node::n_children() const
16184{
16185  auto res = isl_schedule_node_n_children(get());
16186  return manage(res);
16187}
16188
16189isl::checked::schedule_node schedule_node::next_sibling() const
16190{
16191  auto res = isl_schedule_node_next_sibling(copy());
16192  return manage(res);
16193}
16194
16195isl::checked::schedule_node schedule_node::order_after(isl::checked::union_set filter) const
16196{
16197  auto res = isl_schedule_node_order_after(copy(), filter.release());
16198  return manage(res);
16199}
16200
16201isl::checked::schedule_node schedule_node::order_before(isl::checked::union_set filter) const
16202{
16203  auto res = isl_schedule_node_order_before(copy(), filter.release());
16204  return manage(res);
16205}
16206
16207isl::checked::schedule_node schedule_node::parent() const
16208{
16209  auto res = isl_schedule_node_parent(copy());
16210  return manage(res);
16211}
16212
16213isl::checked::multi_union_pw_aff schedule_node::prefix_schedule_multi_union_pw_aff() const
16214{
16215  auto res = isl_schedule_node_get_prefix_schedule_multi_union_pw_aff(get());
16216  return manage(res);
16217}
16218
16219isl::checked::multi_union_pw_aff schedule_node::get_prefix_schedule_multi_union_pw_aff() const
16220{
16221  return prefix_schedule_multi_union_pw_aff();
16222}
16223
16224isl::checked::union_map schedule_node::prefix_schedule_union_map() const
16225{
16226  auto res = isl_schedule_node_get_prefix_schedule_union_map(get());
16227  return manage(res);
16228}
16229
16230isl::checked::union_map schedule_node::get_prefix_schedule_union_map() const
16231{
16232  return prefix_schedule_union_map();
16233}
16234
16235isl::checked::union_pw_multi_aff schedule_node::prefix_schedule_union_pw_multi_aff() const
16236{
16237  auto res = isl_schedule_node_get_prefix_schedule_union_pw_multi_aff(get());
16238  return manage(res);
16239}
16240
16241isl::checked::union_pw_multi_aff schedule_node::get_prefix_schedule_union_pw_multi_aff() const
16242{
16243  return prefix_schedule_union_pw_multi_aff();
16244}
16245
16246isl::checked::schedule_node schedule_node::previous_sibling() const
16247{
16248  auto res = isl_schedule_node_previous_sibling(copy());
16249  return manage(res);
16250}
16251
16252isl::checked::schedule_node schedule_node::root() const
16253{
16254  auto res = isl_schedule_node_root(copy());
16255  return manage(res);
16256}
16257
16258isl::checked::schedule schedule_node::schedule() const
16259{
16260  auto res = isl_schedule_node_get_schedule(get());
16261  return manage(res);
16262}
16263
16264isl::checked::schedule schedule_node::get_schedule() const
16265{
16266  return schedule();
16267}
16268
16269isl::checked::schedule_node schedule_node::shared_ancestor(const isl::checked::schedule_node &node2) const
16270{
16271  auto res = isl_schedule_node_get_shared_ancestor(get(), node2.get());
16272  return manage(res);
16273}
16274
16275isl::checked::schedule_node schedule_node::get_shared_ancestor(const isl::checked::schedule_node &node2) const
16276{
16277  return shared_ancestor(node2);
16278}
16279
16280class size schedule_node::tree_depth() const
16281{
16282  auto res = isl_schedule_node_get_tree_depth(get());
16283  return manage(res);
16284}
16285
16286class size schedule_node::get_tree_depth() const
16287{
16288  return tree_depth();
16289}
16290
16291inline std::ostream &operator<<(std::ostream &os, const schedule_node &obj)
16292{
16293  char *str = isl_schedule_node_to_str(obj.get());
16294  if (!str) {
16295    os.setstate(std::ios_base::badbit);
16296    return os;
16297  }
16298  os << str;
16299  free(str);
16300  return os;
16301}
16302
16303// implementations for isl::schedule_node_band
16304schedule_node_band::schedule_node_band(__isl_take isl_schedule_node *ptr)
16305    : schedule_node(ptr) {}
16306
16307schedule_node_band::schedule_node_band()
16308    : schedule_node() {}
16309
16310schedule_node_band::schedule_node_band(const schedule_node_band &obj)
16311    : schedule_node(obj)
16312{
16313}
16314
16315schedule_node_band &schedule_node_band::operator=(schedule_node_band obj) {
16316  std::swap(this->ptr, obj.ptr);
16317  return *this;
16318}
16319
16320isl::checked::ctx schedule_node_band::ctx() const {
16321  return isl::checked::ctx(isl_schedule_node_get_ctx(ptr));
16322}
16323
16324isl::checked::union_set schedule_node_band::ast_build_options() const
16325{
16326  auto res = isl_schedule_node_band_get_ast_build_options(get());
16327  return manage(res);
16328}
16329
16330isl::checked::union_set schedule_node_band::get_ast_build_options() const
16331{
16332  return ast_build_options();
16333}
16334
16335isl::checked::set schedule_node_band::ast_isolate_option() const
16336{
16337  auto res = isl_schedule_node_band_get_ast_isolate_option(get());
16338  return manage(res);
16339}
16340
16341isl::checked::set schedule_node_band::get_ast_isolate_option() const
16342{
16343  return ast_isolate_option();
16344}
16345
16346boolean schedule_node_band::member_get_coincident(int pos) const
16347{
16348  auto res = isl_schedule_node_band_member_get_coincident(get(), pos);
16349  return manage(res);
16350}
16351
16352schedule_node_band schedule_node_band::member_set_coincident(int pos, int coincident) const
16353{
16354  auto res = isl_schedule_node_band_member_set_coincident(copy(), pos, coincident);
16355  return manage(res).as<schedule_node_band>();
16356}
16357
16358schedule_node_band schedule_node_band::mod(isl::checked::multi_val mv) const
16359{
16360  auto res = isl_schedule_node_band_mod(copy(), mv.release());
16361  return manage(res).as<schedule_node_band>();
16362}
16363
16364class size schedule_node_band::n_member() const
16365{
16366  auto res = isl_schedule_node_band_n_member(get());
16367  return manage(res);
16368}
16369
16370isl::checked::multi_union_pw_aff schedule_node_band::partial_schedule() const
16371{
16372  auto res = isl_schedule_node_band_get_partial_schedule(get());
16373  return manage(res);
16374}
16375
16376isl::checked::multi_union_pw_aff schedule_node_band::get_partial_schedule() const
16377{
16378  return partial_schedule();
16379}
16380
16381boolean schedule_node_band::permutable() const
16382{
16383  auto res = isl_schedule_node_band_get_permutable(get());
16384  return manage(res);
16385}
16386
16387boolean schedule_node_band::get_permutable() const
16388{
16389  return permutable();
16390}
16391
16392schedule_node_band schedule_node_band::scale(isl::checked::multi_val mv) const
16393{
16394  auto res = isl_schedule_node_band_scale(copy(), mv.release());
16395  return manage(res).as<schedule_node_band>();
16396}
16397
16398schedule_node_band schedule_node_band::scale_down(isl::checked::multi_val mv) const
16399{
16400  auto res = isl_schedule_node_band_scale_down(copy(), mv.release());
16401  return manage(res).as<schedule_node_band>();
16402}
16403
16404schedule_node_band schedule_node_band::set_ast_build_options(isl::checked::union_set options) const
16405{
16406  auto res = isl_schedule_node_band_set_ast_build_options(copy(), options.release());
16407  return manage(res).as<schedule_node_band>();
16408}
16409
16410schedule_node_band schedule_node_band::set_permutable(int permutable) const
16411{
16412  auto res = isl_schedule_node_band_set_permutable(copy(), permutable);
16413  return manage(res).as<schedule_node_band>();
16414}
16415
16416schedule_node_band schedule_node_band::shift(isl::checked::multi_union_pw_aff shift) const
16417{
16418  auto res = isl_schedule_node_band_shift(copy(), shift.release());
16419  return manage(res).as<schedule_node_band>();
16420}
16421
16422schedule_node_band schedule_node_band::split(int pos) const
16423{
16424  auto res = isl_schedule_node_band_split(copy(), pos);
16425  return manage(res).as<schedule_node_band>();
16426}
16427
16428schedule_node_band schedule_node_band::tile(isl::checked::multi_val sizes) const
16429{
16430  auto res = isl_schedule_node_band_tile(copy(), sizes.release());
16431  return manage(res).as<schedule_node_band>();
16432}
16433
16434schedule_node_band schedule_node_band::member_set_ast_loop_default(int pos) const
16435{
16436  auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_default);
16437  return manage(res).as<schedule_node_band>();
16438}
16439
16440schedule_node_band schedule_node_band::member_set_ast_loop_atomic(int pos) const
16441{
16442  auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_atomic);
16443  return manage(res).as<schedule_node_band>();
16444}
16445
16446schedule_node_band schedule_node_band::member_set_ast_loop_unroll(int pos) const
16447{
16448  auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_unroll);
16449  return manage(res).as<schedule_node_band>();
16450}
16451
16452schedule_node_band schedule_node_band::member_set_ast_loop_separate(int pos) const
16453{
16454  auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_separate);
16455  return manage(res).as<schedule_node_band>();
16456}
16457
16458inline std::ostream &operator<<(std::ostream &os, const schedule_node_band &obj)
16459{
16460  char *str = isl_schedule_node_to_str(obj.get());
16461  if (!str) {
16462    os.setstate(std::ios_base::badbit);
16463    return os;
16464  }
16465  os << str;
16466  free(str);
16467  return os;
16468}
16469
16470// implementations for isl::schedule_node_context
16471schedule_node_context::schedule_node_context(__isl_take isl_schedule_node *ptr)
16472    : schedule_node(ptr) {}
16473
16474schedule_node_context::schedule_node_context()
16475    : schedule_node() {}
16476
16477schedule_node_context::schedule_node_context(const schedule_node_context &obj)
16478    : schedule_node(obj)
16479{
16480}
16481
16482schedule_node_context &schedule_node_context::operator=(schedule_node_context obj) {
16483  std::swap(this->ptr, obj.ptr);
16484  return *this;
16485}
16486
16487isl::checked::ctx schedule_node_context::ctx() const {
16488  return isl::checked::ctx(isl_schedule_node_get_ctx(ptr));
16489}
16490
16491isl::checked::set schedule_node_context::context() const
16492{
16493  auto res = isl_schedule_node_context_get_context(get());
16494  return manage(res);
16495}
16496
16497isl::checked::set schedule_node_context::get_context() const
16498{
16499  return context();
16500}
16501
16502inline std::ostream &operator<<(std::ostream &os, const schedule_node_context &obj)
16503{
16504  char *str = isl_schedule_node_to_str(obj.get());
16505  if (!str) {
16506    os.setstate(std::ios_base::badbit);
16507    return os;
16508  }
16509  os << str;
16510  free(str);
16511  return os;
16512}
16513
16514// implementations for isl::schedule_node_domain
16515schedule_node_domain::schedule_node_domain(__isl_take isl_schedule_node *ptr)
16516    : schedule_node(ptr) {}
16517
16518schedule_node_domain::schedule_node_domain()
16519    : schedule_node() {}
16520
16521schedule_node_domain::schedule_node_domain(const schedule_node_domain &obj)
16522    : schedule_node(obj)
16523{
16524}
16525
16526schedule_node_domain &schedule_node_domain::operator=(schedule_node_domain obj) {
16527  std::swap(this->ptr, obj.ptr);
16528  return *this;
16529}
16530
16531isl::checked::ctx schedule_node_domain::ctx() const {
16532  return isl::checked::ctx(isl_schedule_node_get_ctx(ptr));
16533}
16534
16535isl::checked::union_set schedule_node_domain::domain() const
16536{
16537  auto res = isl_schedule_node_domain_get_domain(get());
16538  return manage(res);
16539}
16540
16541isl::checked::union_set schedule_node_domain::get_domain() const
16542{
16543  return domain();
16544}
16545
16546inline std::ostream &operator<<(std::ostream &os, const schedule_node_domain &obj)
16547{
16548  char *str = isl_schedule_node_to_str(obj.get());
16549  if (!str) {
16550    os.setstate(std::ios_base::badbit);
16551    return os;
16552  }
16553  os << str;
16554  free(str);
16555  return os;
16556}
16557
16558// implementations for isl::schedule_node_expansion
16559schedule_node_expansion::schedule_node_expansion(__isl_take isl_schedule_node *ptr)
16560    : schedule_node(ptr) {}
16561
16562schedule_node_expansion::schedule_node_expansion()
16563    : schedule_node() {}
16564
16565schedule_node_expansion::schedule_node_expansion(const schedule_node_expansion &obj)
16566    : schedule_node(obj)
16567{
16568}
16569
16570schedule_node_expansion &schedule_node_expansion::operator=(schedule_node_expansion obj) {
16571  std::swap(this->ptr, obj.ptr);
16572  return *this;
16573}
16574
16575isl::checked::ctx schedule_node_expansion::ctx() const {
16576  return isl::checked::ctx(isl_schedule_node_get_ctx(ptr));
16577}
16578
16579isl::checked::union_pw_multi_aff schedule_node_expansion::contraction() const
16580{
16581  auto res = isl_schedule_node_expansion_get_contraction(get());
16582  return manage(res);
16583}
16584
16585isl::checked::union_pw_multi_aff schedule_node_expansion::get_contraction() const
16586{
16587  return contraction();
16588}
16589
16590isl::checked::union_map schedule_node_expansion::expansion() const
16591{
16592  auto res = isl_schedule_node_expansion_get_expansion(get());
16593  return manage(res);
16594}
16595
16596isl::checked::union_map schedule_node_expansion::get_expansion() const
16597{
16598  return expansion();
16599}
16600
16601inline std::ostream &operator<<(std::ostream &os, const schedule_node_expansion &obj)
16602{
16603  char *str = isl_schedule_node_to_str(obj.get());
16604  if (!str) {
16605    os.setstate(std::ios_base::badbit);
16606    return os;
16607  }
16608  os << str;
16609  free(str);
16610  return os;
16611}
16612
16613// implementations for isl::schedule_node_extension
16614schedule_node_extension::schedule_node_extension(__isl_take isl_schedule_node *ptr)
16615    : schedule_node(ptr) {}
16616
16617schedule_node_extension::schedule_node_extension()
16618    : schedule_node() {}
16619
16620schedule_node_extension::schedule_node_extension(const schedule_node_extension &obj)
16621    : schedule_node(obj)
16622{
16623}
16624
16625schedule_node_extension &schedule_node_extension::operator=(schedule_node_extension obj) {
16626  std::swap(this->ptr, obj.ptr);
16627  return *this;
16628}
16629
16630isl::checked::ctx schedule_node_extension::ctx() const {
16631  return isl::checked::ctx(isl_schedule_node_get_ctx(ptr));
16632}
16633
16634isl::checked::union_map schedule_node_extension::extension() const
16635{
16636  auto res = isl_schedule_node_extension_get_extension(get());
16637  return manage(res);
16638}
16639
16640isl::checked::union_map schedule_node_extension::get_extension() const
16641{
16642  return extension();
16643}
16644
16645inline std::ostream &operator<<(std::ostream &os, const schedule_node_extension &obj)
16646{
16647  char *str = isl_schedule_node_to_str(obj.get());
16648  if (!str) {
16649    os.setstate(std::ios_base::badbit);
16650    return os;
16651  }
16652  os << str;
16653  free(str);
16654  return os;
16655}
16656
16657// implementations for isl::schedule_node_filter
16658schedule_node_filter::schedule_node_filter(__isl_take isl_schedule_node *ptr)
16659    : schedule_node(ptr) {}
16660
16661schedule_node_filter::schedule_node_filter()
16662    : schedule_node() {}
16663
16664schedule_node_filter::schedule_node_filter(const schedule_node_filter &obj)
16665    : schedule_node(obj)
16666{
16667}
16668
16669schedule_node_filter &schedule_node_filter::operator=(schedule_node_filter obj) {
16670  std::swap(this->ptr, obj.ptr);
16671  return *this;
16672}
16673
16674isl::checked::ctx schedule_node_filter::ctx() const {
16675  return isl::checked::ctx(isl_schedule_node_get_ctx(ptr));
16676}
16677
16678isl::checked::union_set schedule_node_filter::filter() const
16679{
16680  auto res = isl_schedule_node_filter_get_filter(get());
16681  return manage(res);
16682}
16683
16684isl::checked::union_set schedule_node_filter::get_filter() const
16685{
16686  return filter();
16687}
16688
16689inline std::ostream &operator<<(std::ostream &os, const schedule_node_filter &obj)
16690{
16691  char *str = isl_schedule_node_to_str(obj.get());
16692  if (!str) {
16693    os.setstate(std::ios_base::badbit);
16694    return os;
16695  }
16696  os << str;
16697  free(str);
16698  return os;
16699}
16700
16701// implementations for isl::schedule_node_guard
16702schedule_node_guard::schedule_node_guard(__isl_take isl_schedule_node *ptr)
16703    : schedule_node(ptr) {}
16704
16705schedule_node_guard::schedule_node_guard()
16706    : schedule_node() {}
16707
16708schedule_node_guard::schedule_node_guard(const schedule_node_guard &obj)
16709    : schedule_node(obj)
16710{
16711}
16712
16713schedule_node_guard &schedule_node_guard::operator=(schedule_node_guard obj) {
16714  std::swap(this->ptr, obj.ptr);
16715  return *this;
16716}
16717
16718isl::checked::ctx schedule_node_guard::ctx() const {
16719  return isl::checked::ctx(isl_schedule_node_get_ctx(ptr));
16720}
16721
16722isl::checked::set schedule_node_guard::guard() const
16723{
16724  auto res = isl_schedule_node_guard_get_guard(get());
16725  return manage(res);
16726}
16727
16728isl::checked::set schedule_node_guard::get_guard() const
16729{
16730  return guard();
16731}
16732
16733inline std::ostream &operator<<(std::ostream &os, const schedule_node_guard &obj)
16734{
16735  char *str = isl_schedule_node_to_str(obj.get());
16736  if (!str) {
16737    os.setstate(std::ios_base::badbit);
16738    return os;
16739  }
16740  os << str;
16741  free(str);
16742  return os;
16743}
16744
16745// implementations for isl::schedule_node_leaf
16746schedule_node_leaf::schedule_node_leaf(__isl_take isl_schedule_node *ptr)
16747    : schedule_node(ptr) {}
16748
16749schedule_node_leaf::schedule_node_leaf()
16750    : schedule_node() {}
16751
16752schedule_node_leaf::schedule_node_leaf(const schedule_node_leaf &obj)
16753    : schedule_node(obj)
16754{
16755}
16756
16757schedule_node_leaf &schedule_node_leaf::operator=(schedule_node_leaf obj) {
16758  std::swap(this->ptr, obj.ptr);
16759  return *this;
16760}
16761
16762isl::checked::ctx schedule_node_leaf::ctx() const {
16763  return isl::checked::ctx(isl_schedule_node_get_ctx(ptr));
16764}
16765
16766inline std::ostream &operator<<(std::ostream &os, const schedule_node_leaf &obj)
16767{
16768  char *str = isl_schedule_node_to_str(obj.get());
16769  if (!str) {
16770    os.setstate(std::ios_base::badbit);
16771    return os;
16772  }
16773  os << str;
16774  free(str);
16775  return os;
16776}
16777
16778// implementations for isl::schedule_node_mark
16779schedule_node_mark::schedule_node_mark(__isl_take isl_schedule_node *ptr)
16780    : schedule_node(ptr) {}
16781
16782schedule_node_mark::schedule_node_mark()
16783    : schedule_node() {}
16784
16785schedule_node_mark::schedule_node_mark(const schedule_node_mark &obj)
16786    : schedule_node(obj)
16787{
16788}
16789
16790schedule_node_mark &schedule_node_mark::operator=(schedule_node_mark obj) {
16791  std::swap(this->ptr, obj.ptr);
16792  return *this;
16793}
16794
16795isl::checked::ctx schedule_node_mark::ctx() const {
16796  return isl::checked::ctx(isl_schedule_node_get_ctx(ptr));
16797}
16798
16799inline std::ostream &operator<<(std::ostream &os, const schedule_node_mark &obj)
16800{
16801  char *str = isl_schedule_node_to_str(obj.get());
16802  if (!str) {
16803    os.setstate(std::ios_base::badbit);
16804    return os;
16805  }
16806  os << str;
16807  free(str);
16808  return os;
16809}
16810
16811// implementations for isl::schedule_node_sequence
16812schedule_node_sequence::schedule_node_sequence(__isl_take isl_schedule_node *ptr)
16813    : schedule_node(ptr) {}
16814
16815schedule_node_sequence::schedule_node_sequence()
16816    : schedule_node() {}
16817
16818schedule_node_sequence::schedule_node_sequence(const schedule_node_sequence &obj)
16819    : schedule_node(obj)
16820{
16821}
16822
16823schedule_node_sequence &schedule_node_sequence::operator=(schedule_node_sequence obj) {
16824  std::swap(this->ptr, obj.ptr);
16825  return *this;
16826}
16827
16828isl::checked::ctx schedule_node_sequence::ctx() const {
16829  return isl::checked::ctx(isl_schedule_node_get_ctx(ptr));
16830}
16831
16832inline std::ostream &operator<<(std::ostream &os, const schedule_node_sequence &obj)
16833{
16834  char *str = isl_schedule_node_to_str(obj.get());
16835  if (!str) {
16836    os.setstate(std::ios_base::badbit);
16837    return os;
16838  }
16839  os << str;
16840  free(str);
16841  return os;
16842}
16843
16844// implementations for isl::schedule_node_set
16845schedule_node_set::schedule_node_set(__isl_take isl_schedule_node *ptr)
16846    : schedule_node(ptr) {}
16847
16848schedule_node_set::schedule_node_set()
16849    : schedule_node() {}
16850
16851schedule_node_set::schedule_node_set(const schedule_node_set &obj)
16852    : schedule_node(obj)
16853{
16854}
16855
16856schedule_node_set &schedule_node_set::operator=(schedule_node_set obj) {
16857  std::swap(this->ptr, obj.ptr);
16858  return *this;
16859}
16860
16861isl::checked::ctx schedule_node_set::ctx() const {
16862  return isl::checked::ctx(isl_schedule_node_get_ctx(ptr));
16863}
16864
16865inline std::ostream &operator<<(std::ostream &os, const schedule_node_set &obj)
16866{
16867  char *str = isl_schedule_node_to_str(obj.get());
16868  if (!str) {
16869    os.setstate(std::ios_base::badbit);
16870    return os;
16871  }
16872  os << str;
16873  free(str);
16874  return os;
16875}
16876
16877// implementations for isl::set
16878set manage(__isl_take isl_set *ptr) {
16879  return set(ptr);
16880}
16881set manage_copy(__isl_keep isl_set *ptr) {
16882  ptr = isl_set_copy(ptr);
16883  return set(ptr);
16884}
16885
16886set::set(__isl_take isl_set *ptr)
16887    : ptr(ptr) {}
16888
16889set::set()
16890    : ptr(nullptr) {}
16891
16892set::set(const set &obj)
16893    : ptr(nullptr)
16894{
16895  ptr = obj.copy();
16896}
16897
16898set::set(isl::checked::basic_set bset)
16899{
16900  auto res = isl_set_from_basic_set(bset.release());
16901  ptr = res;
16902}
16903
16904set::set(isl::checked::point pnt)
16905{
16906  auto res = isl_set_from_point(pnt.release());
16907  ptr = res;
16908}
16909
16910set::set(isl::checked::ctx ctx, const std::string &str)
16911{
16912  auto res = isl_set_read_from_str(ctx.release(), str.c_str());
16913  ptr = res;
16914}
16915
16916set &set::operator=(set obj) {
16917  std::swap(this->ptr, obj.ptr);
16918  return *this;
16919}
16920
16921set::~set() {
16922  if (ptr)
16923    isl_set_free(ptr);
16924}
16925
16926__isl_give isl_set *set::copy() const & {
16927  return isl_set_copy(ptr);
16928}
16929
16930__isl_keep isl_set *set::get() const {
16931  return ptr;
16932}
16933
16934__isl_give isl_set *set::release() {
16935  isl_set *tmp = ptr;
16936  ptr = nullptr;
16937  return tmp;
16938}
16939
16940bool set::is_null() const {
16941  return ptr == nullptr;
16942}
16943
16944isl::checked::ctx set::ctx() const {
16945  return isl::checked::ctx(isl_set_get_ctx(ptr));
16946}
16947
16948isl::checked::basic_set set::affine_hull() const
16949{
16950  auto res = isl_set_affine_hull(copy());
16951  return manage(res);
16952}
16953
16954isl::checked::set set::apply(isl::checked::map map) const
16955{
16956  auto res = isl_set_apply(copy(), map.release());
16957  return manage(res);
16958}
16959
16960isl::checked::union_set set::apply(const isl::checked::union_map &umap) const
16961{
16962  return isl::checked::union_set(*this).apply(umap);
16963}
16964
16965isl::checked::set set::apply(const isl::checked::basic_map &map) const
16966{
16967  return this->apply(isl::checked::map(map));
16968}
16969
16970isl::checked::pw_multi_aff set::as_pw_multi_aff() const
16971{
16972  auto res = isl_set_as_pw_multi_aff(copy());
16973  return manage(res);
16974}
16975
16976isl::checked::set set::as_set() const
16977{
16978  return isl::checked::union_set(*this).as_set();
16979}
16980
16981isl::checked::set set::bind(isl::checked::multi_id tuple) const
16982{
16983  auto res = isl_set_bind(copy(), tuple.release());
16984  return manage(res);
16985}
16986
16987isl::checked::set set::coalesce() const
16988{
16989  auto res = isl_set_coalesce(copy());
16990  return manage(res);
16991}
16992
16993isl::checked::set set::complement() const
16994{
16995  auto res = isl_set_complement(copy());
16996  return manage(res);
16997}
16998
16999isl::checked::union_set set::compute_divs() const
17000{
17001  return isl::checked::union_set(*this).compute_divs();
17002}
17003
17004isl::checked::set set::detect_equalities() const
17005{
17006  auto res = isl_set_detect_equalities(copy());
17007  return manage(res);
17008}
17009
17010isl::checked::val set::dim_max_val(int pos) const
17011{
17012  auto res = isl_set_dim_max_val(copy(), pos);
17013  return manage(res);
17014}
17015
17016isl::checked::val set::dim_min_val(int pos) const
17017{
17018  auto res = isl_set_dim_min_val(copy(), pos);
17019  return manage(res);
17020}
17021
17022isl::checked::set set::drop_unused_params() const
17023{
17024  auto res = isl_set_drop_unused_params(copy());
17025  return manage(res);
17026}
17027
17028isl::checked::set set::empty(isl::checked::space space)
17029{
17030  auto res = isl_set_empty(space.release());
17031  return manage(res);
17032}
17033
17034boolean set::every_set(const std::function<boolean(isl::checked::set)> &test) const
17035{
17036  return isl::checked::union_set(*this).every_set(test);
17037}
17038
17039isl::checked::set set::extract_set(const isl::checked::space &space) const
17040{
17041  return isl::checked::union_set(*this).extract_set(space);
17042}
17043
17044isl::checked::set set::flatten() const
17045{
17046  auto res = isl_set_flatten(copy());
17047  return manage(res);
17048}
17049
17050stat set::foreach_basic_set(const std::function<stat(isl::checked::basic_set)> &fn) const
17051{
17052  struct fn_data {
17053    std::function<stat(isl::checked::basic_set)> func;
17054  } fn_data = { fn };
17055  auto fn_lambda = [](isl_basic_set *arg_0, void *arg_1) -> isl_stat {
17056    auto *data = static_cast<struct fn_data *>(arg_1);
17057    auto ret = (data->func)(manage(arg_0));
17058    return ret.release();
17059  };
17060  auto res = isl_set_foreach_basic_set(get(), fn_lambda, &fn_data);
17061  return manage(res);
17062}
17063
17064stat set::foreach_point(const std::function<stat(isl::checked::point)> &fn) const
17065{
17066  struct fn_data {
17067    std::function<stat(isl::checked::point)> func;
17068  } fn_data = { fn };
17069  auto fn_lambda = [](isl_point *arg_0, void *arg_1) -> isl_stat {
17070    auto *data = static_cast<struct fn_data *>(arg_1);
17071    auto ret = (data->func)(manage(arg_0));
17072    return ret.release();
17073  };
17074  auto res = isl_set_foreach_point(get(), fn_lambda, &fn_data);
17075  return manage(res);
17076}
17077
17078stat set::foreach_set(const std::function<stat(isl::checked::set)> &fn) const
17079{
17080  return isl::checked::union_set(*this).foreach_set(fn);
17081}
17082
17083isl::checked::set set::gist(isl::checked::set context) const
17084{
17085  auto res = isl_set_gist(copy(), context.release());
17086  return manage(res);
17087}
17088
17089isl::checked::union_set set::gist(const isl::checked::union_set &context) const
17090{
17091  return isl::checked::union_set(*this).gist(context);
17092}
17093
17094isl::checked::set set::gist(const isl::checked::basic_set &context) const
17095{
17096  return this->gist(isl::checked::set(context));
17097}
17098
17099isl::checked::set set::gist(const isl::checked::point &context) const
17100{
17101  return this->gist(isl::checked::set(context));
17102}
17103
17104isl::checked::set set::gist_params(isl::checked::set context) const
17105{
17106  auto res = isl_set_gist_params(copy(), context.release());
17107  return manage(res);
17108}
17109
17110isl::checked::map set::identity() const
17111{
17112  auto res = isl_set_identity(copy());
17113  return manage(res);
17114}
17115
17116isl::checked::pw_aff set::indicator_function() const
17117{
17118  auto res = isl_set_indicator_function(copy());
17119  return manage(res);
17120}
17121
17122isl::checked::map set::insert_domain(isl::checked::space domain) const
17123{
17124  auto res = isl_set_insert_domain(copy(), domain.release());
17125  return manage(res);
17126}
17127
17128isl::checked::set set::intersect(isl::checked::set set2) const
17129{
17130  auto res = isl_set_intersect(copy(), set2.release());
17131  return manage(res);
17132}
17133
17134isl::checked::union_set set::intersect(const isl::checked::union_set &uset2) const
17135{
17136  return isl::checked::union_set(*this).intersect(uset2);
17137}
17138
17139isl::checked::set set::intersect(const isl::checked::basic_set &set2) const
17140{
17141  return this->intersect(isl::checked::set(set2));
17142}
17143
17144isl::checked::set set::intersect(const isl::checked::point &set2) const
17145{
17146  return this->intersect(isl::checked::set(set2));
17147}
17148
17149isl::checked::set set::intersect_params(isl::checked::set params) const
17150{
17151  auto res = isl_set_intersect_params(copy(), params.release());
17152  return manage(res);
17153}
17154
17155boolean set::involves_locals() const
17156{
17157  auto res = isl_set_involves_locals(get());
17158  return manage(res);
17159}
17160
17161boolean set::is_disjoint(const isl::checked::set &set2) const
17162{
17163  auto res = isl_set_is_disjoint(get(), set2.get());
17164  return manage(res);
17165}
17166
17167boolean set::is_disjoint(const isl::checked::union_set &uset2) const
17168{
17169  return isl::checked::union_set(*this).is_disjoint(uset2);
17170}
17171
17172boolean set::is_disjoint(const isl::checked::basic_set &set2) const
17173{
17174  return this->is_disjoint(isl::checked::set(set2));
17175}
17176
17177boolean set::is_disjoint(const isl::checked::point &set2) const
17178{
17179  return this->is_disjoint(isl::checked::set(set2));
17180}
17181
17182boolean set::is_empty() const
17183{
17184  auto res = isl_set_is_empty(get());
17185  return manage(res);
17186}
17187
17188boolean set::is_equal(const isl::checked::set &set2) const
17189{
17190  auto res = isl_set_is_equal(get(), set2.get());
17191  return manage(res);
17192}
17193
17194boolean set::is_equal(const isl::checked::union_set &uset2) const
17195{
17196  return isl::checked::union_set(*this).is_equal(uset2);
17197}
17198
17199boolean set::is_equal(const isl::checked::basic_set &set2) const
17200{
17201  return this->is_equal(isl::checked::set(set2));
17202}
17203
17204boolean set::is_equal(const isl::checked::point &set2) const
17205{
17206  return this->is_equal(isl::checked::set(set2));
17207}
17208
17209boolean set::is_singleton() const
17210{
17211  auto res = isl_set_is_singleton(get());
17212  return manage(res);
17213}
17214
17215boolean set::is_strict_subset(const isl::checked::set &set2) const
17216{
17217  auto res = isl_set_is_strict_subset(get(), set2.get());
17218  return manage(res);
17219}
17220
17221boolean set::is_strict_subset(const isl::checked::union_set &uset2) const
17222{
17223  return isl::checked::union_set(*this).is_strict_subset(uset2);
17224}
17225
17226boolean set::is_strict_subset(const isl::checked::basic_set &set2) const
17227{
17228  return this->is_strict_subset(isl::checked::set(set2));
17229}
17230
17231boolean set::is_strict_subset(const isl::checked::point &set2) const
17232{
17233  return this->is_strict_subset(isl::checked::set(set2));
17234}
17235
17236boolean set::is_subset(const isl::checked::set &set2) const
17237{
17238  auto res = isl_set_is_subset(get(), set2.get());
17239  return manage(res);
17240}
17241
17242boolean set::is_subset(const isl::checked::union_set &uset2) const
17243{
17244  return isl::checked::union_set(*this).is_subset(uset2);
17245}
17246
17247boolean set::is_subset(const isl::checked::basic_set &set2) const
17248{
17249  return this->is_subset(isl::checked::set(set2));
17250}
17251
17252boolean set::is_subset(const isl::checked::point &set2) const
17253{
17254  return this->is_subset(isl::checked::set(set2));
17255}
17256
17257boolean set::is_wrapping() const
17258{
17259  auto res = isl_set_is_wrapping(get());
17260  return manage(res);
17261}
17262
17263boolean set::isa_set() const
17264{
17265  return isl::checked::union_set(*this).isa_set();
17266}
17267
17268isl::checked::fixed_box set::lattice_tile() const
17269{
17270  auto res = isl_set_get_lattice_tile(get());
17271  return manage(res);
17272}
17273
17274isl::checked::fixed_box set::get_lattice_tile() const
17275{
17276  return lattice_tile();
17277}
17278
17279isl::checked::set set::lexmax() const
17280{
17281  auto res = isl_set_lexmax(copy());
17282  return manage(res);
17283}
17284
17285isl::checked::pw_multi_aff set::lexmax_pw_multi_aff() const
17286{
17287  auto res = isl_set_lexmax_pw_multi_aff(copy());
17288  return manage(res);
17289}
17290
17291isl::checked::set set::lexmin() const
17292{
17293  auto res = isl_set_lexmin(copy());
17294  return manage(res);
17295}
17296
17297isl::checked::pw_multi_aff set::lexmin_pw_multi_aff() const
17298{
17299  auto res = isl_set_lexmin_pw_multi_aff(copy());
17300  return manage(res);
17301}
17302
17303isl::checked::set set::lower_bound(isl::checked::multi_pw_aff lower) const
17304{
17305  auto res = isl_set_lower_bound_multi_pw_aff(copy(), lower.release());
17306  return manage(res);
17307}
17308
17309isl::checked::set set::lower_bound(isl::checked::multi_val lower) const
17310{
17311  auto res = isl_set_lower_bound_multi_val(copy(), lower.release());
17312  return manage(res);
17313}
17314
17315isl::checked::multi_pw_aff set::max_multi_pw_aff() const
17316{
17317  auto res = isl_set_max_multi_pw_aff(copy());
17318  return manage(res);
17319}
17320
17321isl::checked::val set::max_val(const isl::checked::aff &obj) const
17322{
17323  auto res = isl_set_max_val(get(), obj.get());
17324  return manage(res);
17325}
17326
17327isl::checked::multi_pw_aff set::min_multi_pw_aff() const
17328{
17329  auto res = isl_set_min_multi_pw_aff(copy());
17330  return manage(res);
17331}
17332
17333isl::checked::val set::min_val(const isl::checked::aff &obj) const
17334{
17335  auto res = isl_set_min_val(get(), obj.get());
17336  return manage(res);
17337}
17338
17339class size set::n_basic_set() const
17340{
17341  auto res = isl_set_n_basic_set(get());
17342  return manage(res);
17343}
17344
17345isl::checked::pw_aff set::param_pw_aff_on_domain(isl::checked::id id) const
17346{
17347  auto res = isl_set_param_pw_aff_on_domain_id(copy(), id.release());
17348  return manage(res);
17349}
17350
17351isl::checked::pw_aff set::param_pw_aff_on_domain(const std::string &id) const
17352{
17353  return this->param_pw_aff_on_domain(isl::checked::id(ctx(), id));
17354}
17355
17356isl::checked::set set::params() const
17357{
17358  auto res = isl_set_params(copy());
17359  return manage(res);
17360}
17361
17362isl::checked::multi_val set::plain_multi_val_if_fixed() const
17363{
17364  auto res = isl_set_get_plain_multi_val_if_fixed(get());
17365  return manage(res);
17366}
17367
17368isl::checked::multi_val set::get_plain_multi_val_if_fixed() const
17369{
17370  return plain_multi_val_if_fixed();
17371}
17372
17373isl::checked::basic_set set::polyhedral_hull() const
17374{
17375  auto res = isl_set_polyhedral_hull(copy());
17376  return manage(res);
17377}
17378
17379isl::checked::set set::preimage(isl::checked::multi_aff ma) const
17380{
17381  auto res = isl_set_preimage_multi_aff(copy(), ma.release());
17382  return manage(res);
17383}
17384
17385isl::checked::set set::preimage(isl::checked::multi_pw_aff mpa) const
17386{
17387  auto res = isl_set_preimage_multi_pw_aff(copy(), mpa.release());
17388  return manage(res);
17389}
17390
17391isl::checked::set set::preimage(isl::checked::pw_multi_aff pma) const
17392{
17393  auto res = isl_set_preimage_pw_multi_aff(copy(), pma.release());
17394  return manage(res);
17395}
17396
17397isl::checked::union_set set::preimage(const isl::checked::union_pw_multi_aff &upma) const
17398{
17399  return isl::checked::union_set(*this).preimage(upma);
17400}
17401
17402isl::checked::set set::product(isl::checked::set set2) const
17403{
17404  auto res = isl_set_product(copy(), set2.release());
17405  return manage(res);
17406}
17407
17408isl::checked::set set::project_out_all_params() const
17409{
17410  auto res = isl_set_project_out_all_params(copy());
17411  return manage(res);
17412}
17413
17414isl::checked::set set::project_out_param(isl::checked::id id) const
17415{
17416  auto res = isl_set_project_out_param_id(copy(), id.release());
17417  return manage(res);
17418}
17419
17420isl::checked::set set::project_out_param(const std::string &id) const
17421{
17422  return this->project_out_param(isl::checked::id(ctx(), id));
17423}
17424
17425isl::checked::set set::project_out_param(isl::checked::id_list list) const
17426{
17427  auto res = isl_set_project_out_param_id_list(copy(), list.release());
17428  return manage(res);
17429}
17430
17431isl::checked::pw_aff set::pw_aff_on_domain(isl::checked::val v) const
17432{
17433  auto res = isl_set_pw_aff_on_domain_val(copy(), v.release());
17434  return manage(res);
17435}
17436
17437isl::checked::pw_aff set::pw_aff_on_domain(long v) const
17438{
17439  return this->pw_aff_on_domain(isl::checked::val(ctx(), v));
17440}
17441
17442isl::checked::pw_multi_aff set::pw_multi_aff_on_domain(isl::checked::multi_val mv) const
17443{
17444  auto res = isl_set_pw_multi_aff_on_domain_multi_val(copy(), mv.release());
17445  return manage(res);
17446}
17447
17448isl::checked::basic_set set::sample() const
17449{
17450  auto res = isl_set_sample(copy());
17451  return manage(res);
17452}
17453
17454isl::checked::point set::sample_point() const
17455{
17456  auto res = isl_set_sample_point(copy());
17457  return manage(res);
17458}
17459
17460isl::checked::set_list set::set_list() const
17461{
17462  return isl::checked::union_set(*this).set_list();
17463}
17464
17465isl::checked::fixed_box set::simple_fixed_box_hull() const
17466{
17467  auto res = isl_set_get_simple_fixed_box_hull(get());
17468  return manage(res);
17469}
17470
17471isl::checked::fixed_box set::get_simple_fixed_box_hull() const
17472{
17473  return simple_fixed_box_hull();
17474}
17475
17476isl::checked::space set::space() const
17477{
17478  auto res = isl_set_get_space(get());
17479  return manage(res);
17480}
17481
17482isl::checked::space set::get_space() const
17483{
17484  return space();
17485}
17486
17487isl::checked::val set::stride(int pos) const
17488{
17489  auto res = isl_set_get_stride(get(), pos);
17490  return manage(res);
17491}
17492
17493isl::checked::val set::get_stride(int pos) const
17494{
17495  return stride(pos);
17496}
17497
17498isl::checked::set set::subtract(isl::checked::set set2) const
17499{
17500  auto res = isl_set_subtract(copy(), set2.release());
17501  return manage(res);
17502}
17503
17504isl::checked::union_set set::subtract(const isl::checked::union_set &uset2) const
17505{
17506  return isl::checked::union_set(*this).subtract(uset2);
17507}
17508
17509isl::checked::set set::subtract(const isl::checked::basic_set &set2) const
17510{
17511  return this->subtract(isl::checked::set(set2));
17512}
17513
17514isl::checked::set set::subtract(const isl::checked::point &set2) const
17515{
17516  return this->subtract(isl::checked::set(set2));
17517}
17518
17519isl::checked::set_list set::to_list() const
17520{
17521  auto res = isl_set_to_list(copy());
17522  return manage(res);
17523}
17524
17525isl::checked::union_set set::to_union_set() const
17526{
17527  auto res = isl_set_to_union_set(copy());
17528  return manage(res);
17529}
17530
17531isl::checked::map set::translation() const
17532{
17533  auto res = isl_set_translation(copy());
17534  return manage(res);
17535}
17536
17537class size set::tuple_dim() const
17538{
17539  auto res = isl_set_tuple_dim(get());
17540  return manage(res);
17541}
17542
17543isl::checked::set set::unbind_params(isl::checked::multi_id tuple) const
17544{
17545  auto res = isl_set_unbind_params(copy(), tuple.release());
17546  return manage(res);
17547}
17548
17549isl::checked::map set::unbind_params_insert_domain(isl::checked::multi_id domain) const
17550{
17551  auto res = isl_set_unbind_params_insert_domain(copy(), domain.release());
17552  return manage(res);
17553}
17554
17555isl::checked::set set::unite(isl::checked::set set2) const
17556{
17557  auto res = isl_set_union(copy(), set2.release());
17558  return manage(res);
17559}
17560
17561isl::checked::union_set set::unite(const isl::checked::union_set &uset2) const
17562{
17563  return isl::checked::union_set(*this).unite(uset2);
17564}
17565
17566isl::checked::set set::unite(const isl::checked::basic_set &set2) const
17567{
17568  return this->unite(isl::checked::set(set2));
17569}
17570
17571isl::checked::set set::unite(const isl::checked::point &set2) const
17572{
17573  return this->unite(isl::checked::set(set2));
17574}
17575
17576isl::checked::set set::universe(isl::checked::space space)
17577{
17578  auto res = isl_set_universe(space.release());
17579  return manage(res);
17580}
17581
17582isl::checked::basic_set set::unshifted_simple_hull() const
17583{
17584  auto res = isl_set_unshifted_simple_hull(copy());
17585  return manage(res);
17586}
17587
17588isl::checked::map set::unwrap() const
17589{
17590  auto res = isl_set_unwrap(copy());
17591  return manage(res);
17592}
17593
17594isl::checked::set set::upper_bound(isl::checked::multi_pw_aff upper) const
17595{
17596  auto res = isl_set_upper_bound_multi_pw_aff(copy(), upper.release());
17597  return manage(res);
17598}
17599
17600isl::checked::set set::upper_bound(isl::checked::multi_val upper) const
17601{
17602  auto res = isl_set_upper_bound_multi_val(copy(), upper.release());
17603  return manage(res);
17604}
17605
17606isl::checked::set set::wrapped_reverse() const
17607{
17608  auto res = isl_set_wrapped_reverse(copy());
17609  return manage(res);
17610}
17611
17612inline std::ostream &operator<<(std::ostream &os, const set &obj)
17613{
17614  char *str = isl_set_to_str(obj.get());
17615  if (!str) {
17616    os.setstate(std::ios_base::badbit);
17617    return os;
17618  }
17619  os << str;
17620  free(str);
17621  return os;
17622}
17623
17624// implementations for isl::set_list
17625set_list manage(__isl_take isl_set_list *ptr) {
17626  return set_list(ptr);
17627}
17628set_list manage_copy(__isl_keep isl_set_list *ptr) {
17629  ptr = isl_set_list_copy(ptr);
17630  return set_list(ptr);
17631}
17632
17633set_list::set_list(__isl_take isl_set_list *ptr)
17634    : ptr(ptr) {}
17635
17636set_list::set_list()
17637    : ptr(nullptr) {}
17638
17639set_list::set_list(const set_list &obj)
17640    : ptr(nullptr)
17641{
17642  ptr = obj.copy();
17643}
17644
17645set_list::set_list(isl::checked::ctx ctx, int n)
17646{
17647  auto res = isl_set_list_alloc(ctx.release(), n);
17648  ptr = res;
17649}
17650
17651set_list::set_list(isl::checked::set el)
17652{
17653  auto res = isl_set_list_from_set(el.release());
17654  ptr = res;
17655}
17656
17657set_list::set_list(isl::checked::ctx ctx, const std::string &str)
17658{
17659  auto res = isl_set_list_read_from_str(ctx.release(), str.c_str());
17660  ptr = res;
17661}
17662
17663set_list &set_list::operator=(set_list obj) {
17664  std::swap(this->ptr, obj.ptr);
17665  return *this;
17666}
17667
17668set_list::~set_list() {
17669  if (ptr)
17670    isl_set_list_free(ptr);
17671}
17672
17673__isl_give isl_set_list *set_list::copy() const & {
17674  return isl_set_list_copy(ptr);
17675}
17676
17677__isl_keep isl_set_list *set_list::get() const {
17678  return ptr;
17679}
17680
17681__isl_give isl_set_list *set_list::release() {
17682  isl_set_list *tmp = ptr;
17683  ptr = nullptr;
17684  return tmp;
17685}
17686
17687bool set_list::is_null() const {
17688  return ptr == nullptr;
17689}
17690
17691isl::checked::ctx set_list::ctx() const {
17692  return isl::checked::ctx(isl_set_list_get_ctx(ptr));
17693}
17694
17695isl::checked::set_list set_list::add(isl::checked::set el) const
17696{
17697  auto res = isl_set_list_add(copy(), el.release());
17698  return manage(res);
17699}
17700
17701isl::checked::set set_list::at(int index) const
17702{
17703  auto res = isl_set_list_get_at(get(), index);
17704  return manage(res);
17705}
17706
17707isl::checked::set set_list::get_at(int index) const
17708{
17709  return at(index);
17710}
17711
17712isl::checked::set_list set_list::clear() const
17713{
17714  auto res = isl_set_list_clear(copy());
17715  return manage(res);
17716}
17717
17718isl::checked::set_list set_list::concat(isl::checked::set_list list2) const
17719{
17720  auto res = isl_set_list_concat(copy(), list2.release());
17721  return manage(res);
17722}
17723
17724isl::checked::set_list set_list::drop(unsigned int first, unsigned int n) const
17725{
17726  auto res = isl_set_list_drop(copy(), first, n);
17727  return manage(res);
17728}
17729
17730stat set_list::foreach(const std::function<stat(isl::checked::set)> &fn) const
17731{
17732  struct fn_data {
17733    std::function<stat(isl::checked::set)> func;
17734  } fn_data = { fn };
17735  auto fn_lambda = [](isl_set *arg_0, void *arg_1) -> isl_stat {
17736    auto *data = static_cast<struct fn_data *>(arg_1);
17737    auto ret = (data->func)(manage(arg_0));
17738    return ret.release();
17739  };
17740  auto res = isl_set_list_foreach(get(), fn_lambda, &fn_data);
17741  return manage(res);
17742}
17743
17744stat set_list::foreach_scc(const std::function<boolean(isl::checked::set, isl::checked::set)> &follows, const std::function<stat(isl::checked::set_list)> &fn) const
17745{
17746  struct follows_data {
17747    std::function<boolean(isl::checked::set, isl::checked::set)> func;
17748  } follows_data = { follows };
17749  auto follows_lambda = [](isl_set *arg_0, isl_set *arg_1, void *arg_2) -> isl_bool {
17750    auto *data = static_cast<struct follows_data *>(arg_2);
17751    auto ret = (data->func)(manage_copy(arg_0), manage_copy(arg_1));
17752    return ret.release();
17753  };
17754  struct fn_data {
17755    std::function<stat(isl::checked::set_list)> func;
17756  } fn_data = { fn };
17757  auto fn_lambda = [](isl_set_list *arg_0, void *arg_1) -> isl_stat {
17758    auto *data = static_cast<struct fn_data *>(arg_1);
17759    auto ret = (data->func)(manage(arg_0));
17760    return ret.release();
17761  };
17762  auto res = isl_set_list_foreach_scc(get(), follows_lambda, &follows_data, fn_lambda, &fn_data);
17763  return manage(res);
17764}
17765
17766isl::checked::set_list set_list::insert(unsigned int pos, isl::checked::set el) const
17767{
17768  auto res = isl_set_list_insert(copy(), pos, el.release());
17769  return manage(res);
17770}
17771
17772isl::checked::set_list set_list::set_at(int index, isl::checked::set el) const
17773{
17774  auto res = isl_set_list_set_at(copy(), index, el.release());
17775  return manage(res);
17776}
17777
17778class size set_list::size() const
17779{
17780  auto res = isl_set_list_size(get());
17781  return manage(res);
17782}
17783
17784inline std::ostream &operator<<(std::ostream &os, const set_list &obj)
17785{
17786  char *str = isl_set_list_to_str(obj.get());
17787  if (!str) {
17788    os.setstate(std::ios_base::badbit);
17789    return os;
17790  }
17791  os << str;
17792  free(str);
17793  return os;
17794}
17795
17796// implementations for isl::space
17797space manage(__isl_take isl_space *ptr) {
17798  return space(ptr);
17799}
17800space manage_copy(__isl_keep isl_space *ptr) {
17801  ptr = isl_space_copy(ptr);
17802  return space(ptr);
17803}
17804
17805space::space(__isl_take isl_space *ptr)
17806    : ptr(ptr) {}
17807
17808space::space()
17809    : ptr(nullptr) {}
17810
17811space::space(const space &obj)
17812    : ptr(nullptr)
17813{
17814  ptr = obj.copy();
17815}
17816
17817space::space(isl::checked::ctx ctx, const std::string &str)
17818{
17819  auto res = isl_space_read_from_str(ctx.release(), str.c_str());
17820  ptr = res;
17821}
17822
17823space &space::operator=(space obj) {
17824  std::swap(this->ptr, obj.ptr);
17825  return *this;
17826}
17827
17828space::~space() {
17829  if (ptr)
17830    isl_space_free(ptr);
17831}
17832
17833__isl_give isl_space *space::copy() const & {
17834  return isl_space_copy(ptr);
17835}
17836
17837__isl_keep isl_space *space::get() const {
17838  return ptr;
17839}
17840
17841__isl_give isl_space *space::release() {
17842  isl_space *tmp = ptr;
17843  ptr = nullptr;
17844  return tmp;
17845}
17846
17847bool space::is_null() const {
17848  return ptr == nullptr;
17849}
17850
17851isl::checked::ctx space::ctx() const {
17852  return isl::checked::ctx(isl_space_get_ctx(ptr));
17853}
17854
17855isl::checked::space space::add_named_tuple(isl::checked::id tuple_id, unsigned int dim) const
17856{
17857  auto res = isl_space_add_named_tuple_id_ui(copy(), tuple_id.release(), dim);
17858  return manage(res);
17859}
17860
17861isl::checked::space space::add_named_tuple(const std::string &tuple_id, unsigned int dim) const
17862{
17863  return this->add_named_tuple(isl::checked::id(ctx(), tuple_id), dim);
17864}
17865
17866isl::checked::space space::add_param(isl::checked::id id) const
17867{
17868  auto res = isl_space_add_param_id(copy(), id.release());
17869  return manage(res);
17870}
17871
17872isl::checked::space space::add_param(const std::string &id) const
17873{
17874  return this->add_param(isl::checked::id(ctx(), id));
17875}
17876
17877isl::checked::space space::add_unnamed_tuple(unsigned int dim) const
17878{
17879  auto res = isl_space_add_unnamed_tuple_ui(copy(), dim);
17880  return manage(res);
17881}
17882
17883isl::checked::space space::curry() const
17884{
17885  auto res = isl_space_curry(copy());
17886  return manage(res);
17887}
17888
17889isl::checked::space space::domain() const
17890{
17891  auto res = isl_space_domain(copy());
17892  return manage(res);
17893}
17894
17895isl::checked::multi_aff space::domain_map_multi_aff() const
17896{
17897  auto res = isl_space_domain_map_multi_aff(copy());
17898  return manage(res);
17899}
17900
17901isl::checked::pw_multi_aff space::domain_map_pw_multi_aff() const
17902{
17903  auto res = isl_space_domain_map_pw_multi_aff(copy());
17904  return manage(res);
17905}
17906
17907isl::checked::space space::domain_reverse() const
17908{
17909  auto res = isl_space_domain_reverse(copy());
17910  return manage(res);
17911}
17912
17913isl::checked::id space::domain_tuple_id() const
17914{
17915  auto res = isl_space_get_domain_tuple_id(get());
17916  return manage(res);
17917}
17918
17919isl::checked::id space::get_domain_tuple_id() const
17920{
17921  return domain_tuple_id();
17922}
17923
17924isl::checked::space space::drop_all_params() const
17925{
17926  auto res = isl_space_drop_all_params(copy());
17927  return manage(res);
17928}
17929
17930isl::checked::space space::flatten_domain() const
17931{
17932  auto res = isl_space_flatten_domain(copy());
17933  return manage(res);
17934}
17935
17936isl::checked::space space::flatten_range() const
17937{
17938  auto res = isl_space_flatten_range(copy());
17939  return manage(res);
17940}
17941
17942boolean space::has_domain_tuple_id() const
17943{
17944  auto res = isl_space_has_domain_tuple_id(get());
17945  return manage(res);
17946}
17947
17948boolean space::has_range_tuple_id() const
17949{
17950  auto res = isl_space_has_range_tuple_id(get());
17951  return manage(res);
17952}
17953
17954isl::checked::multi_aff space::identity_multi_aff_on_domain() const
17955{
17956  auto res = isl_space_identity_multi_aff_on_domain(copy());
17957  return manage(res);
17958}
17959
17960isl::checked::multi_pw_aff space::identity_multi_pw_aff_on_domain() const
17961{
17962  auto res = isl_space_identity_multi_pw_aff_on_domain(copy());
17963  return manage(res);
17964}
17965
17966isl::checked::pw_multi_aff space::identity_pw_multi_aff_on_domain() const
17967{
17968  auto res = isl_space_identity_pw_multi_aff_on_domain(copy());
17969  return manage(res);
17970}
17971
17972boolean space::is_equal(const isl::checked::space &space2) const
17973{
17974  auto res = isl_space_is_equal(get(), space2.get());
17975  return manage(res);
17976}
17977
17978boolean space::is_wrapping() const
17979{
17980  auto res = isl_space_is_wrapping(get());
17981  return manage(res);
17982}
17983
17984isl::checked::space space::map_from_set() const
17985{
17986  auto res = isl_space_map_from_set(copy());
17987  return manage(res);
17988}
17989
17990isl::checked::multi_aff space::multi_aff(isl::checked::aff_list list) const
17991{
17992  auto res = isl_space_multi_aff(copy(), list.release());
17993  return manage(res);
17994}
17995
17996isl::checked::multi_aff space::multi_aff_on_domain(isl::checked::multi_val mv) const
17997{
17998  auto res = isl_space_multi_aff_on_domain_multi_val(copy(), mv.release());
17999  return manage(res);
18000}
18001
18002isl::checked::multi_id space::multi_id(isl::checked::id_list list) const
18003{
18004  auto res = isl_space_multi_id(copy(), list.release());
18005  return manage(res);
18006}
18007
18008isl::checked::multi_pw_aff space::multi_pw_aff(isl::checked::pw_aff_list list) const
18009{
18010  auto res = isl_space_multi_pw_aff(copy(), list.release());
18011  return manage(res);
18012}
18013
18014isl::checked::multi_union_pw_aff space::multi_union_pw_aff(isl::checked::union_pw_aff_list list) const
18015{
18016  auto res = isl_space_multi_union_pw_aff(copy(), list.release());
18017  return manage(res);
18018}
18019
18020isl::checked::multi_val space::multi_val(isl::checked::val_list list) const
18021{
18022  auto res = isl_space_multi_val(copy(), list.release());
18023  return manage(res);
18024}
18025
18026isl::checked::aff space::param_aff_on_domain(isl::checked::id id) const
18027{
18028  auto res = isl_space_param_aff_on_domain_id(copy(), id.release());
18029  return manage(res);
18030}
18031
18032isl::checked::aff space::param_aff_on_domain(const std::string &id) const
18033{
18034  return this->param_aff_on_domain(isl::checked::id(ctx(), id));
18035}
18036
18037isl::checked::space space::params() const
18038{
18039  auto res = isl_space_params(copy());
18040  return manage(res);
18041}
18042
18043isl::checked::space space::product(isl::checked::space right) const
18044{
18045  auto res = isl_space_product(copy(), right.release());
18046  return manage(res);
18047}
18048
18049isl::checked::space space::range() const
18050{
18051  auto res = isl_space_range(copy());
18052  return manage(res);
18053}
18054
18055isl::checked::multi_aff space::range_map_multi_aff() const
18056{
18057  auto res = isl_space_range_map_multi_aff(copy());
18058  return manage(res);
18059}
18060
18061isl::checked::pw_multi_aff space::range_map_pw_multi_aff() const
18062{
18063  auto res = isl_space_range_map_pw_multi_aff(copy());
18064  return manage(res);
18065}
18066
18067isl::checked::space space::range_reverse() const
18068{
18069  auto res = isl_space_range_reverse(copy());
18070  return manage(res);
18071}
18072
18073isl::checked::id space::range_tuple_id() const
18074{
18075  auto res = isl_space_get_range_tuple_id(get());
18076  return manage(res);
18077}
18078
18079isl::checked::id space::get_range_tuple_id() const
18080{
18081  return range_tuple_id();
18082}
18083
18084isl::checked::space space::reverse() const
18085{
18086  auto res = isl_space_reverse(copy());
18087  return manage(res);
18088}
18089
18090isl::checked::space space::set_domain_tuple(isl::checked::id id) const
18091{
18092  auto res = isl_space_set_domain_tuple_id(copy(), id.release());
18093  return manage(res);
18094}
18095
18096isl::checked::space space::set_domain_tuple(const std::string &id) const
18097{
18098  return this->set_domain_tuple(isl::checked::id(ctx(), id));
18099}
18100
18101isl::checked::space space::set_range_tuple(isl::checked::id id) const
18102{
18103  auto res = isl_space_set_range_tuple_id(copy(), id.release());
18104  return manage(res);
18105}
18106
18107isl::checked::space space::set_range_tuple(const std::string &id) const
18108{
18109  return this->set_range_tuple(isl::checked::id(ctx(), id));
18110}
18111
18112isl::checked::space space::uncurry() const
18113{
18114  auto res = isl_space_uncurry(copy());
18115  return manage(res);
18116}
18117
18118isl::checked::space space::unit(isl::checked::ctx ctx)
18119{
18120  auto res = isl_space_unit(ctx.release());
18121  return manage(res);
18122}
18123
18124isl::checked::map space::universe_map() const
18125{
18126  auto res = isl_space_universe_map(copy());
18127  return manage(res);
18128}
18129
18130isl::checked::set space::universe_set() const
18131{
18132  auto res = isl_space_universe_set(copy());
18133  return manage(res);
18134}
18135
18136isl::checked::space space::unwrap() const
18137{
18138  auto res = isl_space_unwrap(copy());
18139  return manage(res);
18140}
18141
18142isl::checked::space space::wrap() const
18143{
18144  auto res = isl_space_wrap(copy());
18145  return manage(res);
18146}
18147
18148isl::checked::space space::wrapped_reverse() const
18149{
18150  auto res = isl_space_wrapped_reverse(copy());
18151  return manage(res);
18152}
18153
18154isl::checked::aff space::zero_aff_on_domain() const
18155{
18156  auto res = isl_space_zero_aff_on_domain(copy());
18157  return manage(res);
18158}
18159
18160isl::checked::multi_aff space::zero_multi_aff() const
18161{
18162  auto res = isl_space_zero_multi_aff(copy());
18163  return manage(res);
18164}
18165
18166isl::checked::multi_pw_aff space::zero_multi_pw_aff() const
18167{
18168  auto res = isl_space_zero_multi_pw_aff(copy());
18169  return manage(res);
18170}
18171
18172isl::checked::multi_union_pw_aff space::zero_multi_union_pw_aff() const
18173{
18174  auto res = isl_space_zero_multi_union_pw_aff(copy());
18175  return manage(res);
18176}
18177
18178isl::checked::multi_val space::zero_multi_val() const
18179{
18180  auto res = isl_space_zero_multi_val(copy());
18181  return manage(res);
18182}
18183
18184inline std::ostream &operator<<(std::ostream &os, const space &obj)
18185{
18186  char *str = isl_space_to_str(obj.get());
18187  if (!str) {
18188    os.setstate(std::ios_base::badbit);
18189    return os;
18190  }
18191  os << str;
18192  free(str);
18193  return os;
18194}
18195
18196// implementations for isl::union_access_info
18197union_access_info manage(__isl_take isl_union_access_info *ptr) {
18198  return union_access_info(ptr);
18199}
18200union_access_info manage_copy(__isl_keep isl_union_access_info *ptr) {
18201  ptr = isl_union_access_info_copy(ptr);
18202  return union_access_info(ptr);
18203}
18204
18205union_access_info::union_access_info(__isl_take isl_union_access_info *ptr)
18206    : ptr(ptr) {}
18207
18208union_access_info::union_access_info()
18209    : ptr(nullptr) {}
18210
18211union_access_info::union_access_info(const union_access_info &obj)
18212    : ptr(nullptr)
18213{
18214  ptr = obj.copy();
18215}
18216
18217union_access_info::union_access_info(isl::checked::union_map sink)
18218{
18219  auto res = isl_union_access_info_from_sink(sink.release());
18220  ptr = res;
18221}
18222
18223union_access_info &union_access_info::operator=(union_access_info obj) {
18224  std::swap(this->ptr, obj.ptr);
18225  return *this;
18226}
18227
18228union_access_info::~union_access_info() {
18229  if (ptr)
18230    isl_union_access_info_free(ptr);
18231}
18232
18233__isl_give isl_union_access_info *union_access_info::copy() const & {
18234  return isl_union_access_info_copy(ptr);
18235}
18236
18237__isl_keep isl_union_access_info *union_access_info::get() const {
18238  return ptr;
18239}
18240
18241__isl_give isl_union_access_info *union_access_info::release() {
18242  isl_union_access_info *tmp = ptr;
18243  ptr = nullptr;
18244  return tmp;
18245}
18246
18247bool union_access_info::is_null() const {
18248  return ptr == nullptr;
18249}
18250
18251isl::checked::ctx union_access_info::ctx() const {
18252  return isl::checked::ctx(isl_union_access_info_get_ctx(ptr));
18253}
18254
18255isl::checked::union_flow union_access_info::compute_flow() const
18256{
18257  auto res = isl_union_access_info_compute_flow(copy());
18258  return manage(res);
18259}
18260
18261isl::checked::union_access_info union_access_info::set_kill(isl::checked::union_map kill) const
18262{
18263  auto res = isl_union_access_info_set_kill(copy(), kill.release());
18264  return manage(res);
18265}
18266
18267isl::checked::union_access_info union_access_info::set_may_source(isl::checked::union_map may_source) const
18268{
18269  auto res = isl_union_access_info_set_may_source(copy(), may_source.release());
18270  return manage(res);
18271}
18272
18273isl::checked::union_access_info union_access_info::set_must_source(isl::checked::union_map must_source) const
18274{
18275  auto res = isl_union_access_info_set_must_source(copy(), must_source.release());
18276  return manage(res);
18277}
18278
18279isl::checked::union_access_info union_access_info::set_schedule(isl::checked::schedule schedule) const
18280{
18281  auto res = isl_union_access_info_set_schedule(copy(), schedule.release());
18282  return manage(res);
18283}
18284
18285isl::checked::union_access_info union_access_info::set_schedule_map(isl::checked::union_map schedule_map) const
18286{
18287  auto res = isl_union_access_info_set_schedule_map(copy(), schedule_map.release());
18288  return manage(res);
18289}
18290
18291inline std::ostream &operator<<(std::ostream &os, const union_access_info &obj)
18292{
18293  char *str = isl_union_access_info_to_str(obj.get());
18294  if (!str) {
18295    os.setstate(std::ios_base::badbit);
18296    return os;
18297  }
18298  os << str;
18299  free(str);
18300  return os;
18301}
18302
18303// implementations for isl::union_flow
18304union_flow manage(__isl_take isl_union_flow *ptr) {
18305  return union_flow(ptr);
18306}
18307union_flow manage_copy(__isl_keep isl_union_flow *ptr) {
18308  ptr = isl_union_flow_copy(ptr);
18309  return union_flow(ptr);
18310}
18311
18312union_flow::union_flow(__isl_take isl_union_flow *ptr)
18313    : ptr(ptr) {}
18314
18315union_flow::union_flow()
18316    : ptr(nullptr) {}
18317
18318union_flow::union_flow(const union_flow &obj)
18319    : ptr(nullptr)
18320{
18321  ptr = obj.copy();
18322}
18323
18324union_flow &union_flow::operator=(union_flow obj) {
18325  std::swap(this->ptr, obj.ptr);
18326  return *this;
18327}
18328
18329union_flow::~union_flow() {
18330  if (ptr)
18331    isl_union_flow_free(ptr);
18332}
18333
18334__isl_give isl_union_flow *union_flow::copy() const & {
18335  return isl_union_flow_copy(ptr);
18336}
18337
18338__isl_keep isl_union_flow *union_flow::get() const {
18339  return ptr;
18340}
18341
18342__isl_give isl_union_flow *union_flow::release() {
18343  isl_union_flow *tmp = ptr;
18344  ptr = nullptr;
18345  return tmp;
18346}
18347
18348bool union_flow::is_null() const {
18349  return ptr == nullptr;
18350}
18351
18352isl::checked::ctx union_flow::ctx() const {
18353  return isl::checked::ctx(isl_union_flow_get_ctx(ptr));
18354}
18355
18356isl::checked::union_map union_flow::full_may_dependence() const
18357{
18358  auto res = isl_union_flow_get_full_may_dependence(get());
18359  return manage(res);
18360}
18361
18362isl::checked::union_map union_flow::get_full_may_dependence() const
18363{
18364  return full_may_dependence();
18365}
18366
18367isl::checked::union_map union_flow::full_must_dependence() const
18368{
18369  auto res = isl_union_flow_get_full_must_dependence(get());
18370  return manage(res);
18371}
18372
18373isl::checked::union_map union_flow::get_full_must_dependence() const
18374{
18375  return full_must_dependence();
18376}
18377
18378isl::checked::union_map union_flow::may_dependence() const
18379{
18380  auto res = isl_union_flow_get_may_dependence(get());
18381  return manage(res);
18382}
18383
18384isl::checked::union_map union_flow::get_may_dependence() const
18385{
18386  return may_dependence();
18387}
18388
18389isl::checked::union_map union_flow::may_no_source() const
18390{
18391  auto res = isl_union_flow_get_may_no_source(get());
18392  return manage(res);
18393}
18394
18395isl::checked::union_map union_flow::get_may_no_source() const
18396{
18397  return may_no_source();
18398}
18399
18400isl::checked::union_map union_flow::must_dependence() const
18401{
18402  auto res = isl_union_flow_get_must_dependence(get());
18403  return manage(res);
18404}
18405
18406isl::checked::union_map union_flow::get_must_dependence() const
18407{
18408  return must_dependence();
18409}
18410
18411isl::checked::union_map union_flow::must_no_source() const
18412{
18413  auto res = isl_union_flow_get_must_no_source(get());
18414  return manage(res);
18415}
18416
18417isl::checked::union_map union_flow::get_must_no_source() const
18418{
18419  return must_no_source();
18420}
18421
18422inline std::ostream &operator<<(std::ostream &os, const union_flow &obj)
18423{
18424  char *str = isl_union_flow_to_str(obj.get());
18425  if (!str) {
18426    os.setstate(std::ios_base::badbit);
18427    return os;
18428  }
18429  os << str;
18430  free(str);
18431  return os;
18432}
18433
18434// implementations for isl::union_map
18435union_map manage(__isl_take isl_union_map *ptr) {
18436  return union_map(ptr);
18437}
18438union_map manage_copy(__isl_keep isl_union_map *ptr) {
18439  ptr = isl_union_map_copy(ptr);
18440  return union_map(ptr);
18441}
18442
18443union_map::union_map(__isl_take isl_union_map *ptr)
18444    : ptr(ptr) {}
18445
18446union_map::union_map()
18447    : ptr(nullptr) {}
18448
18449union_map::union_map(const union_map &obj)
18450    : ptr(nullptr)
18451{
18452  ptr = obj.copy();
18453}
18454
18455union_map::union_map(isl::checked::basic_map bmap)
18456{
18457  auto res = isl_union_map_from_basic_map(bmap.release());
18458  ptr = res;
18459}
18460
18461union_map::union_map(isl::checked::map map)
18462{
18463  auto res = isl_union_map_from_map(map.release());
18464  ptr = res;
18465}
18466
18467union_map::union_map(isl::checked::ctx ctx, const std::string &str)
18468{
18469  auto res = isl_union_map_read_from_str(ctx.release(), str.c_str());
18470  ptr = res;
18471}
18472
18473union_map &union_map::operator=(union_map obj) {
18474  std::swap(this->ptr, obj.ptr);
18475  return *this;
18476}
18477
18478union_map::~union_map() {
18479  if (ptr)
18480    isl_union_map_free(ptr);
18481}
18482
18483__isl_give isl_union_map *union_map::copy() const & {
18484  return isl_union_map_copy(ptr);
18485}
18486
18487__isl_keep isl_union_map *union_map::get() const {
18488  return ptr;
18489}
18490
18491__isl_give isl_union_map *union_map::release() {
18492  isl_union_map *tmp = ptr;
18493  ptr = nullptr;
18494  return tmp;
18495}
18496
18497bool union_map::is_null() const {
18498  return ptr == nullptr;
18499}
18500
18501isl::checked::ctx union_map::ctx() const {
18502  return isl::checked::ctx(isl_union_map_get_ctx(ptr));
18503}
18504
18505isl::checked::union_map union_map::affine_hull() const
18506{
18507  auto res = isl_union_map_affine_hull(copy());
18508  return manage(res);
18509}
18510
18511isl::checked::union_map union_map::apply_domain(isl::checked::union_map umap2) const
18512{
18513  auto res = isl_union_map_apply_domain(copy(), umap2.release());
18514  return manage(res);
18515}
18516
18517isl::checked::union_map union_map::apply_range(isl::checked::union_map umap2) const
18518{
18519  auto res = isl_union_map_apply_range(copy(), umap2.release());
18520  return manage(res);
18521}
18522
18523isl::checked::map union_map::as_map() const
18524{
18525  auto res = isl_union_map_as_map(copy());
18526  return manage(res);
18527}
18528
18529isl::checked::multi_union_pw_aff union_map::as_multi_union_pw_aff() const
18530{
18531  auto res = isl_union_map_as_multi_union_pw_aff(copy());
18532  return manage(res);
18533}
18534
18535isl::checked::union_pw_multi_aff union_map::as_union_pw_multi_aff() const
18536{
18537  auto res = isl_union_map_as_union_pw_multi_aff(copy());
18538  return manage(res);
18539}
18540
18541isl::checked::union_set union_map::bind_range(isl::checked::multi_id tuple) const
18542{
18543  auto res = isl_union_map_bind_range(copy(), tuple.release());
18544  return manage(res);
18545}
18546
18547isl::checked::union_map union_map::coalesce() const
18548{
18549  auto res = isl_union_map_coalesce(copy());
18550  return manage(res);
18551}
18552
18553isl::checked::union_map union_map::compute_divs() const
18554{
18555  auto res = isl_union_map_compute_divs(copy());
18556  return manage(res);
18557}
18558
18559isl::checked::union_map union_map::curry() const
18560{
18561  auto res = isl_union_map_curry(copy());
18562  return manage(res);
18563}
18564
18565isl::checked::union_set union_map::deltas() const
18566{
18567  auto res = isl_union_map_deltas(copy());
18568  return manage(res);
18569}
18570
18571isl::checked::union_map union_map::detect_equalities() const
18572{
18573  auto res = isl_union_map_detect_equalities(copy());
18574  return manage(res);
18575}
18576
18577isl::checked::union_set union_map::domain() const
18578{
18579  auto res = isl_union_map_domain(copy());
18580  return manage(res);
18581}
18582
18583isl::checked::union_map union_map::domain_factor_domain() const
18584{
18585  auto res = isl_union_map_domain_factor_domain(copy());
18586  return manage(res);
18587}
18588
18589isl::checked::union_map union_map::domain_factor_range() const
18590{
18591  auto res = isl_union_map_domain_factor_range(copy());
18592  return manage(res);
18593}
18594
18595isl::checked::union_map union_map::domain_map() const
18596{
18597  auto res = isl_union_map_domain_map(copy());
18598  return manage(res);
18599}
18600
18601isl::checked::union_pw_multi_aff union_map::domain_map_union_pw_multi_aff() const
18602{
18603  auto res = isl_union_map_domain_map_union_pw_multi_aff(copy());
18604  return manage(res);
18605}
18606
18607isl::checked::union_map union_map::domain_product(isl::checked::union_map umap2) const
18608{
18609  auto res = isl_union_map_domain_product(copy(), umap2.release());
18610  return manage(res);
18611}
18612
18613isl::checked::union_map union_map::domain_reverse() const
18614{
18615  auto res = isl_union_map_domain_reverse(copy());
18616  return manage(res);
18617}
18618
18619isl::checked::union_map union_map::drop_unused_params() const
18620{
18621  auto res = isl_union_map_drop_unused_params(copy());
18622  return manage(res);
18623}
18624
18625isl::checked::union_map union_map::empty(isl::checked::ctx ctx)
18626{
18627  auto res = isl_union_map_empty_ctx(ctx.release());
18628  return manage(res);
18629}
18630
18631isl::checked::union_map union_map::eq_at(isl::checked::multi_union_pw_aff mupa) const
18632{
18633  auto res = isl_union_map_eq_at_multi_union_pw_aff(copy(), mupa.release());
18634  return manage(res);
18635}
18636
18637boolean union_map::every_map(const std::function<boolean(isl::checked::map)> &test) const
18638{
18639  struct test_data {
18640    std::function<boolean(isl::checked::map)> func;
18641  } test_data = { test };
18642  auto test_lambda = [](isl_map *arg_0, void *arg_1) -> isl_bool {
18643    auto *data = static_cast<struct test_data *>(arg_1);
18644    auto ret = (data->func)(manage_copy(arg_0));
18645    return ret.release();
18646  };
18647  auto res = isl_union_map_every_map(get(), test_lambda, &test_data);
18648  return manage(res);
18649}
18650
18651isl::checked::map union_map::extract_map(isl::checked::space space) const
18652{
18653  auto res = isl_union_map_extract_map(get(), space.release());
18654  return manage(res);
18655}
18656
18657isl::checked::union_map union_map::factor_domain() const
18658{
18659  auto res = isl_union_map_factor_domain(copy());
18660  return manage(res);
18661}
18662
18663isl::checked::union_map union_map::factor_range() const
18664{
18665  auto res = isl_union_map_factor_range(copy());
18666  return manage(res);
18667}
18668
18669isl::checked::union_map union_map::fixed_power(isl::checked::val exp) const
18670{
18671  auto res = isl_union_map_fixed_power_val(copy(), exp.release());
18672  return manage(res);
18673}
18674
18675isl::checked::union_map union_map::fixed_power(long exp) const
18676{
18677  return this->fixed_power(isl::checked::val(ctx(), exp));
18678}
18679
18680stat union_map::foreach_map(const std::function<stat(isl::checked::map)> &fn) const
18681{
18682  struct fn_data {
18683    std::function<stat(isl::checked::map)> func;
18684  } fn_data = { fn };
18685  auto fn_lambda = [](isl_map *arg_0, void *arg_1) -> isl_stat {
18686    auto *data = static_cast<struct fn_data *>(arg_1);
18687    auto ret = (data->func)(manage(arg_0));
18688    return ret.release();
18689  };
18690  auto res = isl_union_map_foreach_map(get(), fn_lambda, &fn_data);
18691  return manage(res);
18692}
18693
18694isl::checked::union_map union_map::from(isl::checked::multi_union_pw_aff mupa)
18695{
18696  auto res = isl_union_map_from_multi_union_pw_aff(mupa.release());
18697  return manage(res);
18698}
18699
18700isl::checked::union_map union_map::from(isl::checked::union_pw_multi_aff upma)
18701{
18702  auto res = isl_union_map_from_union_pw_multi_aff(upma.release());
18703  return manage(res);
18704}
18705
18706isl::checked::union_map union_map::from_domain(isl::checked::union_set uset)
18707{
18708  auto res = isl_union_map_from_domain(uset.release());
18709  return manage(res);
18710}
18711
18712isl::checked::union_map union_map::from_domain_and_range(isl::checked::union_set domain, isl::checked::union_set range)
18713{
18714  auto res = isl_union_map_from_domain_and_range(domain.release(), range.release());
18715  return manage(res);
18716}
18717
18718isl::checked::union_map union_map::from_range(isl::checked::union_set uset)
18719{
18720  auto res = isl_union_map_from_range(uset.release());
18721  return manage(res);
18722}
18723
18724isl::checked::union_map union_map::gist(isl::checked::union_map context) const
18725{
18726  auto res = isl_union_map_gist(copy(), context.release());
18727  return manage(res);
18728}
18729
18730isl::checked::union_map union_map::gist_domain(isl::checked::union_set uset) const
18731{
18732  auto res = isl_union_map_gist_domain(copy(), uset.release());
18733  return manage(res);
18734}
18735
18736isl::checked::union_map union_map::gist_params(isl::checked::set set) const
18737{
18738  auto res = isl_union_map_gist_params(copy(), set.release());
18739  return manage(res);
18740}
18741
18742isl::checked::union_map union_map::gist_range(isl::checked::union_set uset) const
18743{
18744  auto res = isl_union_map_gist_range(copy(), uset.release());
18745  return manage(res);
18746}
18747
18748isl::checked::union_map union_map::intersect(isl::checked::union_map umap2) const
18749{
18750  auto res = isl_union_map_intersect(copy(), umap2.release());
18751  return manage(res);
18752}
18753
18754isl::checked::union_map union_map::intersect_domain(isl::checked::space space) const
18755{
18756  auto res = isl_union_map_intersect_domain_space(copy(), space.release());
18757  return manage(res);
18758}
18759
18760isl::checked::union_map union_map::intersect_domain(isl::checked::union_set uset) const
18761{
18762  auto res = isl_union_map_intersect_domain_union_set(copy(), uset.release());
18763  return manage(res);
18764}
18765
18766isl::checked::union_map union_map::intersect_domain_factor_domain(isl::checked::union_map factor) const
18767{
18768  auto res = isl_union_map_intersect_domain_factor_domain(copy(), factor.release());
18769  return manage(res);
18770}
18771
18772isl::checked::union_map union_map::intersect_domain_factor_range(isl::checked::union_map factor) const
18773{
18774  auto res = isl_union_map_intersect_domain_factor_range(copy(), factor.release());
18775  return manage(res);
18776}
18777
18778isl::checked::union_map union_map::intersect_domain_wrapped_domain(isl::checked::union_set domain) const
18779{
18780  auto res = isl_union_map_intersect_domain_wrapped_domain_union_set(copy(), domain.release());
18781  return manage(res);
18782}
18783
18784isl::checked::union_map union_map::intersect_params(isl::checked::set set) const
18785{
18786  auto res = isl_union_map_intersect_params(copy(), set.release());
18787  return manage(res);
18788}
18789
18790isl::checked::union_map union_map::intersect_range(isl::checked::space space) const
18791{
18792  auto res = isl_union_map_intersect_range_space(copy(), space.release());
18793  return manage(res);
18794}
18795
18796isl::checked::union_map union_map::intersect_range(isl::checked::union_set uset) const
18797{
18798  auto res = isl_union_map_intersect_range_union_set(copy(), uset.release());
18799  return manage(res);
18800}
18801
18802isl::checked::union_map union_map::intersect_range_factor_domain(isl::checked::union_map factor) const
18803{
18804  auto res = isl_union_map_intersect_range_factor_domain(copy(), factor.release());
18805  return manage(res);
18806}
18807
18808isl::checked::union_map union_map::intersect_range_factor_range(isl::checked::union_map factor) const
18809{
18810  auto res = isl_union_map_intersect_range_factor_range(copy(), factor.release());
18811  return manage(res);
18812}
18813
18814isl::checked::union_map union_map::intersect_range_wrapped_domain(isl::checked::union_set domain) const
18815{
18816  auto res = isl_union_map_intersect_range_wrapped_domain_union_set(copy(), domain.release());
18817  return manage(res);
18818}
18819
18820boolean union_map::is_bijective() const
18821{
18822  auto res = isl_union_map_is_bijective(get());
18823  return manage(res);
18824}
18825
18826boolean union_map::is_disjoint(const isl::checked::union_map &umap2) const
18827{
18828  auto res = isl_union_map_is_disjoint(get(), umap2.get());
18829  return manage(res);
18830}
18831
18832boolean union_map::is_empty() const
18833{
18834  auto res = isl_union_map_is_empty(get());
18835  return manage(res);
18836}
18837
18838boolean union_map::is_equal(const isl::checked::union_map &umap2) const
18839{
18840  auto res = isl_union_map_is_equal(get(), umap2.get());
18841  return manage(res);
18842}
18843
18844boolean union_map::is_injective() const
18845{
18846  auto res = isl_union_map_is_injective(get());
18847  return manage(res);
18848}
18849
18850boolean union_map::is_single_valued() const
18851{
18852  auto res = isl_union_map_is_single_valued(get());
18853  return manage(res);
18854}
18855
18856boolean union_map::is_strict_subset(const isl::checked::union_map &umap2) const
18857{
18858  auto res = isl_union_map_is_strict_subset(get(), umap2.get());
18859  return manage(res);
18860}
18861
18862boolean union_map::is_subset(const isl::checked::union_map &umap2) const
18863{
18864  auto res = isl_union_map_is_subset(get(), umap2.get());
18865  return manage(res);
18866}
18867
18868boolean union_map::isa_map() const
18869{
18870  auto res = isl_union_map_isa_map(get());
18871  return manage(res);
18872}
18873
18874isl::checked::union_map union_map::lexmax() const
18875{
18876  auto res = isl_union_map_lexmax(copy());
18877  return manage(res);
18878}
18879
18880isl::checked::union_map union_map::lexmin() const
18881{
18882  auto res = isl_union_map_lexmin(copy());
18883  return manage(res);
18884}
18885
18886isl::checked::map_list union_map::map_list() const
18887{
18888  auto res = isl_union_map_get_map_list(get());
18889  return manage(res);
18890}
18891
18892isl::checked::map_list union_map::get_map_list() const
18893{
18894  return map_list();
18895}
18896
18897isl::checked::set union_map::params() const
18898{
18899  auto res = isl_union_map_params(copy());
18900  return manage(res);
18901}
18902
18903isl::checked::union_map union_map::polyhedral_hull() const
18904{
18905  auto res = isl_union_map_polyhedral_hull(copy());
18906  return manage(res);
18907}
18908
18909isl::checked::union_map union_map::preimage_domain(isl::checked::multi_aff ma) const
18910{
18911  auto res = isl_union_map_preimage_domain_multi_aff(copy(), ma.release());
18912  return manage(res);
18913}
18914
18915isl::checked::union_map union_map::preimage_domain(isl::checked::multi_pw_aff mpa) const
18916{
18917  auto res = isl_union_map_preimage_domain_multi_pw_aff(copy(), mpa.release());
18918  return manage(res);
18919}
18920
18921isl::checked::union_map union_map::preimage_domain(isl::checked::pw_multi_aff pma) const
18922{
18923  auto res = isl_union_map_preimage_domain_pw_multi_aff(copy(), pma.release());
18924  return manage(res);
18925}
18926
18927isl::checked::union_map union_map::preimage_domain(isl::checked::union_pw_multi_aff upma) const
18928{
18929  auto res = isl_union_map_preimage_domain_union_pw_multi_aff(copy(), upma.release());
18930  return manage(res);
18931}
18932
18933isl::checked::union_map union_map::preimage_range(isl::checked::multi_aff ma) const
18934{
18935  auto res = isl_union_map_preimage_range_multi_aff(copy(), ma.release());
18936  return manage(res);
18937}
18938
18939isl::checked::union_map union_map::preimage_range(isl::checked::pw_multi_aff pma) const
18940{
18941  auto res = isl_union_map_preimage_range_pw_multi_aff(copy(), pma.release());
18942  return manage(res);
18943}
18944
18945isl::checked::union_map union_map::preimage_range(isl::checked::union_pw_multi_aff upma) const
18946{
18947  auto res = isl_union_map_preimage_range_union_pw_multi_aff(copy(), upma.release());
18948  return manage(res);
18949}
18950
18951isl::checked::union_map union_map::product(isl::checked::union_map umap2) const
18952{
18953  auto res = isl_union_map_product(copy(), umap2.release());
18954  return manage(res);
18955}
18956
18957isl::checked::union_map union_map::project_out_all_params() const
18958{
18959  auto res = isl_union_map_project_out_all_params(copy());
18960  return manage(res);
18961}
18962
18963isl::checked::union_map union_map::project_out_param(isl::checked::id id) const
18964{
18965  auto res = isl_union_map_project_out_param_id(copy(), id.release());
18966  return manage(res);
18967}
18968
18969isl::checked::union_map union_map::project_out_param(const std::string &id) const
18970{
18971  return this->project_out_param(isl::checked::id(ctx(), id));
18972}
18973
18974isl::checked::union_map union_map::project_out_param(isl::checked::id_list list) const
18975{
18976  auto res = isl_union_map_project_out_param_id_list(copy(), list.release());
18977  return manage(res);
18978}
18979
18980isl::checked::union_set union_map::range() const
18981{
18982  auto res = isl_union_map_range(copy());
18983  return manage(res);
18984}
18985
18986isl::checked::union_map union_map::range_factor_domain() const
18987{
18988  auto res = isl_union_map_range_factor_domain(copy());
18989  return manage(res);
18990}
18991
18992isl::checked::union_map union_map::range_factor_range() const
18993{
18994  auto res = isl_union_map_range_factor_range(copy());
18995  return manage(res);
18996}
18997
18998isl::checked::union_map union_map::range_map() const
18999{
19000  auto res = isl_union_map_range_map(copy());
19001  return manage(res);
19002}
19003
19004isl::checked::union_map union_map::range_product(isl::checked::union_map umap2) const
19005{
19006  auto res = isl_union_map_range_product(copy(), umap2.release());
19007  return manage(res);
19008}
19009
19010isl::checked::union_map union_map::range_reverse() const
19011{
19012  auto res = isl_union_map_range_reverse(copy());
19013  return manage(res);
19014}
19015
19016isl::checked::union_map union_map::reverse() const
19017{
19018  auto res = isl_union_map_reverse(copy());
19019  return manage(res);
19020}
19021
19022isl::checked::space union_map::space() const
19023{
19024  auto res = isl_union_map_get_space(get());
19025  return manage(res);
19026}
19027
19028isl::checked::space union_map::get_space() const
19029{
19030  return space();
19031}
19032
19033isl::checked::union_map union_map::subtract(isl::checked::union_map umap2) const
19034{
19035  auto res = isl_union_map_subtract(copy(), umap2.release());
19036  return manage(res);
19037}
19038
19039isl::checked::union_map union_map::subtract_domain(isl::checked::union_set dom) const
19040{
19041  auto res = isl_union_map_subtract_domain(copy(), dom.release());
19042  return manage(res);
19043}
19044
19045isl::checked::union_map union_map::subtract_range(isl::checked::union_set dom) const
19046{
19047  auto res = isl_union_map_subtract_range(copy(), dom.release());
19048  return manage(res);
19049}
19050
19051isl::checked::union_map union_map::uncurry() const
19052{
19053  auto res = isl_union_map_uncurry(copy());
19054  return manage(res);
19055}
19056
19057isl::checked::union_map union_map::unite(isl::checked::union_map umap2) const
19058{
19059  auto res = isl_union_map_union(copy(), umap2.release());
19060  return manage(res);
19061}
19062
19063isl::checked::union_map union_map::universe() const
19064{
19065  auto res = isl_union_map_universe(copy());
19066  return manage(res);
19067}
19068
19069isl::checked::union_set union_map::wrap() const
19070{
19071  auto res = isl_union_map_wrap(copy());
19072  return manage(res);
19073}
19074
19075isl::checked::union_map union_map::zip() const
19076{
19077  auto res = isl_union_map_zip(copy());
19078  return manage(res);
19079}
19080
19081inline std::ostream &operator<<(std::ostream &os, const union_map &obj)
19082{
19083  char *str = isl_union_map_to_str(obj.get());
19084  if (!str) {
19085    os.setstate(std::ios_base::badbit);
19086    return os;
19087  }
19088  os << str;
19089  free(str);
19090  return os;
19091}
19092
19093// implementations for isl::union_pw_aff
19094union_pw_aff manage(__isl_take isl_union_pw_aff *ptr) {
19095  return union_pw_aff(ptr);
19096}
19097union_pw_aff manage_copy(__isl_keep isl_union_pw_aff *ptr) {
19098  ptr = isl_union_pw_aff_copy(ptr);
19099  return union_pw_aff(ptr);
19100}
19101
19102union_pw_aff::union_pw_aff(__isl_take isl_union_pw_aff *ptr)
19103    : ptr(ptr) {}
19104
19105union_pw_aff::union_pw_aff()
19106    : ptr(nullptr) {}
19107
19108union_pw_aff::union_pw_aff(const union_pw_aff &obj)
19109    : ptr(nullptr)
19110{
19111  ptr = obj.copy();
19112}
19113
19114union_pw_aff::union_pw_aff(isl::checked::aff aff)
19115{
19116  auto res = isl_union_pw_aff_from_aff(aff.release());
19117  ptr = res;
19118}
19119
19120union_pw_aff::union_pw_aff(isl::checked::pw_aff pa)
19121{
19122  auto res = isl_union_pw_aff_from_pw_aff(pa.release());
19123  ptr = res;
19124}
19125
19126union_pw_aff::union_pw_aff(isl::checked::ctx ctx, const std::string &str)
19127{
19128  auto res = isl_union_pw_aff_read_from_str(ctx.release(), str.c_str());
19129  ptr = res;
19130}
19131
19132union_pw_aff &union_pw_aff::operator=(union_pw_aff obj) {
19133  std::swap(this->ptr, obj.ptr);
19134  return *this;
19135}
19136
19137union_pw_aff::~union_pw_aff() {
19138  if (ptr)
19139    isl_union_pw_aff_free(ptr);
19140}
19141
19142__isl_give isl_union_pw_aff *union_pw_aff::copy() const & {
19143  return isl_union_pw_aff_copy(ptr);
19144}
19145
19146__isl_keep isl_union_pw_aff *union_pw_aff::get() const {
19147  return ptr;
19148}
19149
19150__isl_give isl_union_pw_aff *union_pw_aff::release() {
19151  isl_union_pw_aff *tmp = ptr;
19152  ptr = nullptr;
19153  return tmp;
19154}
19155
19156bool union_pw_aff::is_null() const {
19157  return ptr == nullptr;
19158}
19159
19160isl::checked::ctx union_pw_aff::ctx() const {
19161  return isl::checked::ctx(isl_union_pw_aff_get_ctx(ptr));
19162}
19163
19164isl::checked::multi_union_pw_aff union_pw_aff::add(const isl::checked::multi_union_pw_aff &multi2) const
19165{
19166  return isl::checked::multi_union_pw_aff(*this).add(multi2);
19167}
19168
19169isl::checked::union_pw_aff union_pw_aff::add(isl::checked::union_pw_aff upa2) const
19170{
19171  auto res = isl_union_pw_aff_add(copy(), upa2.release());
19172  return manage(res);
19173}
19174
19175isl::checked::union_pw_multi_aff union_pw_aff::add(const isl::checked::union_pw_multi_aff &upma2) const
19176{
19177  return isl::checked::union_pw_multi_aff(*this).add(upma2);
19178}
19179
19180isl::checked::union_pw_aff union_pw_aff::add(const isl::checked::aff &upa2) const
19181{
19182  return this->add(isl::checked::union_pw_aff(upa2));
19183}
19184
19185isl::checked::union_pw_aff union_pw_aff::add(const isl::checked::pw_aff &upa2) const
19186{
19187  return this->add(isl::checked::union_pw_aff(upa2));
19188}
19189
19190isl::checked::union_pw_multi_aff union_pw_aff::apply(const isl::checked::union_pw_multi_aff &upma2) const
19191{
19192  return isl::checked::union_pw_multi_aff(*this).apply(upma2);
19193}
19194
19195isl::checked::multi_union_pw_aff union_pw_aff::as_multi_union_pw_aff() const
19196{
19197  return isl::checked::union_pw_multi_aff(*this).as_multi_union_pw_aff();
19198}
19199
19200isl::checked::pw_multi_aff union_pw_aff::as_pw_multi_aff() const
19201{
19202  return isl::checked::union_pw_multi_aff(*this).as_pw_multi_aff();
19203}
19204
19205isl::checked::union_map union_pw_aff::as_union_map() const
19206{
19207  return isl::checked::union_pw_multi_aff(*this).as_union_map();
19208}
19209
19210isl::checked::union_pw_aff union_pw_aff::at(int pos) const
19211{
19212  return isl::checked::multi_union_pw_aff(*this).at(pos);
19213}
19214
19215isl::checked::union_set union_pw_aff::bind(const isl::checked::multi_id &tuple) const
19216{
19217  return isl::checked::multi_union_pw_aff(*this).bind(tuple);
19218}
19219
19220isl::checked::union_set union_pw_aff::bind(isl::checked::id id) const
19221{
19222  auto res = isl_union_pw_aff_bind_id(copy(), id.release());
19223  return manage(res);
19224}
19225
19226isl::checked::union_set union_pw_aff::bind(const std::string &id) const
19227{
19228  return this->bind(isl::checked::id(ctx(), id));
19229}
19230
19231isl::checked::union_pw_aff union_pw_aff::coalesce() const
19232{
19233  auto res = isl_union_pw_aff_coalesce(copy());
19234  return manage(res);
19235}
19236
19237isl::checked::union_set union_pw_aff::domain() const
19238{
19239  auto res = isl_union_pw_aff_domain(copy());
19240  return manage(res);
19241}
19242
19243isl::checked::union_pw_aff union_pw_aff::drop_unused_params() const
19244{
19245  auto res = isl_union_pw_aff_drop_unused_params(copy());
19246  return manage(res);
19247}
19248
19249isl::checked::pw_multi_aff union_pw_aff::extract_pw_multi_aff(const isl::checked::space &space) const
19250{
19251  return isl::checked::union_pw_multi_aff(*this).extract_pw_multi_aff(space);
19252}
19253
19254isl::checked::multi_union_pw_aff union_pw_aff::flat_range_product(const isl::checked::multi_union_pw_aff &multi2) const
19255{
19256  return isl::checked::multi_union_pw_aff(*this).flat_range_product(multi2);
19257}
19258
19259isl::checked::union_pw_multi_aff union_pw_aff::flat_range_product(const isl::checked::union_pw_multi_aff &upma2) const
19260{
19261  return isl::checked::union_pw_multi_aff(*this).flat_range_product(upma2);
19262}
19263
19264isl::checked::union_pw_aff union_pw_aff::gist(isl::checked::union_set context) const
19265{
19266  auto res = isl_union_pw_aff_gist(copy(), context.release());
19267  return manage(res);
19268}
19269
19270isl::checked::multi_union_pw_aff union_pw_aff::gist_params(const isl::checked::set &context) const
19271{
19272  return isl::checked::multi_union_pw_aff(*this).gist_params(context);
19273}
19274
19275boolean union_pw_aff::has_range_tuple_id() const
19276{
19277  return isl::checked::multi_union_pw_aff(*this).has_range_tuple_id();
19278}
19279
19280isl::checked::union_pw_aff union_pw_aff::intersect_domain(isl::checked::space space) const
19281{
19282  auto res = isl_union_pw_aff_intersect_domain_space(copy(), space.release());
19283  return manage(res);
19284}
19285
19286isl::checked::union_pw_aff union_pw_aff::intersect_domain(isl::checked::union_set uset) const
19287{
19288  auto res = isl_union_pw_aff_intersect_domain_union_set(copy(), uset.release());
19289  return manage(res);
19290}
19291
19292isl::checked::union_pw_aff union_pw_aff::intersect_domain_wrapped_domain(isl::checked::union_set uset) const
19293{
19294  auto res = isl_union_pw_aff_intersect_domain_wrapped_domain(copy(), uset.release());
19295  return manage(res);
19296}
19297
19298isl::checked::union_pw_aff union_pw_aff::intersect_domain_wrapped_range(isl::checked::union_set uset) const
19299{
19300  auto res = isl_union_pw_aff_intersect_domain_wrapped_range(copy(), uset.release());
19301  return manage(res);
19302}
19303
19304isl::checked::union_pw_aff union_pw_aff::intersect_params(isl::checked::set set) const
19305{
19306  auto res = isl_union_pw_aff_intersect_params(copy(), set.release());
19307  return manage(res);
19308}
19309
19310boolean union_pw_aff::involves_locals() const
19311{
19312  return isl::checked::union_pw_multi_aff(*this).involves_locals();
19313}
19314
19315boolean union_pw_aff::involves_nan() const
19316{
19317  return isl::checked::multi_union_pw_aff(*this).involves_nan();
19318}
19319
19320boolean union_pw_aff::isa_pw_multi_aff() const
19321{
19322  return isl::checked::union_pw_multi_aff(*this).isa_pw_multi_aff();
19323}
19324
19325isl::checked::union_pw_aff_list union_pw_aff::list() const
19326{
19327  return isl::checked::multi_union_pw_aff(*this).list();
19328}
19329
19330isl::checked::multi_union_pw_aff union_pw_aff::neg() const
19331{
19332  return isl::checked::multi_union_pw_aff(*this).neg();
19333}
19334
19335boolean union_pw_aff::plain_is_empty() const
19336{
19337  return isl::checked::union_pw_multi_aff(*this).plain_is_empty();
19338}
19339
19340boolean union_pw_aff::plain_is_equal(const isl::checked::multi_union_pw_aff &multi2) const
19341{
19342  return isl::checked::multi_union_pw_aff(*this).plain_is_equal(multi2);
19343}
19344
19345boolean union_pw_aff::plain_is_equal(const isl::checked::union_pw_aff &upa2) const
19346{
19347  auto res = isl_union_pw_aff_plain_is_equal(get(), upa2.get());
19348  return manage(res);
19349}
19350
19351boolean union_pw_aff::plain_is_equal(const isl::checked::union_pw_multi_aff &upma2) const
19352{
19353  return isl::checked::union_pw_multi_aff(*this).plain_is_equal(upma2);
19354}
19355
19356boolean union_pw_aff::plain_is_equal(const isl::checked::aff &upa2) const
19357{
19358  return this->plain_is_equal(isl::checked::union_pw_aff(upa2));
19359}
19360
19361boolean union_pw_aff::plain_is_equal(const isl::checked::pw_aff &upa2) const
19362{
19363  return this->plain_is_equal(isl::checked::union_pw_aff(upa2));
19364}
19365
19366isl::checked::union_pw_multi_aff union_pw_aff::preimage_domain_wrapped_domain(const isl::checked::union_pw_multi_aff &upma2) const
19367{
19368  return isl::checked::union_pw_multi_aff(*this).preimage_domain_wrapped_domain(upma2);
19369}
19370
19371isl::checked::union_pw_aff union_pw_aff::pullback(isl::checked::union_pw_multi_aff upma) const
19372{
19373  auto res = isl_union_pw_aff_pullback_union_pw_multi_aff(copy(), upma.release());
19374  return manage(res);
19375}
19376
19377isl::checked::pw_multi_aff_list union_pw_aff::pw_multi_aff_list() const
19378{
19379  return isl::checked::union_pw_multi_aff(*this).pw_multi_aff_list();
19380}
19381
19382isl::checked::union_pw_multi_aff union_pw_aff::range_factor_domain() const
19383{
19384  return isl::checked::union_pw_multi_aff(*this).range_factor_domain();
19385}
19386
19387isl::checked::union_pw_multi_aff union_pw_aff::range_factor_range() const
19388{
19389  return isl::checked::union_pw_multi_aff(*this).range_factor_range();
19390}
19391
19392isl::checked::multi_union_pw_aff union_pw_aff::range_product(const isl::checked::multi_union_pw_aff &multi2) const
19393{
19394  return isl::checked::multi_union_pw_aff(*this).range_product(multi2);
19395}
19396
19397isl::checked::union_pw_multi_aff union_pw_aff::range_product(const isl::checked::union_pw_multi_aff &upma2) const
19398{
19399  return isl::checked::union_pw_multi_aff(*this).range_product(upma2);
19400}
19401
19402isl::checked::id union_pw_aff::range_tuple_id() const
19403{
19404  return isl::checked::multi_union_pw_aff(*this).range_tuple_id();
19405}
19406
19407isl::checked::multi_union_pw_aff union_pw_aff::reset_range_tuple_id() const
19408{
19409  return isl::checked::multi_union_pw_aff(*this).reset_range_tuple_id();
19410}
19411
19412isl::checked::multi_union_pw_aff union_pw_aff::scale(const isl::checked::multi_val &mv) const
19413{
19414  return isl::checked::multi_union_pw_aff(*this).scale(mv);
19415}
19416
19417isl::checked::multi_union_pw_aff union_pw_aff::scale(const isl::checked::val &v) const
19418{
19419  return isl::checked::multi_union_pw_aff(*this).scale(v);
19420}
19421
19422isl::checked::multi_union_pw_aff union_pw_aff::scale(long v) const
19423{
19424  return this->scale(isl::checked::val(ctx(), v));
19425}
19426
19427isl::checked::multi_union_pw_aff union_pw_aff::scale_down(const isl::checked::multi_val &mv) const
19428{
19429  return isl::checked::multi_union_pw_aff(*this).scale_down(mv);
19430}
19431
19432isl::checked::multi_union_pw_aff union_pw_aff::scale_down(const isl::checked::val &v) const
19433{
19434  return isl::checked::multi_union_pw_aff(*this).scale_down(v);
19435}
19436
19437isl::checked::multi_union_pw_aff union_pw_aff::scale_down(long v) const
19438{
19439  return this->scale_down(isl::checked::val(ctx(), v));
19440}
19441
19442isl::checked::multi_union_pw_aff union_pw_aff::set_at(int pos, const isl::checked::union_pw_aff &el) const
19443{
19444  return isl::checked::multi_union_pw_aff(*this).set_at(pos, el);
19445}
19446
19447isl::checked::multi_union_pw_aff union_pw_aff::set_range_tuple(const isl::checked::id &id) const
19448{
19449  return isl::checked::multi_union_pw_aff(*this).set_range_tuple(id);
19450}
19451
19452isl::checked::multi_union_pw_aff union_pw_aff::set_range_tuple(const std::string &id) const
19453{
19454  return this->set_range_tuple(isl::checked::id(ctx(), id));
19455}
19456
19457class size union_pw_aff::size() const
19458{
19459  return isl::checked::multi_union_pw_aff(*this).size();
19460}
19461
19462isl::checked::space union_pw_aff::space() const
19463{
19464  auto res = isl_union_pw_aff_get_space(get());
19465  return manage(res);
19466}
19467
19468isl::checked::space union_pw_aff::get_space() const
19469{
19470  return space();
19471}
19472
19473isl::checked::multi_union_pw_aff union_pw_aff::sub(const isl::checked::multi_union_pw_aff &multi2) const
19474{
19475  return isl::checked::multi_union_pw_aff(*this).sub(multi2);
19476}
19477
19478isl::checked::union_pw_aff union_pw_aff::sub(isl::checked::union_pw_aff upa2) const
19479{
19480  auto res = isl_union_pw_aff_sub(copy(), upa2.release());
19481  return manage(res);
19482}
19483
19484isl::checked::union_pw_multi_aff union_pw_aff::sub(const isl::checked::union_pw_multi_aff &upma2) const
19485{
19486  return isl::checked::union_pw_multi_aff(*this).sub(upma2);
19487}
19488
19489isl::checked::union_pw_aff union_pw_aff::sub(const isl::checked::aff &upa2) const
19490{
19491  return this->sub(isl::checked::union_pw_aff(upa2));
19492}
19493
19494isl::checked::union_pw_aff union_pw_aff::sub(const isl::checked::pw_aff &upa2) const
19495{
19496  return this->sub(isl::checked::union_pw_aff(upa2));
19497}
19498
19499isl::checked::union_pw_aff union_pw_aff::subtract_domain(isl::checked::space space) const
19500{
19501  auto res = isl_union_pw_aff_subtract_domain_space(copy(), space.release());
19502  return manage(res);
19503}
19504
19505isl::checked::union_pw_aff union_pw_aff::subtract_domain(isl::checked::union_set uset) const
19506{
19507  auto res = isl_union_pw_aff_subtract_domain_union_set(copy(), uset.release());
19508  return manage(res);
19509}
19510
19511isl::checked::union_pw_aff_list union_pw_aff::to_list() const
19512{
19513  auto res = isl_union_pw_aff_to_list(copy());
19514  return manage(res);
19515}
19516
19517isl::checked::multi_union_pw_aff union_pw_aff::union_add(const isl::checked::multi_union_pw_aff &mupa2) const
19518{
19519  return isl::checked::multi_union_pw_aff(*this).union_add(mupa2);
19520}
19521
19522isl::checked::union_pw_aff union_pw_aff::union_add(isl::checked::union_pw_aff upa2) const
19523{
19524  auto res = isl_union_pw_aff_union_add(copy(), upa2.release());
19525  return manage(res);
19526}
19527
19528isl::checked::union_pw_multi_aff union_pw_aff::union_add(const isl::checked::union_pw_multi_aff &upma2) const
19529{
19530  return isl::checked::union_pw_multi_aff(*this).union_add(upma2);
19531}
19532
19533isl::checked::union_pw_aff union_pw_aff::union_add(const isl::checked::aff &upa2) const
19534{
19535  return this->union_add(isl::checked::union_pw_aff(upa2));
19536}
19537
19538isl::checked::union_pw_aff union_pw_aff::union_add(const isl::checked::pw_aff &upa2) const
19539{
19540  return this->union_add(isl::checked::union_pw_aff(upa2));
19541}
19542
19543inline std::ostream &operator<<(std::ostream &os, const union_pw_aff &obj)
19544{
19545  char *str = isl_union_pw_aff_to_str(obj.get());
19546  if (!str) {
19547    os.setstate(std::ios_base::badbit);
19548    return os;
19549  }
19550  os << str;
19551  free(str);
19552  return os;
19553}
19554
19555// implementations for isl::union_pw_aff_list
19556union_pw_aff_list manage(__isl_take isl_union_pw_aff_list *ptr) {
19557  return union_pw_aff_list(ptr);
19558}
19559union_pw_aff_list manage_copy(__isl_keep isl_union_pw_aff_list *ptr) {
19560  ptr = isl_union_pw_aff_list_copy(ptr);
19561  return union_pw_aff_list(ptr);
19562}
19563
19564union_pw_aff_list::union_pw_aff_list(__isl_take isl_union_pw_aff_list *ptr)
19565    : ptr(ptr) {}
19566
19567union_pw_aff_list::union_pw_aff_list()
19568    : ptr(nullptr) {}
19569
19570union_pw_aff_list::union_pw_aff_list(const union_pw_aff_list &obj)
19571    : ptr(nullptr)
19572{
19573  ptr = obj.copy();
19574}
19575
19576union_pw_aff_list::union_pw_aff_list(isl::checked::ctx ctx, int n)
19577{
19578  auto res = isl_union_pw_aff_list_alloc(ctx.release(), n);
19579  ptr = res;
19580}
19581
19582union_pw_aff_list::union_pw_aff_list(isl::checked::union_pw_aff el)
19583{
19584  auto res = isl_union_pw_aff_list_from_union_pw_aff(el.release());
19585  ptr = res;
19586}
19587
19588union_pw_aff_list::union_pw_aff_list(isl::checked::ctx ctx, const std::string &str)
19589{
19590  auto res = isl_union_pw_aff_list_read_from_str(ctx.release(), str.c_str());
19591  ptr = res;
19592}
19593
19594union_pw_aff_list &union_pw_aff_list::operator=(union_pw_aff_list obj) {
19595  std::swap(this->ptr, obj.ptr);
19596  return *this;
19597}
19598
19599union_pw_aff_list::~union_pw_aff_list() {
19600  if (ptr)
19601    isl_union_pw_aff_list_free(ptr);
19602}
19603
19604__isl_give isl_union_pw_aff_list *union_pw_aff_list::copy() const & {
19605  return isl_union_pw_aff_list_copy(ptr);
19606}
19607
19608__isl_keep isl_union_pw_aff_list *union_pw_aff_list::get() const {
19609  return ptr;
19610}
19611
19612__isl_give isl_union_pw_aff_list *union_pw_aff_list::release() {
19613  isl_union_pw_aff_list *tmp = ptr;
19614  ptr = nullptr;
19615  return tmp;
19616}
19617
19618bool union_pw_aff_list::is_null() const {
19619  return ptr == nullptr;
19620}
19621
19622isl::checked::ctx union_pw_aff_list::ctx() const {
19623  return isl::checked::ctx(isl_union_pw_aff_list_get_ctx(ptr));
19624}
19625
19626isl::checked::union_pw_aff_list union_pw_aff_list::add(isl::checked::union_pw_aff el) const
19627{
19628  auto res = isl_union_pw_aff_list_add(copy(), el.release());
19629  return manage(res);
19630}
19631
19632isl::checked::union_pw_aff union_pw_aff_list::at(int index) const
19633{
19634  auto res = isl_union_pw_aff_list_get_at(get(), index);
19635  return manage(res);
19636}
19637
19638isl::checked::union_pw_aff union_pw_aff_list::get_at(int index) const
19639{
19640  return at(index);
19641}
19642
19643isl::checked::union_pw_aff_list union_pw_aff_list::clear() const
19644{
19645  auto res = isl_union_pw_aff_list_clear(copy());
19646  return manage(res);
19647}
19648
19649isl::checked::union_pw_aff_list union_pw_aff_list::concat(isl::checked::union_pw_aff_list list2) const
19650{
19651  auto res = isl_union_pw_aff_list_concat(copy(), list2.release());
19652  return manage(res);
19653}
19654
19655isl::checked::union_pw_aff_list union_pw_aff_list::drop(unsigned int first, unsigned int n) const
19656{
19657  auto res = isl_union_pw_aff_list_drop(copy(), first, n);
19658  return manage(res);
19659}
19660
19661stat union_pw_aff_list::foreach(const std::function<stat(isl::checked::union_pw_aff)> &fn) const
19662{
19663  struct fn_data {
19664    std::function<stat(isl::checked::union_pw_aff)> func;
19665  } fn_data = { fn };
19666  auto fn_lambda = [](isl_union_pw_aff *arg_0, void *arg_1) -> isl_stat {
19667    auto *data = static_cast<struct fn_data *>(arg_1);
19668    auto ret = (data->func)(manage(arg_0));
19669    return ret.release();
19670  };
19671  auto res = isl_union_pw_aff_list_foreach(get(), fn_lambda, &fn_data);
19672  return manage(res);
19673}
19674
19675stat union_pw_aff_list::foreach_scc(const std::function<boolean(isl::checked::union_pw_aff, isl::checked::union_pw_aff)> &follows, const std::function<stat(isl::checked::union_pw_aff_list)> &fn) const
19676{
19677  struct follows_data {
19678    std::function<boolean(isl::checked::union_pw_aff, isl::checked::union_pw_aff)> func;
19679  } follows_data = { follows };
19680  auto follows_lambda = [](isl_union_pw_aff *arg_0, isl_union_pw_aff *arg_1, void *arg_2) -> isl_bool {
19681    auto *data = static_cast<struct follows_data *>(arg_2);
19682    auto ret = (data->func)(manage_copy(arg_0), manage_copy(arg_1));
19683    return ret.release();
19684  };
19685  struct fn_data {
19686    std::function<stat(isl::checked::union_pw_aff_list)> func;
19687  } fn_data = { fn };
19688  auto fn_lambda = [](isl_union_pw_aff_list *arg_0, void *arg_1) -> isl_stat {
19689    auto *data = static_cast<struct fn_data *>(arg_1);
19690    auto ret = (data->func)(manage(arg_0));
19691    return ret.release();
19692  };
19693  auto res = isl_union_pw_aff_list_foreach_scc(get(), follows_lambda, &follows_data, fn_lambda, &fn_data);
19694  return manage(res);
19695}
19696
19697isl::checked::union_pw_aff_list union_pw_aff_list::insert(unsigned int pos, isl::checked::union_pw_aff el) const
19698{
19699  auto res = isl_union_pw_aff_list_insert(copy(), pos, el.release());
19700  return manage(res);
19701}
19702
19703isl::checked::union_pw_aff_list union_pw_aff_list::set_at(int index, isl::checked::union_pw_aff el) const
19704{
19705  auto res = isl_union_pw_aff_list_set_at(copy(), index, el.release());
19706  return manage(res);
19707}
19708
19709class size union_pw_aff_list::size() const
19710{
19711  auto res = isl_union_pw_aff_list_size(get());
19712  return manage(res);
19713}
19714
19715inline std::ostream &operator<<(std::ostream &os, const union_pw_aff_list &obj)
19716{
19717  char *str = isl_union_pw_aff_list_to_str(obj.get());
19718  if (!str) {
19719    os.setstate(std::ios_base::badbit);
19720    return os;
19721  }
19722  os << str;
19723  free(str);
19724  return os;
19725}
19726
19727// implementations for isl::union_pw_multi_aff
19728union_pw_multi_aff manage(__isl_take isl_union_pw_multi_aff *ptr) {
19729  return union_pw_multi_aff(ptr);
19730}
19731union_pw_multi_aff manage_copy(__isl_keep isl_union_pw_multi_aff *ptr) {
19732  ptr = isl_union_pw_multi_aff_copy(ptr);
19733  return union_pw_multi_aff(ptr);
19734}
19735
19736union_pw_multi_aff::union_pw_multi_aff(__isl_take isl_union_pw_multi_aff *ptr)
19737    : ptr(ptr) {}
19738
19739union_pw_multi_aff::union_pw_multi_aff()
19740    : ptr(nullptr) {}
19741
19742union_pw_multi_aff::union_pw_multi_aff(const union_pw_multi_aff &obj)
19743    : ptr(nullptr)
19744{
19745  ptr = obj.copy();
19746}
19747
19748union_pw_multi_aff::union_pw_multi_aff(isl::checked::multi_aff ma)
19749{
19750  auto res = isl_union_pw_multi_aff_from_multi_aff(ma.release());
19751  ptr = res;
19752}
19753
19754union_pw_multi_aff::union_pw_multi_aff(isl::checked::pw_multi_aff pma)
19755{
19756  auto res = isl_union_pw_multi_aff_from_pw_multi_aff(pma.release());
19757  ptr = res;
19758}
19759
19760union_pw_multi_aff::union_pw_multi_aff(isl::checked::union_pw_aff upa)
19761{
19762  auto res = isl_union_pw_multi_aff_from_union_pw_aff(upa.release());
19763  ptr = res;
19764}
19765
19766union_pw_multi_aff::union_pw_multi_aff(isl::checked::ctx ctx, const std::string &str)
19767{
19768  auto res = isl_union_pw_multi_aff_read_from_str(ctx.release(), str.c_str());
19769  ptr = res;
19770}
19771
19772union_pw_multi_aff &union_pw_multi_aff::operator=(union_pw_multi_aff obj) {
19773  std::swap(this->ptr, obj.ptr);
19774  return *this;
19775}
19776
19777union_pw_multi_aff::~union_pw_multi_aff() {
19778  if (ptr)
19779    isl_union_pw_multi_aff_free(ptr);
19780}
19781
19782__isl_give isl_union_pw_multi_aff *union_pw_multi_aff::copy() const & {
19783  return isl_union_pw_multi_aff_copy(ptr);
19784}
19785
19786__isl_keep isl_union_pw_multi_aff *union_pw_multi_aff::get() const {
19787  return ptr;
19788}
19789
19790__isl_give isl_union_pw_multi_aff *union_pw_multi_aff::release() {
19791  isl_union_pw_multi_aff *tmp = ptr;
19792  ptr = nullptr;
19793  return tmp;
19794}
19795
19796bool union_pw_multi_aff::is_null() const {
19797  return ptr == nullptr;
19798}
19799
19800isl::checked::ctx union_pw_multi_aff::ctx() const {
19801  return isl::checked::ctx(isl_union_pw_multi_aff_get_ctx(ptr));
19802}
19803
19804isl::checked::union_pw_multi_aff union_pw_multi_aff::add(isl::checked::union_pw_multi_aff upma2) const
19805{
19806  auto res = isl_union_pw_multi_aff_add(copy(), upma2.release());
19807  return manage(res);
19808}
19809
19810isl::checked::union_pw_multi_aff union_pw_multi_aff::apply(isl::checked::union_pw_multi_aff upma2) const
19811{
19812  auto res = isl_union_pw_multi_aff_apply_union_pw_multi_aff(copy(), upma2.release());
19813  return manage(res);
19814}
19815
19816isl::checked::multi_union_pw_aff union_pw_multi_aff::as_multi_union_pw_aff() const
19817{
19818  auto res = isl_union_pw_multi_aff_as_multi_union_pw_aff(copy());
19819  return manage(res);
19820}
19821
19822isl::checked::pw_multi_aff union_pw_multi_aff::as_pw_multi_aff() const
19823{
19824  auto res = isl_union_pw_multi_aff_as_pw_multi_aff(copy());
19825  return manage(res);
19826}
19827
19828isl::checked::union_map union_pw_multi_aff::as_union_map() const
19829{
19830  auto res = isl_union_pw_multi_aff_as_union_map(copy());
19831  return manage(res);
19832}
19833
19834isl::checked::union_pw_multi_aff union_pw_multi_aff::coalesce() const
19835{
19836  auto res = isl_union_pw_multi_aff_coalesce(copy());
19837  return manage(res);
19838}
19839
19840isl::checked::union_set union_pw_multi_aff::domain() const
19841{
19842  auto res = isl_union_pw_multi_aff_domain(copy());
19843  return manage(res);
19844}
19845
19846isl::checked::union_pw_multi_aff union_pw_multi_aff::drop_unused_params() const
19847{
19848  auto res = isl_union_pw_multi_aff_drop_unused_params(copy());
19849  return manage(res);
19850}
19851
19852isl::checked::union_pw_multi_aff union_pw_multi_aff::empty(isl::checked::ctx ctx)
19853{
19854  auto res = isl_union_pw_multi_aff_empty_ctx(ctx.release());
19855  return manage(res);
19856}
19857
19858isl::checked::pw_multi_aff union_pw_multi_aff::extract_pw_multi_aff(isl::checked::space space) const
19859{
19860  auto res = isl_union_pw_multi_aff_extract_pw_multi_aff(get(), space.release());
19861  return manage(res);
19862}
19863
19864isl::checked::union_pw_multi_aff union_pw_multi_aff::flat_range_product(isl::checked::union_pw_multi_aff upma2) const
19865{
19866  auto res = isl_union_pw_multi_aff_flat_range_product(copy(), upma2.release());
19867  return manage(res);
19868}
19869
19870isl::checked::union_pw_multi_aff union_pw_multi_aff::gist(isl::checked::union_set context) const
19871{
19872  auto res = isl_union_pw_multi_aff_gist(copy(), context.release());
19873  return manage(res);
19874}
19875
19876isl::checked::union_pw_multi_aff union_pw_multi_aff::intersect_domain(isl::checked::space space) const
19877{
19878  auto res = isl_union_pw_multi_aff_intersect_domain_space(copy(), space.release());
19879  return manage(res);
19880}
19881
19882isl::checked::union_pw_multi_aff union_pw_multi_aff::intersect_domain(isl::checked::union_set uset) const
19883{
19884  auto res = isl_union_pw_multi_aff_intersect_domain_union_set(copy(), uset.release());
19885  return manage(res);
19886}
19887
19888isl::checked::union_pw_multi_aff union_pw_multi_aff::intersect_domain_wrapped_domain(isl::checked::union_set uset) const
19889{
19890  auto res = isl_union_pw_multi_aff_intersect_domain_wrapped_domain(copy(), uset.release());
19891  return manage(res);
19892}
19893
19894isl::checked::union_pw_multi_aff union_pw_multi_aff::intersect_domain_wrapped_range(isl::checked::union_set uset) const
19895{
19896  auto res = isl_union_pw_multi_aff_intersect_domain_wrapped_range(copy(), uset.release());
19897  return manage(res);
19898}
19899
19900isl::checked::union_pw_multi_aff union_pw_multi_aff::intersect_params(isl::checked::set set) const
19901{
19902  auto res = isl_union_pw_multi_aff_intersect_params(copy(), set.release());
19903  return manage(res);
19904}
19905
19906boolean union_pw_multi_aff::involves_locals() const
19907{
19908  auto res = isl_union_pw_multi_aff_involves_locals(get());
19909  return manage(res);
19910}
19911
19912boolean union_pw_multi_aff::isa_pw_multi_aff() const
19913{
19914  auto res = isl_union_pw_multi_aff_isa_pw_multi_aff(get());
19915  return manage(res);
19916}
19917
19918boolean union_pw_multi_aff::plain_is_empty() const
19919{
19920  auto res = isl_union_pw_multi_aff_plain_is_empty(get());
19921  return manage(res);
19922}
19923
19924boolean union_pw_multi_aff::plain_is_equal(const isl::checked::union_pw_multi_aff &upma2) const
19925{
19926  auto res = isl_union_pw_multi_aff_plain_is_equal(get(), upma2.get());
19927  return manage(res);
19928}
19929
19930isl::checked::union_pw_multi_aff union_pw_multi_aff::preimage_domain_wrapped_domain(isl::checked::union_pw_multi_aff upma2) const
19931{
19932  auto res = isl_union_pw_multi_aff_preimage_domain_wrapped_domain_union_pw_multi_aff(copy(), upma2.release());
19933  return manage(res);
19934}
19935
19936isl::checked::union_pw_multi_aff union_pw_multi_aff::pullback(isl::checked::union_pw_multi_aff upma2) const
19937{
19938  auto res = isl_union_pw_multi_aff_pullback_union_pw_multi_aff(copy(), upma2.release());
19939  return manage(res);
19940}
19941
19942isl::checked::pw_multi_aff_list union_pw_multi_aff::pw_multi_aff_list() const
19943{
19944  auto res = isl_union_pw_multi_aff_get_pw_multi_aff_list(get());
19945  return manage(res);
19946}
19947
19948isl::checked::pw_multi_aff_list union_pw_multi_aff::get_pw_multi_aff_list() const
19949{
19950  return pw_multi_aff_list();
19951}
19952
19953isl::checked::union_pw_multi_aff union_pw_multi_aff::range_factor_domain() const
19954{
19955  auto res = isl_union_pw_multi_aff_range_factor_domain(copy());
19956  return manage(res);
19957}
19958
19959isl::checked::union_pw_multi_aff union_pw_multi_aff::range_factor_range() const
19960{
19961  auto res = isl_union_pw_multi_aff_range_factor_range(copy());
19962  return manage(res);
19963}
19964
19965isl::checked::union_pw_multi_aff union_pw_multi_aff::range_product(isl::checked::union_pw_multi_aff upma2) const
19966{
19967  auto res = isl_union_pw_multi_aff_range_product(copy(), upma2.release());
19968  return manage(res);
19969}
19970
19971isl::checked::space union_pw_multi_aff::space() const
19972{
19973  auto res = isl_union_pw_multi_aff_get_space(get());
19974  return manage(res);
19975}
19976
19977isl::checked::space union_pw_multi_aff::get_space() const
19978{
19979  return space();
19980}
19981
19982isl::checked::union_pw_multi_aff union_pw_multi_aff::sub(isl::checked::union_pw_multi_aff upma2) const
19983{
19984  auto res = isl_union_pw_multi_aff_sub(copy(), upma2.release());
19985  return manage(res);
19986}
19987
19988isl::checked::union_pw_multi_aff union_pw_multi_aff::subtract_domain(isl::checked::space space) const
19989{
19990  auto res = isl_union_pw_multi_aff_subtract_domain_space(copy(), space.release());
19991  return manage(res);
19992}
19993
19994isl::checked::union_pw_multi_aff union_pw_multi_aff::subtract_domain(isl::checked::union_set uset) const
19995{
19996  auto res = isl_union_pw_multi_aff_subtract_domain_union_set(copy(), uset.release());
19997  return manage(res);
19998}
19999
20000isl::checked::union_pw_multi_aff union_pw_multi_aff::union_add(isl::checked::union_pw_multi_aff upma2) const
20001{
20002  auto res = isl_union_pw_multi_aff_union_add(copy(), upma2.release());
20003  return manage(res);
20004}
20005
20006inline std::ostream &operator<<(std::ostream &os, const union_pw_multi_aff &obj)
20007{
20008  char *str = isl_union_pw_multi_aff_to_str(obj.get());
20009  if (!str) {
20010    os.setstate(std::ios_base::badbit);
20011    return os;
20012  }
20013  os << str;
20014  free(str);
20015  return os;
20016}
20017
20018// implementations for isl::union_set
20019union_set manage(__isl_take isl_union_set *ptr) {
20020  return union_set(ptr);
20021}
20022union_set manage_copy(__isl_keep isl_union_set *ptr) {
20023  ptr = isl_union_set_copy(ptr);
20024  return union_set(ptr);
20025}
20026
20027union_set::union_set(__isl_take isl_union_set *ptr)
20028    : ptr(ptr) {}
20029
20030union_set::union_set()
20031    : ptr(nullptr) {}
20032
20033union_set::union_set(const union_set &obj)
20034    : ptr(nullptr)
20035{
20036  ptr = obj.copy();
20037}
20038
20039union_set::union_set(isl::checked::basic_set bset)
20040{
20041  auto res = isl_union_set_from_basic_set(bset.release());
20042  ptr = res;
20043}
20044
20045union_set::union_set(isl::checked::point pnt)
20046{
20047  auto res = isl_union_set_from_point(pnt.release());
20048  ptr = res;
20049}
20050
20051union_set::union_set(isl::checked::set set)
20052{
20053  auto res = isl_union_set_from_set(set.release());
20054  ptr = res;
20055}
20056
20057union_set::union_set(isl::checked::ctx ctx, const std::string &str)
20058{
20059  auto res = isl_union_set_read_from_str(ctx.release(), str.c_str());
20060  ptr = res;
20061}
20062
20063union_set &union_set::operator=(union_set obj) {
20064  std::swap(this->ptr, obj.ptr);
20065  return *this;
20066}
20067
20068union_set::~union_set() {
20069  if (ptr)
20070    isl_union_set_free(ptr);
20071}
20072
20073__isl_give isl_union_set *union_set::copy() const & {
20074  return isl_union_set_copy(ptr);
20075}
20076
20077__isl_keep isl_union_set *union_set::get() const {
20078  return ptr;
20079}
20080
20081__isl_give isl_union_set *union_set::release() {
20082  isl_union_set *tmp = ptr;
20083  ptr = nullptr;
20084  return tmp;
20085}
20086
20087bool union_set::is_null() const {
20088  return ptr == nullptr;
20089}
20090
20091isl::checked::ctx union_set::ctx() const {
20092  return isl::checked::ctx(isl_union_set_get_ctx(ptr));
20093}
20094
20095isl::checked::union_set union_set::affine_hull() const
20096{
20097  auto res = isl_union_set_affine_hull(copy());
20098  return manage(res);
20099}
20100
20101isl::checked::union_set union_set::apply(isl::checked::union_map umap) const
20102{
20103  auto res = isl_union_set_apply(copy(), umap.release());
20104  return manage(res);
20105}
20106
20107isl::checked::set union_set::as_set() const
20108{
20109  auto res = isl_union_set_as_set(copy());
20110  return manage(res);
20111}
20112
20113isl::checked::union_set union_set::coalesce() const
20114{
20115  auto res = isl_union_set_coalesce(copy());
20116  return manage(res);
20117}
20118
20119isl::checked::union_set union_set::compute_divs() const
20120{
20121  auto res = isl_union_set_compute_divs(copy());
20122  return manage(res);
20123}
20124
20125isl::checked::union_set union_set::detect_equalities() const
20126{
20127  auto res = isl_union_set_detect_equalities(copy());
20128  return manage(res);
20129}
20130
20131isl::checked::union_set union_set::drop_unused_params() const
20132{
20133  auto res = isl_union_set_drop_unused_params(copy());
20134  return manage(res);
20135}
20136
20137isl::checked::union_set union_set::empty(isl::checked::ctx ctx)
20138{
20139  auto res = isl_union_set_empty_ctx(ctx.release());
20140  return manage(res);
20141}
20142
20143boolean union_set::every_set(const std::function<boolean(isl::checked::set)> &test) const
20144{
20145  struct test_data {
20146    std::function<boolean(isl::checked::set)> func;
20147  } test_data = { test };
20148  auto test_lambda = [](isl_set *arg_0, void *arg_1) -> isl_bool {
20149    auto *data = static_cast<struct test_data *>(arg_1);
20150    auto ret = (data->func)(manage_copy(arg_0));
20151    return ret.release();
20152  };
20153  auto res = isl_union_set_every_set(get(), test_lambda, &test_data);
20154  return manage(res);
20155}
20156
20157isl::checked::set union_set::extract_set(isl::checked::space space) const
20158{
20159  auto res = isl_union_set_extract_set(get(), space.release());
20160  return manage(res);
20161}
20162
20163stat union_set::foreach_point(const std::function<stat(isl::checked::point)> &fn) const
20164{
20165  struct fn_data {
20166    std::function<stat(isl::checked::point)> func;
20167  } fn_data = { fn };
20168  auto fn_lambda = [](isl_point *arg_0, void *arg_1) -> isl_stat {
20169    auto *data = static_cast<struct fn_data *>(arg_1);
20170    auto ret = (data->func)(manage(arg_0));
20171    return ret.release();
20172  };
20173  auto res = isl_union_set_foreach_point(get(), fn_lambda, &fn_data);
20174  return manage(res);
20175}
20176
20177stat union_set::foreach_set(const std::function<stat(isl::checked::set)> &fn) const
20178{
20179  struct fn_data {
20180    std::function<stat(isl::checked::set)> func;
20181  } fn_data = { fn };
20182  auto fn_lambda = [](isl_set *arg_0, void *arg_1) -> isl_stat {
20183    auto *data = static_cast<struct fn_data *>(arg_1);
20184    auto ret = (data->func)(manage(arg_0));
20185    return ret.release();
20186  };
20187  auto res = isl_union_set_foreach_set(get(), fn_lambda, &fn_data);
20188  return manage(res);
20189}
20190
20191isl::checked::union_set union_set::gist(isl::checked::union_set context) const
20192{
20193  auto res = isl_union_set_gist(copy(), context.release());
20194  return manage(res);
20195}
20196
20197isl::checked::union_set union_set::gist_params(isl::checked::set set) const
20198{
20199  auto res = isl_union_set_gist_params(copy(), set.release());
20200  return manage(res);
20201}
20202
20203isl::checked::union_map union_set::identity() const
20204{
20205  auto res = isl_union_set_identity(copy());
20206  return manage(res);
20207}
20208
20209isl::checked::union_set union_set::intersect(isl::checked::union_set uset2) const
20210{
20211  auto res = isl_union_set_intersect(copy(), uset2.release());
20212  return manage(res);
20213}
20214
20215isl::checked::union_set union_set::intersect_params(isl::checked::set set) const
20216{
20217  auto res = isl_union_set_intersect_params(copy(), set.release());
20218  return manage(res);
20219}
20220
20221boolean union_set::is_disjoint(const isl::checked::union_set &uset2) const
20222{
20223  auto res = isl_union_set_is_disjoint(get(), uset2.get());
20224  return manage(res);
20225}
20226
20227boolean union_set::is_empty() const
20228{
20229  auto res = isl_union_set_is_empty(get());
20230  return manage(res);
20231}
20232
20233boolean union_set::is_equal(const isl::checked::union_set &uset2) const
20234{
20235  auto res = isl_union_set_is_equal(get(), uset2.get());
20236  return manage(res);
20237}
20238
20239boolean union_set::is_strict_subset(const isl::checked::union_set &uset2) const
20240{
20241  auto res = isl_union_set_is_strict_subset(get(), uset2.get());
20242  return manage(res);
20243}
20244
20245boolean union_set::is_subset(const isl::checked::union_set &uset2) const
20246{
20247  auto res = isl_union_set_is_subset(get(), uset2.get());
20248  return manage(res);
20249}
20250
20251boolean union_set::isa_set() const
20252{
20253  auto res = isl_union_set_isa_set(get());
20254  return manage(res);
20255}
20256
20257isl::checked::union_set union_set::lexmax() const
20258{
20259  auto res = isl_union_set_lexmax(copy());
20260  return manage(res);
20261}
20262
20263isl::checked::union_set union_set::lexmin() const
20264{
20265  auto res = isl_union_set_lexmin(copy());
20266  return manage(res);
20267}
20268
20269isl::checked::set union_set::params() const
20270{
20271  auto res = isl_union_set_params(copy());
20272  return manage(res);
20273}
20274
20275isl::checked::union_set union_set::polyhedral_hull() const
20276{
20277  auto res = isl_union_set_polyhedral_hull(copy());
20278  return manage(res);
20279}
20280
20281isl::checked::union_set union_set::preimage(isl::checked::multi_aff ma) const
20282{
20283  auto res = isl_union_set_preimage_multi_aff(copy(), ma.release());
20284  return manage(res);
20285}
20286
20287isl::checked::union_set union_set::preimage(isl::checked::pw_multi_aff pma) const
20288{
20289  auto res = isl_union_set_preimage_pw_multi_aff(copy(), pma.release());
20290  return manage(res);
20291}
20292
20293isl::checked::union_set union_set::preimage(isl::checked::union_pw_multi_aff upma) const
20294{
20295  auto res = isl_union_set_preimage_union_pw_multi_aff(copy(), upma.release());
20296  return manage(res);
20297}
20298
20299isl::checked::union_set union_set::project_out_all_params() const
20300{
20301  auto res = isl_union_set_project_out_all_params(copy());
20302  return manage(res);
20303}
20304
20305isl::checked::point union_set::sample_point() const
20306{
20307  auto res = isl_union_set_sample_point(copy());
20308  return manage(res);
20309}
20310
20311isl::checked::set_list union_set::set_list() const
20312{
20313  auto res = isl_union_set_get_set_list(get());
20314  return manage(res);
20315}
20316
20317isl::checked::set_list union_set::get_set_list() const
20318{
20319  return set_list();
20320}
20321
20322isl::checked::space union_set::space() const
20323{
20324  auto res = isl_union_set_get_space(get());
20325  return manage(res);
20326}
20327
20328isl::checked::space union_set::get_space() const
20329{
20330  return space();
20331}
20332
20333isl::checked::union_set union_set::subtract(isl::checked::union_set uset2) const
20334{
20335  auto res = isl_union_set_subtract(copy(), uset2.release());
20336  return manage(res);
20337}
20338
20339isl::checked::union_set_list union_set::to_list() const
20340{
20341  auto res = isl_union_set_to_list(copy());
20342  return manage(res);
20343}
20344
20345isl::checked::union_set union_set::unite(isl::checked::union_set uset2) const
20346{
20347  auto res = isl_union_set_union(copy(), uset2.release());
20348  return manage(res);
20349}
20350
20351isl::checked::union_set union_set::universe() const
20352{
20353  auto res = isl_union_set_universe(copy());
20354  return manage(res);
20355}
20356
20357isl::checked::union_map union_set::unwrap() const
20358{
20359  auto res = isl_union_set_unwrap(copy());
20360  return manage(res);
20361}
20362
20363inline std::ostream &operator<<(std::ostream &os, const union_set &obj)
20364{
20365  char *str = isl_union_set_to_str(obj.get());
20366  if (!str) {
20367    os.setstate(std::ios_base::badbit);
20368    return os;
20369  }
20370  os << str;
20371  free(str);
20372  return os;
20373}
20374
20375// implementations for isl::union_set_list
20376union_set_list manage(__isl_take isl_union_set_list *ptr) {
20377  return union_set_list(ptr);
20378}
20379union_set_list manage_copy(__isl_keep isl_union_set_list *ptr) {
20380  ptr = isl_union_set_list_copy(ptr);
20381  return union_set_list(ptr);
20382}
20383
20384union_set_list::union_set_list(__isl_take isl_union_set_list *ptr)
20385    : ptr(ptr) {}
20386
20387union_set_list::union_set_list()
20388    : ptr(nullptr) {}
20389
20390union_set_list::union_set_list(const union_set_list &obj)
20391    : ptr(nullptr)
20392{
20393  ptr = obj.copy();
20394}
20395
20396union_set_list::union_set_list(isl::checked::ctx ctx, int n)
20397{
20398  auto res = isl_union_set_list_alloc(ctx.release(), n);
20399  ptr = res;
20400}
20401
20402union_set_list::union_set_list(isl::checked::union_set el)
20403{
20404  auto res = isl_union_set_list_from_union_set(el.release());
20405  ptr = res;
20406}
20407
20408union_set_list::union_set_list(isl::checked::ctx ctx, const std::string &str)
20409{
20410  auto res = isl_union_set_list_read_from_str(ctx.release(), str.c_str());
20411  ptr = res;
20412}
20413
20414union_set_list &union_set_list::operator=(union_set_list obj) {
20415  std::swap(this->ptr, obj.ptr);
20416  return *this;
20417}
20418
20419union_set_list::~union_set_list() {
20420  if (ptr)
20421    isl_union_set_list_free(ptr);
20422}
20423
20424__isl_give isl_union_set_list *union_set_list::copy() const & {
20425  return isl_union_set_list_copy(ptr);
20426}
20427
20428__isl_keep isl_union_set_list *union_set_list::get() const {
20429  return ptr;
20430}
20431
20432__isl_give isl_union_set_list *union_set_list::release() {
20433  isl_union_set_list *tmp = ptr;
20434  ptr = nullptr;
20435  return tmp;
20436}
20437
20438bool union_set_list::is_null() const {
20439  return ptr == nullptr;
20440}
20441
20442isl::checked::ctx union_set_list::ctx() const {
20443  return isl::checked::ctx(isl_union_set_list_get_ctx(ptr));
20444}
20445
20446isl::checked::union_set_list union_set_list::add(isl::checked::union_set el) const
20447{
20448  auto res = isl_union_set_list_add(copy(), el.release());
20449  return manage(res);
20450}
20451
20452isl::checked::union_set union_set_list::at(int index) const
20453{
20454  auto res = isl_union_set_list_get_at(get(), index);
20455  return manage(res);
20456}
20457
20458isl::checked::union_set union_set_list::get_at(int index) const
20459{
20460  return at(index);
20461}
20462
20463isl::checked::union_set_list union_set_list::clear() const
20464{
20465  auto res = isl_union_set_list_clear(copy());
20466  return manage(res);
20467}
20468
20469isl::checked::union_set_list union_set_list::concat(isl::checked::union_set_list list2) const
20470{
20471  auto res = isl_union_set_list_concat(copy(), list2.release());
20472  return manage(res);
20473}
20474
20475isl::checked::union_set_list union_set_list::drop(unsigned int first, unsigned int n) const
20476{
20477  auto res = isl_union_set_list_drop(copy(), first, n);
20478  return manage(res);
20479}
20480
20481stat union_set_list::foreach(const std::function<stat(isl::checked::union_set)> &fn) const
20482{
20483  struct fn_data {
20484    std::function<stat(isl::checked::union_set)> func;
20485  } fn_data = { fn };
20486  auto fn_lambda = [](isl_union_set *arg_0, void *arg_1) -> isl_stat {
20487    auto *data = static_cast<struct fn_data *>(arg_1);
20488    auto ret = (data->func)(manage(arg_0));
20489    return ret.release();
20490  };
20491  auto res = isl_union_set_list_foreach(get(), fn_lambda, &fn_data);
20492  return manage(res);
20493}
20494
20495stat union_set_list::foreach_scc(const std::function<boolean(isl::checked::union_set, isl::checked::union_set)> &follows, const std::function<stat(isl::checked::union_set_list)> &fn) const
20496{
20497  struct follows_data {
20498    std::function<boolean(isl::checked::union_set, isl::checked::union_set)> func;
20499  } follows_data = { follows };
20500  auto follows_lambda = [](isl_union_set *arg_0, isl_union_set *arg_1, void *arg_2) -> isl_bool {
20501    auto *data = static_cast<struct follows_data *>(arg_2);
20502    auto ret = (data->func)(manage_copy(arg_0), manage_copy(arg_1));
20503    return ret.release();
20504  };
20505  struct fn_data {
20506    std::function<stat(isl::checked::union_set_list)> func;
20507  } fn_data = { fn };
20508  auto fn_lambda = [](isl_union_set_list *arg_0, void *arg_1) -> isl_stat {
20509    auto *data = static_cast<struct fn_data *>(arg_1);
20510    auto ret = (data->func)(manage(arg_0));
20511    return ret.release();
20512  };
20513  auto res = isl_union_set_list_foreach_scc(get(), follows_lambda, &follows_data, fn_lambda, &fn_data);
20514  return manage(res);
20515}
20516
20517isl::checked::union_set_list union_set_list::insert(unsigned int pos, isl::checked::union_set el) const
20518{
20519  auto res = isl_union_set_list_insert(copy(), pos, el.release());
20520  return manage(res);
20521}
20522
20523isl::checked::union_set_list union_set_list::set_at(int index, isl::checked::union_set el) const
20524{
20525  auto res = isl_union_set_list_set_at(copy(), index, el.release());
20526  return manage(res);
20527}
20528
20529class size union_set_list::size() const
20530{
20531  auto res = isl_union_set_list_size(get());
20532  return manage(res);
20533}
20534
20535inline std::ostream &operator<<(std::ostream &os, const union_set_list &obj)
20536{
20537  char *str = isl_union_set_list_to_str(obj.get());
20538  if (!str) {
20539    os.setstate(std::ios_base::badbit);
20540    return os;
20541  }
20542  os << str;
20543  free(str);
20544  return os;
20545}
20546
20547// implementations for isl::val
20548val manage(__isl_take isl_val *ptr) {
20549  return val(ptr);
20550}
20551val manage_copy(__isl_keep isl_val *ptr) {
20552  ptr = isl_val_copy(ptr);
20553  return val(ptr);
20554}
20555
20556val::val(__isl_take isl_val *ptr)
20557    : ptr(ptr) {}
20558
20559val::val()
20560    : ptr(nullptr) {}
20561
20562val::val(const val &obj)
20563    : ptr(nullptr)
20564{
20565  ptr = obj.copy();
20566}
20567
20568val::val(isl::checked::ctx ctx, long i)
20569{
20570  auto res = isl_val_int_from_si(ctx.release(), i);
20571  ptr = res;
20572}
20573
20574val::val(isl::checked::ctx ctx, const std::string &str)
20575{
20576  auto res = isl_val_read_from_str(ctx.release(), str.c_str());
20577  ptr = res;
20578}
20579
20580val &val::operator=(val obj) {
20581  std::swap(this->ptr, obj.ptr);
20582  return *this;
20583}
20584
20585val::~val() {
20586  if (ptr)
20587    isl_val_free(ptr);
20588}
20589
20590__isl_give isl_val *val::copy() const & {
20591  return isl_val_copy(ptr);
20592}
20593
20594__isl_keep isl_val *val::get() const {
20595  return ptr;
20596}
20597
20598__isl_give isl_val *val::release() {
20599  isl_val *tmp = ptr;
20600  ptr = nullptr;
20601  return tmp;
20602}
20603
20604bool val::is_null() const {
20605  return ptr == nullptr;
20606}
20607
20608isl::checked::ctx val::ctx() const {
20609  return isl::checked::ctx(isl_val_get_ctx(ptr));
20610}
20611
20612isl::checked::val val::abs() const
20613{
20614  auto res = isl_val_abs(copy());
20615  return manage(res);
20616}
20617
20618boolean val::abs_eq(const isl::checked::val &v2) const
20619{
20620  auto res = isl_val_abs_eq(get(), v2.get());
20621  return manage(res);
20622}
20623
20624boolean val::abs_eq(long v2) const
20625{
20626  return this->abs_eq(isl::checked::val(ctx(), v2));
20627}
20628
20629isl::checked::val val::add(isl::checked::val v2) const
20630{
20631  auto res = isl_val_add(copy(), v2.release());
20632  return manage(res);
20633}
20634
20635isl::checked::val val::add(long v2) const
20636{
20637  return this->add(isl::checked::val(ctx(), v2));
20638}
20639
20640isl::checked::val val::ceil() const
20641{
20642  auto res = isl_val_ceil(copy());
20643  return manage(res);
20644}
20645
20646int val::cmp_si(long i) const
20647{
20648  auto res = isl_val_cmp_si(get(), i);
20649  return res;
20650}
20651
20652long val::den_si() const
20653{
20654  auto res = isl_val_get_den_si(get());
20655  return res;
20656}
20657
20658long val::get_den_si() const
20659{
20660  return den_si();
20661}
20662
20663isl::checked::val val::div(isl::checked::val v2) const
20664{
20665  auto res = isl_val_div(copy(), v2.release());
20666  return manage(res);
20667}
20668
20669isl::checked::val val::div(long v2) const
20670{
20671  return this->div(isl::checked::val(ctx(), v2));
20672}
20673
20674boolean val::eq(const isl::checked::val &v2) const
20675{
20676  auto res = isl_val_eq(get(), v2.get());
20677  return manage(res);
20678}
20679
20680boolean val::eq(long v2) const
20681{
20682  return this->eq(isl::checked::val(ctx(), v2));
20683}
20684
20685isl::checked::val val::floor() const
20686{
20687  auto res = isl_val_floor(copy());
20688  return manage(res);
20689}
20690
20691isl::checked::val val::gcd(isl::checked::val v2) const
20692{
20693  auto res = isl_val_gcd(copy(), v2.release());
20694  return manage(res);
20695}
20696
20697isl::checked::val val::gcd(long v2) const
20698{
20699  return this->gcd(isl::checked::val(ctx(), v2));
20700}
20701
20702boolean val::ge(const isl::checked::val &v2) const
20703{
20704  auto res = isl_val_ge(get(), v2.get());
20705  return manage(res);
20706}
20707
20708boolean val::ge(long v2) const
20709{
20710  return this->ge(isl::checked::val(ctx(), v2));
20711}
20712
20713boolean val::gt(const isl::checked::val &v2) const
20714{
20715  auto res = isl_val_gt(get(), v2.get());
20716  return manage(res);
20717}
20718
20719boolean val::gt(long v2) const
20720{
20721  return this->gt(isl::checked::val(ctx(), v2));
20722}
20723
20724isl::checked::val val::infty(isl::checked::ctx ctx)
20725{
20726  auto res = isl_val_infty(ctx.release());
20727  return manage(res);
20728}
20729
20730isl::checked::val val::inv() const
20731{
20732  auto res = isl_val_inv(copy());
20733  return manage(res);
20734}
20735
20736boolean val::is_divisible_by(const isl::checked::val &v2) const
20737{
20738  auto res = isl_val_is_divisible_by(get(), v2.get());
20739  return manage(res);
20740}
20741
20742boolean val::is_divisible_by(long v2) const
20743{
20744  return this->is_divisible_by(isl::checked::val(ctx(), v2));
20745}
20746
20747boolean val::is_infty() const
20748{
20749  auto res = isl_val_is_infty(get());
20750  return manage(res);
20751}
20752
20753boolean val::is_int() const
20754{
20755  auto res = isl_val_is_int(get());
20756  return manage(res);
20757}
20758
20759boolean val::is_nan() const
20760{
20761  auto res = isl_val_is_nan(get());
20762  return manage(res);
20763}
20764
20765boolean val::is_neg() const
20766{
20767  auto res = isl_val_is_neg(get());
20768  return manage(res);
20769}
20770
20771boolean val::is_neginfty() const
20772{
20773  auto res = isl_val_is_neginfty(get());
20774  return manage(res);
20775}
20776
20777boolean val::is_negone() const
20778{
20779  auto res = isl_val_is_negone(get());
20780  return manage(res);
20781}
20782
20783boolean val::is_nonneg() const
20784{
20785  auto res = isl_val_is_nonneg(get());
20786  return manage(res);
20787}
20788
20789boolean val::is_nonpos() const
20790{
20791  auto res = isl_val_is_nonpos(get());
20792  return manage(res);
20793}
20794
20795boolean val::is_one() const
20796{
20797  auto res = isl_val_is_one(get());
20798  return manage(res);
20799}
20800
20801boolean val::is_pos() const
20802{
20803  auto res = isl_val_is_pos(get());
20804  return manage(res);
20805}
20806
20807boolean val::is_rat() const
20808{
20809  auto res = isl_val_is_rat(get());
20810  return manage(res);
20811}
20812
20813boolean val::is_zero() const
20814{
20815  auto res = isl_val_is_zero(get());
20816  return manage(res);
20817}
20818
20819boolean val::le(const isl::checked::val &v2) const
20820{
20821  auto res = isl_val_le(get(), v2.get());
20822  return manage(res);
20823}
20824
20825boolean val::le(long v2) const
20826{
20827  return this->le(isl::checked::val(ctx(), v2));
20828}
20829
20830boolean val::lt(const isl::checked::val &v2) const
20831{
20832  auto res = isl_val_lt(get(), v2.get());
20833  return manage(res);
20834}
20835
20836boolean val::lt(long v2) const
20837{
20838  return this->lt(isl::checked::val(ctx(), v2));
20839}
20840
20841isl::checked::val val::max(isl::checked::val v2) const
20842{
20843  auto res = isl_val_max(copy(), v2.release());
20844  return manage(res);
20845}
20846
20847isl::checked::val val::max(long v2) const
20848{
20849  return this->max(isl::checked::val(ctx(), v2));
20850}
20851
20852isl::checked::val val::min(isl::checked::val v2) const
20853{
20854  auto res = isl_val_min(copy(), v2.release());
20855  return manage(res);
20856}
20857
20858isl::checked::val val::min(long v2) const
20859{
20860  return this->min(isl::checked::val(ctx(), v2));
20861}
20862
20863isl::checked::val val::mod(isl::checked::val v2) const
20864{
20865  auto res = isl_val_mod(copy(), v2.release());
20866  return manage(res);
20867}
20868
20869isl::checked::val val::mod(long v2) const
20870{
20871  return this->mod(isl::checked::val(ctx(), v2));
20872}
20873
20874isl::checked::val val::mul(isl::checked::val v2) const
20875{
20876  auto res = isl_val_mul(copy(), v2.release());
20877  return manage(res);
20878}
20879
20880isl::checked::val val::mul(long v2) const
20881{
20882  return this->mul(isl::checked::val(ctx(), v2));
20883}
20884
20885isl::checked::val val::nan(isl::checked::ctx ctx)
20886{
20887  auto res = isl_val_nan(ctx.release());
20888  return manage(res);
20889}
20890
20891boolean val::ne(const isl::checked::val &v2) const
20892{
20893  auto res = isl_val_ne(get(), v2.get());
20894  return manage(res);
20895}
20896
20897boolean val::ne(long v2) const
20898{
20899  return this->ne(isl::checked::val(ctx(), v2));
20900}
20901
20902isl::checked::val val::neg() const
20903{
20904  auto res = isl_val_neg(copy());
20905  return manage(res);
20906}
20907
20908isl::checked::val val::neginfty(isl::checked::ctx ctx)
20909{
20910  auto res = isl_val_neginfty(ctx.release());
20911  return manage(res);
20912}
20913
20914isl::checked::val val::negone(isl::checked::ctx ctx)
20915{
20916  auto res = isl_val_negone(ctx.release());
20917  return manage(res);
20918}
20919
20920long val::num_si() const
20921{
20922  auto res = isl_val_get_num_si(get());
20923  return res;
20924}
20925
20926long val::get_num_si() const
20927{
20928  return num_si();
20929}
20930
20931isl::checked::val val::one(isl::checked::ctx ctx)
20932{
20933  auto res = isl_val_one(ctx.release());
20934  return manage(res);
20935}
20936
20937isl::checked::val val::pow2() const
20938{
20939  auto res = isl_val_pow2(copy());
20940  return manage(res);
20941}
20942
20943int val::sgn() const
20944{
20945  auto res = isl_val_sgn(get());
20946  return res;
20947}
20948
20949isl::checked::val val::sub(isl::checked::val v2) const
20950{
20951  auto res = isl_val_sub(copy(), v2.release());
20952  return manage(res);
20953}
20954
20955isl::checked::val val::sub(long v2) const
20956{
20957  return this->sub(isl::checked::val(ctx(), v2));
20958}
20959
20960isl::checked::val_list val::to_list() const
20961{
20962  auto res = isl_val_to_list(copy());
20963  return manage(res);
20964}
20965
20966isl::checked::val val::trunc() const
20967{
20968  auto res = isl_val_trunc(copy());
20969  return manage(res);
20970}
20971
20972isl::checked::val val::zero(isl::checked::ctx ctx)
20973{
20974  auto res = isl_val_zero(ctx.release());
20975  return manage(res);
20976}
20977
20978inline std::ostream &operator<<(std::ostream &os, const val &obj)
20979{
20980  char *str = isl_val_to_str(obj.get());
20981  if (!str) {
20982    os.setstate(std::ios_base::badbit);
20983    return os;
20984  }
20985  os << str;
20986  free(str);
20987  return os;
20988}
20989
20990// implementations for isl::val_list
20991val_list manage(__isl_take isl_val_list *ptr) {
20992  return val_list(ptr);
20993}
20994val_list manage_copy(__isl_keep isl_val_list *ptr) {
20995  ptr = isl_val_list_copy(ptr);
20996  return val_list(ptr);
20997}
20998
20999val_list::val_list(__isl_take isl_val_list *ptr)
21000    : ptr(ptr) {}
21001
21002val_list::val_list()
21003    : ptr(nullptr) {}
21004
21005val_list::val_list(const val_list &obj)
21006    : ptr(nullptr)
21007{
21008  ptr = obj.copy();
21009}
21010
21011val_list::val_list(isl::checked::ctx ctx, int n)
21012{
21013  auto res = isl_val_list_alloc(ctx.release(), n);
21014  ptr = res;
21015}
21016
21017val_list::val_list(isl::checked::val el)
21018{
21019  auto res = isl_val_list_from_val(el.release());
21020  ptr = res;
21021}
21022
21023val_list::val_list(isl::checked::ctx ctx, const std::string &str)
21024{
21025  auto res = isl_val_list_read_from_str(ctx.release(), str.c_str());
21026  ptr = res;
21027}
21028
21029val_list &val_list::operator=(val_list obj) {
21030  std::swap(this->ptr, obj.ptr);
21031  return *this;
21032}
21033
21034val_list::~val_list() {
21035  if (ptr)
21036    isl_val_list_free(ptr);
21037}
21038
21039__isl_give isl_val_list *val_list::copy() const & {
21040  return isl_val_list_copy(ptr);
21041}
21042
21043__isl_keep isl_val_list *val_list::get() const {
21044  return ptr;
21045}
21046
21047__isl_give isl_val_list *val_list::release() {
21048  isl_val_list *tmp = ptr;
21049  ptr = nullptr;
21050  return tmp;
21051}
21052
21053bool val_list::is_null() const {
21054  return ptr == nullptr;
21055}
21056
21057isl::checked::ctx val_list::ctx() const {
21058  return isl::checked::ctx(isl_val_list_get_ctx(ptr));
21059}
21060
21061isl::checked::val_list val_list::add(isl::checked::val el) const
21062{
21063  auto res = isl_val_list_add(copy(), el.release());
21064  return manage(res);
21065}
21066
21067isl::checked::val_list val_list::add(long el) const
21068{
21069  return this->add(isl::checked::val(ctx(), el));
21070}
21071
21072isl::checked::val val_list::at(int index) const
21073{
21074  auto res = isl_val_list_get_at(get(), index);
21075  return manage(res);
21076}
21077
21078isl::checked::val val_list::get_at(int index) const
21079{
21080  return at(index);
21081}
21082
21083isl::checked::val_list val_list::clear() const
21084{
21085  auto res = isl_val_list_clear(copy());
21086  return manage(res);
21087}
21088
21089isl::checked::val_list val_list::concat(isl::checked::val_list list2) const
21090{
21091  auto res = isl_val_list_concat(copy(), list2.release());
21092  return manage(res);
21093}
21094
21095isl::checked::val_list val_list::drop(unsigned int first, unsigned int n) const
21096{
21097  auto res = isl_val_list_drop(copy(), first, n);
21098  return manage(res);
21099}
21100
21101stat val_list::foreach(const std::function<stat(isl::checked::val)> &fn) const
21102{
21103  struct fn_data {
21104    std::function<stat(isl::checked::val)> func;
21105  } fn_data = { fn };
21106  auto fn_lambda = [](isl_val *arg_0, void *arg_1) -> isl_stat {
21107    auto *data = static_cast<struct fn_data *>(arg_1);
21108    auto ret = (data->func)(manage(arg_0));
21109    return ret.release();
21110  };
21111  auto res = isl_val_list_foreach(get(), fn_lambda, &fn_data);
21112  return manage(res);
21113}
21114
21115stat val_list::foreach_scc(const std::function<boolean(isl::checked::val, isl::checked::val)> &follows, const std::function<stat(isl::checked::val_list)> &fn) const
21116{
21117  struct follows_data {
21118    std::function<boolean(isl::checked::val, isl::checked::val)> func;
21119  } follows_data = { follows };
21120  auto follows_lambda = [](isl_val *arg_0, isl_val *arg_1, void *arg_2) -> isl_bool {
21121    auto *data = static_cast<struct follows_data *>(arg_2);
21122    auto ret = (data->func)(manage_copy(arg_0), manage_copy(arg_1));
21123    return ret.release();
21124  };
21125  struct fn_data {
21126    std::function<stat(isl::checked::val_list)> func;
21127  } fn_data = { fn };
21128  auto fn_lambda = [](isl_val_list *arg_0, void *arg_1) -> isl_stat {
21129    auto *data = static_cast<struct fn_data *>(arg_1);
21130    auto ret = (data->func)(manage(arg_0));
21131    return ret.release();
21132  };
21133  auto res = isl_val_list_foreach_scc(get(), follows_lambda, &follows_data, fn_lambda, &fn_data);
21134  return manage(res);
21135}
21136
21137isl::checked::val_list val_list::insert(unsigned int pos, isl::checked::val el) const
21138{
21139  auto res = isl_val_list_insert(copy(), pos, el.release());
21140  return manage(res);
21141}
21142
21143isl::checked::val_list val_list::insert(unsigned int pos, long el) const
21144{
21145  return this->insert(pos, isl::checked::val(ctx(), el));
21146}
21147
21148isl::checked::val_list val_list::set_at(int index, isl::checked::val el) const
21149{
21150  auto res = isl_val_list_set_at(copy(), index, el.release());
21151  return manage(res);
21152}
21153
21154isl::checked::val_list val_list::set_at(int index, long el) const
21155{
21156  return this->set_at(index, isl::checked::val(ctx(), el));
21157}
21158
21159class size val_list::size() const
21160{
21161  auto res = isl_val_list_size(get());
21162  return manage(res);
21163}
21164
21165inline std::ostream &operator<<(std::ostream &os, const val_list &obj)
21166{
21167  char *str = isl_val_list_to_str(obj.get());
21168  if (!str) {
21169    os.setstate(std::ios_base::badbit);
21170    return os;
21171  }
21172  os << str;
21173  free(str);
21174  return os;
21175}
21176} // namespace checked
21177} // namespace isl
21178
21179#endif /* ISL_CPP_CHECKED */
21180