Polly 23.0.0git
isl-noexceptions.h
Go to the documentation of this file.
1/// These are automatically generated checked C++ bindings for isl.
2///
3/// isl is a library for computing with integer sets and maps described by
4/// Presburger formulas. On top of this, isl provides various tools for
5/// polyhedral compilation, ranging from dependence analysis over scheduling
6/// to AST generation.
7
8// clang-format off
9
10#ifndef ISL_CPP_CHECKED
11#define ISL_CPP_CHECKED
12
13#include <stdio.h>
14#include <stdlib.h>
15#include <isl/set.h>
16
17#include <functional>
18#include <memory>
19#include <ostream>
20#include <string>
21#include <type_traits>
22
23namespace isl {
24
25#define ISLPP_STRINGIZE_(X) #X
26#define ISLPP_STRINGIZE(X) ISLPP_STRINGIZE_(X)
27
28#define ISLPP_ASSERT(test, message) \
29 do { \
30 if (test) \
31 break; \
32 fputs("Assertion \"" #test "\" failed at " __FILE__ \
33 ":" ISLPP_STRINGIZE(__LINE__) "\n " message "\n", \
34 stderr); \
35 abort(); \
36 } while (0)
37
38/* Class used to check that isl::checked::boolean,
39 * isl::checked::stat and isl::checked::size values are checked for errors.
40 */
41struct checker {
42 bool checked = false;
44 //ISLPP_ASSERT(checked, "IMPLEMENTATION ERROR: Unchecked state");
45 }
46};
47
48class boolean {
49private:
50 mutable std::shared_ptr<checker> check = std::make_shared<checker>();
52
53 friend boolean manage(isl_bool val);
55public:
56 static boolean error() {
57 return boolean(isl_bool_error);
58 }
61
62 /* implicit */ boolean(bool val)
64
66 auto tmp = val;
68 check->checked = true;
69 return tmp;
70 }
71
72 bool is_error() const { check->checked = true; return val == isl_bool_error; }
73 bool is_false() const { check->checked = true; return val == isl_bool_false; }
74 bool is_true() const { check->checked = true; return val == isl_bool_true; }
75
76 operator bool() const {
77 //ISLPP_ASSERT(check->checked, "IMPLEMENTATION ERROR: Unchecked error state");
78 ISLPP_ASSERT(!is_error(), "IMPLEMENTATION ERROR: Unhandled error state");
79 return is_true();
80 }
81
82 boolean negate() {
83 if (val == isl_bool_true)
85 else if (val == isl_bool_false)
87 return *this;
88 }
89
90 boolean operator!() const {
91 return boolean(*this).negate();
92 }
93};
94
95inline boolean manage(isl_bool val) {
96 return boolean(val);
97}
98
99class ctx {
100 isl_ctx *ptr;
101public:
102 /* implicit */ ctx(isl_ctx *ctx)
103 : ptr(ctx) {}
105 auto tmp = ptr;
106 ptr = nullptr;
107 return tmp;
108 }
110 return ptr;
111 }
112};
113
114/* Class encapsulating an isl_stat value.
115 */
116class stat {
117private:
118 mutable std::shared_ptr<checker> check = std::make_shared<checker>();
120
121 friend stat manage(isl_stat val);
123public:
124 static stat ok() {
125 return stat(isl_stat_ok);
126 }
127 static stat error() {
128 return stat(isl_stat_error);
129 }
131
133 check->checked = true;
134 return val;
135 }
136
137 bool is_error() const {
138 check->checked = true;
139 return val == isl_stat_error;
140 }
141 bool is_ok() const {
142 check->checked = true;
143 return val == isl_stat_ok;
144 }
145};
146
148{
149 return stat(val);
150}
151
152/* Class encapsulating an isl_size value.
153 */
154class size {
155private:
156 mutable std::shared_ptr<checker> check = std::make_shared<checker>();
158
159 friend size manage(isl_size val);
161public:
163
165 auto tmp = val;
167 check->checked = true;
168 return tmp;
169 }
170
171 bool is_error() const {
172 check->checked = true;
173 return val == isl_size_error;
174 }
175
176 explicit operator unsigned() const {
177 ISLPP_ASSERT(check->checked,
178 "IMPLEMENTATION ERROR: Unchecked error state");
180 "IMPLEMENTATION ERROR: Unhandled error state");
181 return val;
182 }
183};
184
186{
187 return size(val);
188}
189
199
200} // namespace isl
201#include <isl/id.h>
202#include <isl/space.h>
203#include <isl/val.h>
204#include <isl/aff.h>
205#include <isl/set.h>
206#include <isl/map.h>
207#include <isl/ilp.h>
208#include <isl/constraint.h>
209#include <isl/union_set.h>
210#include <isl/union_map.h>
211#include <isl/flow.h>
212#include <isl/schedule.h>
213#include <isl/schedule_node.h>
214#include <isl/ast_build.h>
215#include <isl/fixed_box.h>
216
217namespace isl {
218
219// forward declarations
220class aff;
221class aff_list;
222class ast_build;
223class ast_expr;
224class ast_expr_id;
225class ast_expr_int;
226class ast_expr_op;
228class ast_expr_op_add;
230class ast_expr_op_and;
232class ast_expr_op_call;
233class ast_expr_op_cond;
234class ast_expr_op_div;
235class ast_expr_op_eq;
237class ast_expr_op_ge;
238class ast_expr_op_gt;
239class ast_expr_op_le;
240class ast_expr_op_lt;
241class ast_expr_op_max;
243class ast_expr_op_min;
245class ast_expr_op_mul;
246class ast_expr_op_or;
251class ast_expr_op_sub;
253class ast_node;
254class ast_node_block;
255class ast_node_for;
256class ast_node_if;
257class ast_node_list;
258class ast_node_mark;
259class ast_node_user;
260class basic_map;
261class basic_map_list;
262class basic_set;
263class basic_set_list;
264class constraint;
265class fixed_box;
266class id;
267class id_list;
268class id_to_ast_expr;
269class local_space;
270class map;
271class map_list;
272class multi_aff;
273class multi_id;
274class multi_pw_aff;
276class multi_val;
277class point;
278class pw_aff;
279class pw_aff_list;
280class pw_multi_aff;
282class schedule;
284class schedule_node;
296class set;
297class set_list;
298class space;
300class union_flow;
301class union_map;
302class union_pw_aff;
305class union_set;
306class union_set_list;
307class val;
308class val_list;
309
310// declarations for isl::aff
311inline aff manage(__isl_take isl_aff *ptr);
312inline aff manage_copy(__isl_keep isl_aff *ptr);
313
314class aff {
315 friend inline aff manage(__isl_take isl_aff *ptr);
316 friend inline aff manage_copy(__isl_keep isl_aff *ptr);
317
318protected:
319 isl_aff *ptr = nullptr;
320
321 inline explicit aff(__isl_take isl_aff *ptr);
322
323public:
324 inline /* implicit */ aff();
325 inline /* implicit */ aff(const aff &obj);
326 inline explicit aff(isl::ctx ctx, const std::string &str);
327 inline explicit aff(isl::local_space ls, isl::val val);
328 inline explicit aff(isl::local_space ls);
330 inline ~aff();
331 inline __isl_give isl_aff *copy() const &;
332 inline __isl_give isl_aff *copy() && = delete;
333 inline __isl_keep isl_aff *get() const;
335 inline bool is_null() const;
336 inline isl::ctx ctx() const;
337
338 inline isl::aff add(isl::aff aff2) const;
339 inline isl::multi_aff add(const isl::multi_aff &multi2) const;
340 inline isl::multi_pw_aff add(const isl::multi_pw_aff &multi2) const;
341 inline isl::multi_union_pw_aff add(const isl::multi_union_pw_aff &multi2) const;
342 inline isl::pw_aff add(const isl::pw_aff &pwaff2) const;
343 inline isl::pw_multi_aff add(const isl::pw_multi_aff &pma2) const;
344 inline isl::union_pw_aff add(const isl::union_pw_aff &upa2) const;
345 inline isl::union_pw_multi_aff add(const isl::union_pw_multi_aff &upma2) const;
346 inline isl::aff add_constant(isl::val v) const;
347 inline isl::aff add_constant(long v) const;
348 inline isl::multi_aff add_constant(const isl::multi_val &mv) const;
349 inline isl::aff add_constant_si(int v) const;
350 inline isl::pw_aff add_dims(isl::dim type, unsigned int n) const;
352 inline isl::union_pw_multi_aff apply(const isl::union_pw_multi_aff &upma2) const;
353 inline isl::aff as_aff() const;
354 inline isl::map as_map() const;
355 inline isl::multi_aff as_multi_aff() const;
358 inline isl::set as_set() const;
359 inline isl::union_map as_union_map() const;
360 inline isl::aff at(int pos) const;
361 inline isl::basic_set bind(isl::id id) const;
362 inline isl::basic_set bind(const std::string &id) const;
363 inline isl::basic_set bind(const isl::multi_id &tuple) const;
364 inline isl::pw_aff bind_domain(const isl::multi_id &tuple) const;
366 inline isl::aff ceil() const;
367 inline isl::pw_aff coalesce() const;
368 inline isl::pw_aff cond(const isl::pw_aff &pwaff_true, const isl::pw_aff &pwaff_false) const;
370 inline isl::val constant_val() const;
371 inline isl::val get_constant_val() const;
372 inline isl::val denominator_val() const;
373 inline isl::val get_denominator_val() const;
374 inline class size dim(isl::dim type) const;
375 inline isl::id dim_id(isl::dim type, unsigned int pos) const;
376 inline isl::aff div(isl::aff aff2) const;
377 inline isl::pw_aff div(const isl::pw_aff &pa2) const;
378 inline isl::set domain() const;
379 inline isl::space domain_space() const;
380 inline isl::pw_multi_aff drop_dims(isl::dim type, unsigned int first, unsigned int n) const;
381 inline isl::set eq_set(isl::aff aff2) const;
382 inline isl::set eq_set(const isl::pw_aff &pwaff2) const;
383 inline isl::val eval(isl::point pnt) const;
385 inline isl::multi_aff flat_range_product(const isl::multi_aff &multi2) const;
386 inline isl::multi_pw_aff flat_range_product(const isl::multi_pw_aff &multi2) const;
390 inline isl::aff floor() const;
391 inline stat foreach_piece(const std::function<stat(isl::set, isl::aff)> &fn) const;
392 inline stat foreach_piece(const std::function<stat(isl::set, isl::multi_aff)> &fn) const;
393 inline stat foreach_pw_aff(const std::function<stat(isl::pw_aff)> &fn) const;
394 inline isl::set ge_set(isl::aff aff2) const;
395 inline isl::set ge_set(const isl::pw_aff &pwaff2) const;
396 inline isl::aff gist(isl::set context) const;
397 inline isl::union_pw_aff gist(const isl::union_set &context) const;
398 inline isl::aff gist(const isl::basic_set &context) const;
399 inline isl::aff gist(const isl::point &context) const;
400 inline isl::set gt_set(isl::aff aff2) const;
401 inline isl::set gt_set(const isl::pw_aff &pwaff2) const;
402 inline boolean has_range_tuple_id() const;
403 inline isl::multi_aff identity() const;
404 inline isl::pw_aff insert_domain(const isl::space &domain) const;
405 inline isl::pw_aff intersect_domain(const isl::set &set) const;
407 inline isl::union_pw_aff intersect_domain(const isl::union_set &uset) const;
410 inline isl::pw_aff intersect_params(const isl::set &set) const;
411 inline boolean involves_locals() const;
412 inline boolean involves_nan() const;
413 inline boolean involves_param(const isl::id &id) const;
414 inline boolean involves_param(const std::string &id) const;
415 inline boolean involves_param(const isl::id_list &list) const;
416 inline boolean is_cst() const;
417 inline boolean is_equal(const isl::pw_aff &pa2) const;
418 inline boolean isa_aff() const;
419 inline boolean isa_multi_aff() const;
420 inline boolean isa_pw_multi_aff() const;
421 inline isl::set le_set(isl::aff aff2) const;
422 inline isl::set le_set(const isl::pw_aff &pwaff2) const;
423 inline isl::aff_list list() const;
424 inline isl::set lt_set(isl::aff aff2) const;
425 inline isl::set lt_set(const isl::pw_aff &pwaff2) const;
426 inline isl::multi_pw_aff max(const isl::multi_pw_aff &multi2) const;
427 inline isl::pw_aff max(const isl::pw_aff &pwaff2) const;
428 inline isl::multi_val max_multi_val() const;
429 inline isl::multi_pw_aff min(const isl::multi_pw_aff &multi2) const;
430 inline isl::pw_aff min(const isl::pw_aff &pwaff2) const;
431 inline isl::multi_val min_multi_val() const;
432 inline isl::aff mod(isl::val mod) const;
433 inline isl::aff mod(long mod) const;
434 inline isl::aff mul(isl::aff aff2) const;
435 inline isl::pw_aff mul(const isl::pw_aff &pwaff2) const;
436 inline class size n_piece() const;
437 inline isl::set ne_set(isl::aff aff2) const;
438 inline isl::set ne_set(const isl::pw_aff &pwaff2) const;
439 inline isl::aff neg() const;
440 inline boolean plain_is_empty() const;
441 inline boolean plain_is_equal(const isl::multi_aff &multi2) const;
442 inline boolean plain_is_equal(const isl::multi_pw_aff &multi2) const;
443 inline boolean plain_is_equal(const isl::multi_union_pw_aff &multi2) const;
446 inline isl::multi_aff product(const isl::multi_aff &multi2) const;
447 inline isl::multi_pw_aff product(const isl::multi_pw_aff &multi2) const;
448 inline isl::pw_multi_aff product(const isl::pw_multi_aff &pma2) const;
449 inline isl::aff pullback(isl::multi_aff ma) const;
450 inline isl::pw_aff pullback(const isl::multi_pw_aff &mpa) const;
451 inline isl::pw_aff pullback(const isl::pw_multi_aff &pma) const;
452 inline isl::union_pw_aff pullback(const isl::union_pw_multi_aff &upma) const;
453 inline isl::aff pullback(const isl::aff &ma) const;
457 inline isl::multi_aff range_product(const isl::multi_aff &multi2) const;
458 inline isl::multi_pw_aff range_product(const isl::multi_pw_aff &multi2) const;
460 inline isl::pw_multi_aff range_product(const isl::pw_multi_aff &pma2) const;
462 inline isl::id range_tuple_id() const;
464 inline isl::multi_aff reset_tuple_id(isl::dim type) const;
465 inline isl::aff scale(isl::val v) const;
466 inline isl::aff scale(long v) const;
467 inline isl::multi_aff scale(const isl::multi_val &mv) const;
468 inline isl::aff scale_down(isl::val v) const;
469 inline isl::aff scale_down(long v) const;
470 inline isl::multi_aff scale_down(const isl::multi_val &mv) const;
471 inline isl::multi_aff set_aff(int pos, const isl::aff &el) const;
472 inline isl::multi_aff set_at(int pos, const isl::aff &el) const;
473 inline isl::multi_pw_aff set_at(int pos, const isl::pw_aff &el) const;
474 inline isl::multi_union_pw_aff set_at(int pos, const isl::union_pw_aff &el) const;
475 inline isl::aff set_constant_si(int v) const;
476 inline isl::multi_pw_aff set_pw_aff(int pos, const isl::pw_aff &el) const;
477 inline isl::pw_multi_aff set_pw_aff(unsigned int pos, const isl::pw_aff &pa) const;
478 inline isl::multi_aff set_range_tuple(const isl::id &id) const;
479 inline isl::multi_aff set_range_tuple(const std::string &id) const;
480 inline isl::pw_aff set_tuple_id(isl::dim type, const isl::id &id) const;
481 inline isl::pw_aff set_tuple_id(isl::dim type, const std::string &id) const;
482 inline isl::multi_union_pw_aff set_union_pw_aff(int pos, const isl::union_pw_aff &el) const;
483 inline class size size() const;
484 inline isl::space space() const;
485 inline isl::aff sub(isl::aff aff2) const;
486 inline isl::multi_aff sub(const isl::multi_aff &multi2) const;
487 inline isl::multi_pw_aff sub(const isl::multi_pw_aff &multi2) const;
488 inline isl::multi_union_pw_aff sub(const isl::multi_union_pw_aff &multi2) const;
489 inline isl::pw_aff sub(const isl::pw_aff &pwaff2) const;
490 inline isl::pw_multi_aff sub(const isl::pw_multi_aff &pma2) const;
491 inline isl::union_pw_aff sub(const isl::union_pw_aff &upa2) const;
492 inline isl::union_pw_multi_aff sub(const isl::union_pw_multi_aff &upma2) const;
493 inline isl::pw_aff subtract_domain(const isl::set &set) const;
495 inline isl::union_pw_aff subtract_domain(const isl::union_set &uset) const;
496 inline isl::pw_aff tdiv_q(const isl::pw_aff &pa2) const;
497 inline isl::pw_aff tdiv_r(const isl::pw_aff &pa2) const;
498 inline isl::aff_list to_list() const;
504 inline isl::id tuple_id(isl::dim type) const;
506 inline isl::multi_pw_aff union_add(const isl::multi_pw_aff &mpa2) const;
508 inline isl::pw_aff union_add(const isl::pw_aff &pwaff2) const;
509 inline isl::pw_multi_aff union_add(const isl::pw_multi_aff &pma2) const;
510 inline isl::union_pw_aff union_add(const isl::union_pw_aff &upa2) const;
512 static inline isl::aff var_on_domain(isl::local_space ls, isl::dim type, unsigned int pos);
514};
515
516// declarations for isl::aff_list
517inline aff_list manage(__isl_take isl_aff_list *ptr);
518inline aff_list manage_copy(__isl_keep isl_aff_list *ptr);
519
520class aff_list {
521 friend inline aff_list manage(__isl_take isl_aff_list *ptr);
522 friend inline aff_list manage_copy(__isl_keep isl_aff_list *ptr);
523
524protected:
525 isl_aff_list *ptr = nullptr;
526
527 inline explicit aff_list(__isl_take isl_aff_list *ptr);
528
529public:
530 inline /* implicit */ aff_list();
531 inline /* implicit */ aff_list(const aff_list &obj);
532 inline explicit aff_list(isl::ctx ctx, int n);
533 inline explicit aff_list(isl::aff el);
534 inline explicit aff_list(isl::ctx ctx, const std::string &str);
536 inline ~aff_list();
537 inline __isl_give isl_aff_list *copy() const &;
538 inline __isl_give isl_aff_list *copy() && = delete;
539 inline __isl_keep isl_aff_list *get() const;
540 inline __isl_give isl_aff_list *release();
541 inline bool is_null() const;
542 inline isl::ctx ctx() const;
543
544 inline isl::aff_list add(isl::aff el) const;
545 inline isl::aff at(int index) const;
546 inline isl::aff get_at(int index) const;
547 inline isl::aff_list clear() const;
548 inline isl::aff_list concat(isl::aff_list list2) const;
549 inline isl::aff_list drop(unsigned int first, unsigned int n) const;
550 inline stat foreach(const std::function<stat(isl::aff)> &fn) const;
551 inline isl::aff_list insert(unsigned int pos, isl::aff el) const;
552 inline class size size() const;
553};
554
555// declarations for isl::ast_build
558
559class ast_build {
562
563protected:
564 isl_ast_build *ptr = nullptr;
565
567
568public:
569 inline /* implicit */ ast_build();
570 inline /* implicit */ ast_build(const ast_build &obj);
571 inline explicit ast_build(isl::ctx ctx);
573 inline ~ast_build();
574 inline __isl_give isl_ast_build *copy() const &;
575 inline __isl_give isl_ast_build *copy() && = delete;
576 inline __isl_keep isl_ast_build *get() const;
578 inline bool is_null() const;
579 inline isl::ctx ctx() const;
580
581private:
583 struct at_each_domain_data {
584 std::function<isl::ast_node(isl::ast_node, isl::ast_build)> func;
585 };
586 std::shared_ptr<at_each_domain_data> at_each_domain_data;
587 static inline isl_ast_node *at_each_domain(isl_ast_node *arg_0, isl_ast_build *arg_1, void *arg_2);
588 inline void set_at_each_domain_data(const std::function<isl::ast_node(isl::ast_node, isl::ast_build)> &fn);
589public:
600 inline isl::ast_build restrict(isl::set set) const;
601 inline isl::union_map schedule() const;
603};
604
605// declarations for isl::ast_expr
608
609class ast_expr {
610 friend inline ast_expr manage(__isl_take isl_ast_expr *ptr);
611 friend inline ast_expr manage_copy(__isl_keep isl_ast_expr *ptr);
612
613protected:
614 isl_ast_expr *ptr = nullptr;
615
617
618public:
619 inline /* implicit */ ast_expr();
620 inline /* implicit */ ast_expr(const ast_expr &obj);
622 inline ~ast_expr();
623 inline __isl_give isl_ast_expr *copy() const &;
624 inline __isl_give isl_ast_expr *copy() && = delete;
625 inline __isl_keep isl_ast_expr *get() const;
627 inline bool is_null() const;
628private:
629 template <typename T,
630 typename = typename std::enable_if<std::is_same<
631 const decltype(isl_ast_expr_get_type(nullptr)),
632 const T>::value>::type>
633 inline boolean isa_type(T subtype) const;
634public:
635 template <class T> inline boolean isa() const;
636 template <class T> inline T as() const;
637 inline isl::ctx ctx() const;
638
639 inline isl::ast_expr add(isl::ast_expr expr2) const;
640 inline isl::ast_expr address_of() const;
641 inline isl::ast_expr eq(isl::ast_expr expr2) const;
642 static inline isl::ast_expr from_val(isl::val v);
643 inline isl::id id() const;
644 inline isl::id get_id() const;
645 inline isl::ast_expr le(isl::ast_expr expr2) const;
646 inline isl::ast_expr mul(isl::ast_expr expr2) const;
647 inline isl::ast_expr op_arg(int pos) const;
648 inline isl::ast_expr get_op_arg(int pos) const;
649 inline std::string to_C_str() const;
650 inline isl::val val() const;
651 inline isl::val get_val() const;
652};
653
654// declarations for isl::ast_expr_id
655
656class ast_expr_id : public ast_expr {
657 template <class T>
658 friend boolean ast_expr::isa() const;
660 static const auto type = isl_ast_expr_id;
661
662protected:
664
665public:
666 inline /* implicit */ ast_expr_id();
667 inline /* implicit */ ast_expr_id(const ast_expr_id &obj);
669 inline isl::ctx ctx() const;
670
671 inline isl::id id() const;
672 inline isl::id get_id() const;
673};
674
675// declarations for isl::ast_expr_int
676
677class ast_expr_int : public ast_expr {
678 template <class T>
679 friend boolean ast_expr::isa() const;
681 static const auto type = isl_ast_expr_int;
682
683protected:
685
686public:
687 inline /* implicit */ ast_expr_int();
688 inline /* implicit */ ast_expr_int(const ast_expr_int &obj);
690 inline isl::ctx ctx() const;
691
692 inline isl::val val() const;
693 inline isl::val get_val() const;
694};
695
696// declarations for isl::ast_expr_op
697
698class ast_expr_op : public ast_expr {
699 template <class T>
700 friend boolean ast_expr::isa() const;
702 static const auto type = isl_ast_expr_op;
703
704protected:
706
707public:
708 inline /* implicit */ ast_expr_op();
709 inline /* implicit */ ast_expr_op(const ast_expr_op &obj);
711private:
712 template <typename T,
713 typename = typename std::enable_if<std::is_same<
714 const decltype(isl_ast_expr_op_get_type(nullptr)),
715 const T>::value>::type>
716 inline boolean isa_type(T subtype) const;
717public:
718 template <class T> inline boolean isa() const;
719 template <class T> inline T as() const;
720 inline isl::ctx ctx() const;
721
722 inline isl::ast_expr arg(int pos) const;
723 inline isl::ast_expr get_arg(int pos) const;
724 inline class size n_arg() const;
725 inline class size get_n_arg() const;
726};
727
728// declarations for isl::ast_expr_op_access
729
730class ast_expr_op_access : public ast_expr_op {
731 template <class T>
732 friend boolean ast_expr_op::isa() const;
734 static const auto type = isl_ast_expr_op_access;
735
736protected:
738
739public:
740 inline /* implicit */ ast_expr_op_access();
741 inline /* implicit */ ast_expr_op_access(const ast_expr_op_access &obj);
743 inline isl::ctx ctx() const;
744
745};
746
747// declarations for isl::ast_expr_op_add
748
749class ast_expr_op_add : public ast_expr_op {
750 template <class T>
751 friend boolean ast_expr_op::isa() const;
753 static const auto type = isl_ast_expr_op_add;
754
755protected:
757
758public:
759 inline /* implicit */ ast_expr_op_add();
760 inline /* implicit */ ast_expr_op_add(const ast_expr_op_add &obj);
762 inline isl::ctx ctx() const;
763
764};
765
766// declarations for isl::ast_expr_op_address_of
767
768class ast_expr_op_address_of : public ast_expr_op {
769 template <class T>
770 friend boolean ast_expr_op::isa() const;
772 static const auto type = isl_ast_expr_op_address_of;
773
774protected:
776
777public:
778 inline /* implicit */ ast_expr_op_address_of();
779 inline /* implicit */ ast_expr_op_address_of(const ast_expr_op_address_of &obj);
781 inline isl::ctx ctx() const;
782
783};
784
785// declarations for isl::ast_expr_op_and
786
787class ast_expr_op_and : public ast_expr_op {
788 template <class T>
789 friend boolean ast_expr_op::isa() const;
791 static const auto type = isl_ast_expr_op_and;
792
793protected:
795
796public:
797 inline /* implicit */ ast_expr_op_and();
798 inline /* implicit */ ast_expr_op_and(const ast_expr_op_and &obj);
800 inline isl::ctx ctx() const;
801
802};
803
804// declarations for isl::ast_expr_op_and_then
805
806class ast_expr_op_and_then : public ast_expr_op {
807 template <class T>
808 friend boolean ast_expr_op::isa() const;
810 static const auto type = isl_ast_expr_op_and_then;
811
812protected:
814
815public:
816 inline /* implicit */ ast_expr_op_and_then();
817 inline /* implicit */ ast_expr_op_and_then(const ast_expr_op_and_then &obj);
819 inline isl::ctx ctx() const;
820
821};
822
823// declarations for isl::ast_expr_op_call
824
825class ast_expr_op_call : public ast_expr_op {
826 template <class T>
827 friend boolean ast_expr_op::isa() const;
829 static const auto type = isl_ast_expr_op_call;
830
831protected:
833
834public:
835 inline /* implicit */ ast_expr_op_call();
836 inline /* implicit */ ast_expr_op_call(const ast_expr_op_call &obj);
838 inline isl::ctx ctx() const;
839
840};
841
842// declarations for isl::ast_expr_op_cond
843
844class ast_expr_op_cond : public ast_expr_op {
845 template <class T>
846 friend boolean ast_expr_op::isa() const;
848 static const auto type = isl_ast_expr_op_cond;
849
850protected:
852
853public:
854 inline /* implicit */ ast_expr_op_cond();
855 inline /* implicit */ ast_expr_op_cond(const ast_expr_op_cond &obj);
857 inline isl::ctx ctx() const;
858
859};
860
861// declarations for isl::ast_expr_op_div
862
863class ast_expr_op_div : public ast_expr_op {
864 template <class T>
865 friend boolean ast_expr_op::isa() const;
867 static const auto type = isl_ast_expr_op_div;
868
869protected:
871
872public:
873 inline /* implicit */ ast_expr_op_div();
874 inline /* implicit */ ast_expr_op_div(const ast_expr_op_div &obj);
876 inline isl::ctx ctx() const;
877
878};
879
880// declarations for isl::ast_expr_op_eq
881
882class ast_expr_op_eq : public ast_expr_op {
883 template <class T>
884 friend boolean ast_expr_op::isa() const;
886 static const auto type = isl_ast_expr_op_eq;
887
888protected:
890
891public:
892 inline /* implicit */ ast_expr_op_eq();
893 inline /* implicit */ ast_expr_op_eq(const ast_expr_op_eq &obj);
895 inline isl::ctx ctx() const;
896
897};
898
899// declarations for isl::ast_expr_op_fdiv_q
900
901class ast_expr_op_fdiv_q : public ast_expr_op {
902 template <class T>
903 friend boolean ast_expr_op::isa() const;
905 static const auto type = isl_ast_expr_op_fdiv_q;
906
907protected:
909
910public:
911 inline /* implicit */ ast_expr_op_fdiv_q();
912 inline /* implicit */ ast_expr_op_fdiv_q(const ast_expr_op_fdiv_q &obj);
914 inline isl::ctx ctx() const;
915
916};
917
918// declarations for isl::ast_expr_op_ge
919
920class ast_expr_op_ge : public ast_expr_op {
921 template <class T>
922 friend boolean ast_expr_op::isa() const;
924 static const auto type = isl_ast_expr_op_ge;
925
926protected:
928
929public:
930 inline /* implicit */ ast_expr_op_ge();
931 inline /* implicit */ ast_expr_op_ge(const ast_expr_op_ge &obj);
933 inline isl::ctx ctx() const;
934
935};
936
937// declarations for isl::ast_expr_op_gt
938
939class ast_expr_op_gt : public ast_expr_op {
940 template <class T>
941 friend boolean ast_expr_op::isa() const;
943 static const auto type = isl_ast_expr_op_gt;
944
945protected:
947
948public:
949 inline /* implicit */ ast_expr_op_gt();
950 inline /* implicit */ ast_expr_op_gt(const ast_expr_op_gt &obj);
952 inline isl::ctx ctx() const;
953
954};
955
956// declarations for isl::ast_expr_op_le
957
958class ast_expr_op_le : public ast_expr_op {
959 template <class T>
960 friend boolean ast_expr_op::isa() const;
962 static const auto type = isl_ast_expr_op_le;
963
964protected:
966
967public:
968 inline /* implicit */ ast_expr_op_le();
969 inline /* implicit */ ast_expr_op_le(const ast_expr_op_le &obj);
971 inline isl::ctx ctx() const;
972
973};
974
975// declarations for isl::ast_expr_op_lt
976
977class ast_expr_op_lt : public ast_expr_op {
978 template <class T>
979 friend boolean ast_expr_op::isa() const;
981 static const auto type = isl_ast_expr_op_lt;
982
983protected:
985
986public:
987 inline /* implicit */ ast_expr_op_lt();
988 inline /* implicit */ ast_expr_op_lt(const ast_expr_op_lt &obj);
990 inline isl::ctx ctx() const;
991
992};
993
994// declarations for isl::ast_expr_op_max
995
996class ast_expr_op_max : public ast_expr_op {
997 template <class T>
998 friend boolean ast_expr_op::isa() const;
1000 static const auto type = isl_ast_expr_op_max;
1001
1002protected:
1004
1005public:
1006 inline /* implicit */ ast_expr_op_max();
1007 inline /* implicit */ ast_expr_op_max(const ast_expr_op_max &obj);
1009 inline isl::ctx ctx() const;
1010
1011};
1012
1013// declarations for isl::ast_expr_op_member
1014
1015class ast_expr_op_member : public ast_expr_op {
1016 template <class T>
1017 friend boolean ast_expr_op::isa() const;
1019 static const auto type = isl_ast_expr_op_member;
1020
1021protected:
1023
1024public:
1025 inline /* implicit */ ast_expr_op_member();
1026 inline /* implicit */ ast_expr_op_member(const ast_expr_op_member &obj);
1028 inline isl::ctx ctx() const;
1029
1030};
1031
1032// declarations for isl::ast_expr_op_min
1033
1034class ast_expr_op_min : public ast_expr_op {
1035 template <class T>
1036 friend boolean ast_expr_op::isa() const;
1038 static const auto type = isl_ast_expr_op_min;
1039
1040protected:
1042
1043public:
1044 inline /* implicit */ ast_expr_op_min();
1045 inline /* implicit */ ast_expr_op_min(const ast_expr_op_min &obj);
1047 inline isl::ctx ctx() const;
1048
1049};
1050
1051// declarations for isl::ast_expr_op_minus
1052
1053class ast_expr_op_minus : public ast_expr_op {
1054 template <class T>
1055 friend boolean ast_expr_op::isa() const;
1057 static const auto type = isl_ast_expr_op_minus;
1058
1059protected:
1061
1062public:
1063 inline /* implicit */ ast_expr_op_minus();
1064 inline /* implicit */ ast_expr_op_minus(const ast_expr_op_minus &obj);
1066 inline isl::ctx ctx() const;
1067
1068};
1069
1070// declarations for isl::ast_expr_op_mul
1071
1072class ast_expr_op_mul : public ast_expr_op {
1073 template <class T>
1074 friend boolean ast_expr_op::isa() const;
1076 static const auto type = isl_ast_expr_op_mul;
1077
1078protected:
1080
1081public:
1082 inline /* implicit */ ast_expr_op_mul();
1083 inline /* implicit */ ast_expr_op_mul(const ast_expr_op_mul &obj);
1085 inline isl::ctx ctx() const;
1086
1087};
1088
1089// declarations for isl::ast_expr_op_or
1090
1091class ast_expr_op_or : public ast_expr_op {
1092 template <class T>
1093 friend boolean ast_expr_op::isa() const;
1095 static const auto type = isl_ast_expr_op_or;
1096
1097protected:
1099
1100public:
1101 inline /* implicit */ ast_expr_op_or();
1102 inline /* implicit */ ast_expr_op_or(const ast_expr_op_or &obj);
1104 inline isl::ctx ctx() const;
1105
1106};
1107
1108// declarations for isl::ast_expr_op_or_else
1109
1110class ast_expr_op_or_else : public ast_expr_op {
1111 template <class T>
1112 friend boolean ast_expr_op::isa() const;
1114 static const auto type = isl_ast_expr_op_or_else;
1115
1116protected:
1118
1119public:
1120 inline /* implicit */ ast_expr_op_or_else();
1121 inline /* implicit */ ast_expr_op_or_else(const ast_expr_op_or_else &obj);
1123 inline isl::ctx ctx() const;
1124
1125};
1126
1127// declarations for isl::ast_expr_op_pdiv_q
1128
1129class ast_expr_op_pdiv_q : public ast_expr_op {
1130 template <class T>
1131 friend boolean ast_expr_op::isa() const;
1133 static const auto type = isl_ast_expr_op_pdiv_q;
1134
1135protected:
1137
1138public:
1139 inline /* implicit */ ast_expr_op_pdiv_q();
1140 inline /* implicit */ ast_expr_op_pdiv_q(const ast_expr_op_pdiv_q &obj);
1142 inline isl::ctx ctx() const;
1143
1144};
1145
1146// declarations for isl::ast_expr_op_pdiv_r
1147
1148class ast_expr_op_pdiv_r : public ast_expr_op {
1149 template <class T>
1150 friend boolean ast_expr_op::isa() const;
1152 static const auto type = isl_ast_expr_op_pdiv_r;
1153
1154protected:
1156
1157public:
1158 inline /* implicit */ ast_expr_op_pdiv_r();
1159 inline /* implicit */ ast_expr_op_pdiv_r(const ast_expr_op_pdiv_r &obj);
1161 inline isl::ctx ctx() const;
1162
1163};
1164
1165// declarations for isl::ast_expr_op_select
1166
1167class ast_expr_op_select : public ast_expr_op {
1168 template <class T>
1169 friend boolean ast_expr_op::isa() const;
1171 static const auto type = isl_ast_expr_op_select;
1172
1173protected:
1175
1176public:
1177 inline /* implicit */ ast_expr_op_select();
1178 inline /* implicit */ ast_expr_op_select(const ast_expr_op_select &obj);
1180 inline isl::ctx ctx() const;
1181
1182};
1183
1184// declarations for isl::ast_expr_op_sub
1185
1186class ast_expr_op_sub : public ast_expr_op {
1187 template <class T>
1188 friend boolean ast_expr_op::isa() const;
1190 static const auto type = isl_ast_expr_op_sub;
1191
1192protected:
1194
1195public:
1196 inline /* implicit */ ast_expr_op_sub();
1197 inline /* implicit */ ast_expr_op_sub(const ast_expr_op_sub &obj);
1199 inline isl::ctx ctx() const;
1200
1201};
1202
1203// declarations for isl::ast_expr_op_zdiv_r
1204
1205class ast_expr_op_zdiv_r : public ast_expr_op {
1206 template <class T>
1207 friend boolean ast_expr_op::isa() const;
1209 static const auto type = isl_ast_expr_op_zdiv_r;
1210
1211protected:
1213
1214public:
1215 inline /* implicit */ ast_expr_op_zdiv_r();
1216 inline /* implicit */ ast_expr_op_zdiv_r(const ast_expr_op_zdiv_r &obj);
1218 inline isl::ctx ctx() const;
1219
1220};
1221
1222// declarations for isl::ast_node
1225
1226class ast_node {
1227 friend inline ast_node manage(__isl_take isl_ast_node *ptr);
1228 friend inline ast_node manage_copy(__isl_keep isl_ast_node *ptr);
1229
1230protected:
1231 isl_ast_node *ptr = nullptr;
1232
1234
1235public:
1236 inline /* implicit */ ast_node();
1237 inline /* implicit */ ast_node(const ast_node &obj);
1239 inline ~ast_node();
1240 inline __isl_give isl_ast_node *copy() const &;
1241 inline __isl_give isl_ast_node *copy() && = delete;
1242 inline __isl_keep isl_ast_node *get() const;
1244 inline bool is_null() const;
1245private:
1246 template <typename T,
1247 typename = typename std::enable_if<std::is_same<
1248 const decltype(isl_ast_node_get_type(nullptr)),
1249 const T>::value>::type>
1250 inline boolean isa_type(T subtype) const;
1251public:
1252 template <class T> inline boolean isa() const;
1253 template <class T> inline T as() const;
1254 inline isl::ctx ctx() const;
1255
1256 inline isl::id annotation() const;
1257 inline isl::id get_annotation() const;
1258 inline std::string to_C_str() const;
1259 inline isl::ast_node_list to_list() const;
1260};
1261
1262// declarations for isl::ast_node_block
1263
1264class ast_node_block : public ast_node {
1265 template <class T>
1266 friend boolean ast_node::isa() const;
1268 static const auto type = isl_ast_node_block;
1269
1270protected:
1272
1273public:
1274 inline /* implicit */ ast_node_block();
1275 inline /* implicit */ ast_node_block(const ast_node_block &obj);
1277 inline isl::ctx ctx() const;
1278
1281};
1282
1283// declarations for isl::ast_node_for
1284
1285class ast_node_for : public ast_node {
1286 template <class T>
1287 friend boolean ast_node::isa() const;
1289 static const auto type = isl_ast_node_for;
1290
1291protected:
1293
1294public:
1295 inline /* implicit */ ast_node_for();
1296 inline /* implicit */ ast_node_for(const ast_node_for &obj);
1298 inline isl::ctx ctx() const;
1299
1300 inline isl::ast_node body() const;
1301 inline isl::ast_node get_body() const;
1302 inline isl::ast_expr cond() const;
1303 inline isl::ast_expr get_cond() const;
1304 inline isl::ast_expr inc() const;
1305 inline isl::ast_expr get_inc() const;
1306 inline isl::ast_expr init() const;
1307 inline isl::ast_expr get_init() const;
1308 inline boolean is_degenerate() const;
1309 inline isl::ast_expr iterator() const;
1311};
1312
1313// declarations for isl::ast_node_if
1314
1315class ast_node_if : public ast_node {
1316 template <class T>
1317 friend boolean ast_node::isa() const;
1319 static const auto type = isl_ast_node_if;
1320
1321protected:
1323
1324public:
1325 inline /* implicit */ ast_node_if();
1326 inline /* implicit */ ast_node_if(const ast_node_if &obj);
1328 inline isl::ctx ctx() const;
1329
1330 inline isl::ast_expr cond() const;
1331 inline isl::ast_expr get_cond() const;
1332 inline isl::ast_node else_node() const;
1334 inline boolean has_else_node() const;
1335 inline isl::ast_node then_node() const;
1337};
1338
1339// declarations for isl::ast_node_list
1340inline ast_node_list manage(__isl_take isl_ast_node_list *ptr);
1341inline ast_node_list manage_copy(__isl_keep isl_ast_node_list *ptr);
1342
1343class ast_node_list {
1344 friend inline ast_node_list manage(__isl_take isl_ast_node_list *ptr);
1345 friend inline ast_node_list manage_copy(__isl_keep isl_ast_node_list *ptr);
1346
1347protected:
1348 isl_ast_node_list *ptr = nullptr;
1349
1350 inline explicit ast_node_list(__isl_take isl_ast_node_list *ptr);
1351
1352public:
1353 inline /* implicit */ ast_node_list();
1354 inline /* implicit */ ast_node_list(const ast_node_list &obj);
1355 inline explicit ast_node_list(isl::ctx ctx, int n);
1356 inline explicit ast_node_list(isl::ast_node el);
1359 inline __isl_give isl_ast_node_list *copy() const &;
1360 inline __isl_give isl_ast_node_list *copy() && = delete;
1361 inline __isl_keep isl_ast_node_list *get() const;
1362 inline __isl_give isl_ast_node_list *release();
1363 inline bool is_null() const;
1364 inline isl::ctx ctx() const;
1365
1366 inline isl::ast_node_list add(isl::ast_node el) const;
1367 inline isl::ast_node at(int index) const;
1368 inline isl::ast_node get_at(int index) const;
1369 inline isl::ast_node_list clear() const;
1371 inline isl::ast_node_list drop(unsigned int first, unsigned int n) const;
1372 inline stat foreach(const std::function<stat(isl::ast_node)> &fn) const;
1373 inline isl::ast_node_list insert(unsigned int pos, isl::ast_node el) const;
1374 inline class size size() const;
1375};
1376
1377// declarations for isl::ast_node_mark
1378
1379class ast_node_mark : public ast_node {
1380 template <class T>
1381 friend boolean ast_node::isa() const;
1383 static const auto type = isl_ast_node_mark;
1384
1385protected:
1387
1388public:
1389 inline /* implicit */ ast_node_mark();
1390 inline /* implicit */ ast_node_mark(const ast_node_mark &obj);
1392 inline isl::ctx ctx() const;
1393
1394 inline isl::id id() const;
1395 inline isl::id get_id() const;
1396 inline isl::ast_node node() const;
1397 inline isl::ast_node get_node() const;
1398};
1399
1400// declarations for isl::ast_node_user
1401
1402class ast_node_user : public ast_node {
1403 template <class T>
1404 friend boolean ast_node::isa() const;
1406 static const auto type = isl_ast_node_user;
1407
1408protected:
1410
1411public:
1412 inline /* implicit */ ast_node_user();
1413 inline /* implicit */ ast_node_user(const ast_node_user &obj);
1415 inline isl::ctx ctx() const;
1416
1417 inline isl::ast_expr expr() const;
1418 inline isl::ast_expr get_expr() const;
1419};
1420
1421// declarations for isl::basic_map
1424
1425class basic_map {
1426 friend inline basic_map manage(__isl_take isl_basic_map *ptr);
1427 friend inline basic_map manage_copy(__isl_keep isl_basic_map *ptr);
1428
1429protected:
1430 isl_basic_map *ptr = nullptr;
1431
1433
1434public:
1435 inline /* implicit */ basic_map();
1436 inline /* implicit */ basic_map(const basic_map &obj);
1437 inline explicit basic_map(isl::ctx ctx, const std::string &str);
1439 inline ~basic_map();
1440 inline __isl_give isl_basic_map *copy() const &;
1441 inline __isl_give isl_basic_map *copy() && = delete;
1444 inline bool is_null() const;
1445 inline isl::ctx ctx() const;
1446
1447 inline isl::map add_constraint(const isl::constraint &constraint) const;
1448 inline isl::map add_dims(isl::dim type, unsigned int n) const;
1449 inline isl::basic_map affine_hull() const;
1450 inline isl::map align_params(const isl::space &model) const;
1451 inline isl::basic_map apply_domain(isl::basic_map bmap2) const;
1452 inline isl::map apply_domain(const isl::map &map2) const;
1453 inline isl::union_map apply_domain(const isl::union_map &umap2) const;
1454 inline isl::basic_map apply_range(isl::basic_map bmap2) const;
1455 inline isl::map apply_range(const isl::map &map2) const;
1456 inline isl::union_map apply_range(const isl::union_map &umap2) const;
1457 inline isl::map as_map() const;
1461 inline isl::basic_map_list basic_map_list() const;
1462 inline isl::set bind_domain(const isl::multi_id &tuple) const;
1463 inline isl::set bind_range(const isl::multi_id &tuple) const;
1464 inline boolean can_curry() const;
1465 inline isl::map coalesce() const;
1466 inline isl::map complement() const;
1467 inline isl::union_map compute_divs() const;
1468 inline isl::map curry() const;
1469 inline isl::basic_set deltas() const;
1471 inline class size dim(isl::dim type) const;
1472 inline isl::pw_aff dim_max(int pos) const;
1473 inline isl::pw_aff dim_min(int pos) const;
1474 inline isl::basic_set domain() const;
1476 inline isl::map domain_factor_range() const;
1477 inline isl::map domain_map() const;
1479 inline isl::map domain_product(const isl::map &map2) const;
1480 inline isl::union_map domain_product(const isl::union_map &umap2) const;
1481 inline class size domain_tuple_dim() const;
1482 inline isl::id domain_tuple_id() const;
1483 inline isl::map eq_at(const isl::multi_pw_aff &mpa) const;
1485 static inline isl::basic_map equal(isl::space space, unsigned int n_equal);
1486 inline isl::basic_map equate(isl::dim type1, int pos1, isl::dim type2, int pos2) const;
1487 inline boolean every_map(const std::function<boolean(isl::map)> &test) const;
1488 inline isl::map extract_map(const isl::space &space) const;
1489 inline isl::map factor_domain() const;
1490 inline isl::map factor_range() const;
1491 inline isl::basic_map fix_si(isl::dim type, unsigned int pos, int value) const;
1492 inline isl::basic_map fix_val(isl::dim type, unsigned int pos, isl::val v) const;
1493 inline isl::basic_map fix_val(isl::dim type, unsigned int pos, long v) const;
1494 inline isl::union_map fixed_power(const isl::val &exp) const;
1495 inline isl::union_map fixed_power(long exp) const;
1496 inline isl::map flat_range_product(const isl::map &map2) const;
1497 inline isl::union_map flat_range_product(const isl::union_map &umap2) const;
1498 inline isl::basic_map flatten() const;
1500 inline isl::basic_map flatten_range() const;
1501 inline isl::map floordiv_val(const isl::val &d) const;
1502 inline isl::map floordiv_val(long d) const;
1503 inline stat foreach_basic_map(const std::function<stat(isl::basic_map)> &fn) const;
1504 inline stat foreach_map(const std::function<stat(isl::map)> &fn) const;
1505 static inline isl::basic_map from_aff(isl::aff aff);
1508 inline isl::map gist(const isl::map &context) const;
1509 inline isl::union_map gist(const isl::union_map &context) const;
1510 inline isl::map gist_domain(const isl::set &context) const;
1511 inline isl::union_map gist_domain(const isl::union_set &uset) const;
1512 inline isl::map gist_params(const isl::set &context) const;
1513 inline isl::union_map gist_range(const isl::union_set &uset) const;
1514 inline boolean has_domain_tuple_id() const;
1515 inline boolean has_equal_space(const isl::map &map2) const;
1516 inline boolean has_range_tuple_id() const;
1517 inline boolean has_tuple_id(isl::dim type) const;
1518 inline boolean has_tuple_name(isl::dim type) const;
1519 inline isl::basic_map intersect(isl::basic_map bmap2) const;
1520 inline isl::map intersect(const isl::map &map2) const;
1521 inline isl::union_map intersect(const isl::union_map &umap2) const;
1523 inline isl::map intersect_domain(const isl::set &set) const;
1525 inline isl::union_map intersect_domain(const isl::union_set &uset) const;
1526 inline isl::basic_map intersect_domain(const isl::point &bset) const;
1527 inline isl::map intersect_domain_factor_domain(const isl::map &factor) const;
1529 inline isl::map intersect_domain_factor_range(const isl::map &factor) const;
1531 inline isl::map intersect_params(const isl::set &params) const;
1533 inline isl::map intersect_range(const isl::set &set) const;
1534 inline isl::union_map intersect_range(const isl::space &space) const;
1535 inline isl::union_map intersect_range(const isl::union_set &uset) const;
1536 inline isl::basic_map intersect_range(const isl::point &bset) const;
1537 inline isl::map intersect_range_factor_domain(const isl::map &factor) const;
1539 inline isl::map intersect_range_factor_range(const isl::map &factor) const;
1541 inline boolean involves_dims(isl::dim type, unsigned int first, unsigned int n) const;
1542 inline boolean is_bijective() const;
1543 inline boolean is_disjoint(const isl::map &map2) const;
1544 inline boolean is_disjoint(const isl::union_map &umap2) const;
1545 inline boolean is_empty() const;
1546 inline boolean is_equal(const isl::basic_map &bmap2) const;
1547 inline boolean is_equal(const isl::map &map2) const;
1548 inline boolean is_equal(const isl::union_map &umap2) const;
1549 inline boolean is_injective() const;
1550 inline boolean is_single_valued() const;
1551 inline boolean is_strict_subset(const isl::map &map2) const;
1552 inline boolean is_strict_subset(const isl::union_map &umap2) const;
1553 inline boolean is_subset(const isl::basic_map &bmap2) const;
1554 inline boolean is_subset(const isl::map &map2) const;
1555 inline boolean is_subset(const isl::union_map &umap2) const;
1556 inline boolean isa_map() const;
1557 inline isl::map lex_ge_at(const isl::multi_pw_aff &mpa) const;
1558 inline isl::map lex_gt_at(const isl::multi_pw_aff &mpa) const;
1559 inline isl::map lex_le_at(const isl::multi_pw_aff &mpa) const;
1560 inline isl::map lex_lt_at(const isl::multi_pw_aff &mpa) const;
1561 inline isl::map lexmax() const;
1563 inline isl::map lexmin() const;
1565 inline isl::map lower_bound(const isl::multi_pw_aff &lower) const;
1566 inline isl::map lower_bound_si(isl::dim type, unsigned int pos, int value) const;
1567 inline isl::map_list map_list() const;
1570 inline isl::map move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const;
1571 inline class size n_basic_map() const;
1572 inline isl::map order_lt(isl::dim type1, int pos1, isl::dim type2, int pos2) const;
1573 inline isl::set params() const;
1574 inline isl::val plain_get_val_if_fixed(isl::dim type, unsigned int pos) const;
1576 inline isl::map preimage_domain(const isl::multi_aff &ma) const;
1577 inline isl::map preimage_domain(const isl::multi_pw_aff &mpa) const;
1578 inline isl::map preimage_domain(const isl::pw_multi_aff &pma) const;
1580 inline isl::map preimage_range(const isl::multi_aff &ma) const;
1581 inline isl::map preimage_range(const isl::pw_multi_aff &pma) const;
1583 inline isl::map product(const isl::map &map2) const;
1584 inline isl::union_map product(const isl::union_map &umap2) const;
1585 inline isl::map project_out(isl::dim type, unsigned int first, unsigned int n) const;
1587 inline isl::set range() const;
1588 inline isl::map range_factor_domain() const;
1589 inline isl::map range_factor_range() const;
1591 inline isl::map range_map() const;
1592 inline isl::map range_product(const isl::map &map2) const;
1593 inline isl::union_map range_product(const isl::union_map &umap2) const;
1594 inline isl::map range_reverse() const;
1596 inline class size range_tuple_dim() const;
1597 inline isl::id range_tuple_id() const;
1598 inline isl::basic_map reverse() const;
1599 inline isl::basic_map sample() const;
1600 inline isl::map set_domain_tuple(const isl::id &id) const;
1601 inline isl::map set_domain_tuple(const std::string &id) const;
1602 inline isl::map set_range_tuple(const isl::id &id) const;
1603 inline isl::map set_range_tuple(const std::string &id) const;
1604 inline isl::map set_tuple_id(isl::dim type, const isl::id &id) const;
1605 inline isl::map set_tuple_id(isl::dim type, const std::string &id) const;
1606 inline isl::space space() const;
1607 inline isl::map subtract(const isl::map &map2) const;
1608 inline isl::union_map subtract(const isl::union_map &umap2) const;
1609 inline isl::union_map subtract_domain(const isl::union_set &dom) const;
1610 inline isl::union_map subtract_range(const isl::union_set &dom) const;
1611 inline isl::map sum(const isl::map &map2) const;
1612 inline isl::basic_map_list to_list() const;
1613 inline isl::union_map to_union_map() const;
1614 inline isl::id tuple_id(isl::dim type) const;
1615 inline isl::map uncurry() const;
1616 inline isl::map unite(isl::basic_map bmap2) const;
1617 inline isl::map unite(const isl::map &map2) const;
1618 inline isl::union_map unite(const isl::union_map &umap2) const;
1619 static inline isl::basic_map universe(isl::space space);
1621 inline isl::map upper_bound(const isl::multi_pw_aff &upper) const;
1622 inline isl::map upper_bound_si(isl::dim type, unsigned int pos, int value) const;
1623 inline isl::set wrap() const;
1624 inline isl::map zip() const;
1625};
1626
1627// declarations for isl::basic_map_list
1628inline basic_map_list manage(__isl_take isl_basic_map_list *ptr);
1629inline basic_map_list manage_copy(__isl_keep isl_basic_map_list *ptr);
1630
1632 friend inline basic_map_list manage(__isl_take isl_basic_map_list *ptr);
1633 friend inline basic_map_list manage_copy(__isl_keep isl_basic_map_list *ptr);
1634
1635protected:
1636 isl_basic_map_list *ptr = nullptr;
1637
1638 inline explicit basic_map_list(__isl_take isl_basic_map_list *ptr);
1639
1640public:
1641 inline /* implicit */ basic_map_list();
1642 inline /* implicit */ basic_map_list(const basic_map_list &obj);
1643 inline explicit basic_map_list(isl::ctx ctx, int n);
1644 inline explicit basic_map_list(isl::basic_map el);
1646 inline ~basic_map_list();
1647 inline __isl_give isl_basic_map_list *copy() const &;
1648 inline __isl_give isl_basic_map_list *copy() && = delete;
1649 inline __isl_keep isl_basic_map_list *get() const;
1650 inline __isl_give isl_basic_map_list *release();
1651 inline bool is_null() const;
1652 inline isl::ctx ctx() const;
1653
1654 inline isl::basic_map_list add(isl::basic_map el) const;
1655 inline isl::basic_map at(int index) const;
1656 inline isl::basic_map get_at(int index) const;
1657 inline isl::basic_map_list clear() const;
1658 inline isl::basic_map_list concat(isl::basic_map_list list2) const;
1659 inline isl::basic_map_list drop(unsigned int first, unsigned int n) const;
1660 inline stat foreach(const std::function<stat(isl::basic_map)> &fn) const;
1661 inline isl::basic_map_list insert(unsigned int pos, isl::basic_map el) const;
1662 inline class size size() const;
1663};
1664
1665// declarations for isl::basic_set
1668
1669class basic_set {
1672
1673protected:
1674 isl_basic_set *ptr = nullptr;
1675
1677
1678public:
1679 inline /* implicit */ basic_set();
1680 inline /* implicit */ basic_set(const basic_set &obj);
1681 inline /* implicit */ basic_set(isl::point pnt);
1682 inline explicit basic_set(isl::ctx ctx, const std::string &str);
1684 inline ~basic_set();
1685 inline __isl_give isl_basic_set *copy() const &;
1686 inline __isl_give isl_basic_set *copy() && = delete;
1689 inline bool is_null() const;
1690 inline isl::ctx ctx() const;
1691
1692 inline isl::set add_constraint(const isl::constraint &constraint) const;
1693 inline isl::set add_dims(isl::dim type, unsigned int n) const;
1694 inline isl::basic_set affine_hull() const;
1695 inline isl::set align_params(const isl::space &model) const;
1696 inline isl::basic_set apply(isl::basic_map bmap) const;
1697 inline isl::set apply(const isl::map &map) const;
1698 inline isl::union_set apply(const isl::union_map &umap) const;
1700 inline isl::set as_set() const;
1701 inline isl::basic_set_list basic_set_list() const;
1702 inline isl::set bind(const isl::multi_id &tuple) const;
1703 inline isl::set coalesce() const;
1704 inline isl::set complement() const;
1705 inline isl::union_set compute_divs() const;
1706 inline boolean contains(const isl::space &space) const;
1707 inline isl::basic_set convex_hull() const;
1709 inline class size dim(isl::dim type) const;
1710 inline boolean dim_has_any_lower_bound(isl::dim type, unsigned int pos) const;
1711 inline isl::id dim_id(isl::dim type, unsigned int pos) const;
1712 inline isl::pw_aff dim_max(int pos) const;
1713 inline isl::val dim_max_val(int pos) const;
1714 inline isl::pw_aff dim_min(int pos) const;
1715 inline isl::val dim_min_val(int pos) const;
1716 inline std::string dim_name(isl::dim type, unsigned int pos) const;
1717 inline isl::aff div(int pos) const;
1718 inline isl::aff get_div(int pos) const;
1719 inline isl::set drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const;
1720 inline isl::set eliminate(isl::dim type, unsigned int first, unsigned int n) const;
1721 inline boolean every_set(const std::function<boolean(isl::set)> &test) const;
1722 inline isl::set extract_set(const isl::space &space) const;
1723 inline int find_dim_by_id(isl::dim type, const isl::id &id) const;
1724 inline int find_dim_by_id(isl::dim type, const std::string &id) const;
1725 inline isl::basic_set fix_si(isl::dim type, unsigned int pos, int value) const;
1726 inline isl::basic_set fix_val(isl::dim type, unsigned int pos, isl::val v) const;
1727 inline isl::basic_set fix_val(isl::dim type, unsigned int pos, long v) const;
1728 inline isl::basic_set flatten() const;
1729 inline stat foreach_basic_set(const std::function<stat(isl::basic_set)> &fn) const;
1730 inline stat foreach_point(const std::function<stat(isl::point)> &fn) const;
1731 inline stat foreach_set(const std::function<stat(isl::set)> &fn) const;
1733 inline isl::set gist(const isl::set &context) const;
1734 inline isl::union_set gist(const isl::union_set &context) const;
1735 inline isl::basic_set gist(const isl::point &context) const;
1736 inline isl::set gist_params(const isl::set &context) const;
1737 inline boolean has_equal_space(const isl::set &set2) const;
1738 inline isl::map identity() const;
1741 inline isl::set insert_dims(isl::dim type, unsigned int pos, unsigned int n) const;
1742 inline isl::map insert_domain(const isl::space &domain) const;
1743 inline isl::basic_set intersect(isl::basic_set bset2) const;
1744 inline isl::set intersect(const isl::set &set2) const;
1745 inline isl::union_set intersect(const isl::union_set &uset2) const;
1746 inline isl::basic_set intersect(const isl::point &bset2) const;
1748 inline isl::set intersect_params(const isl::set &params) const;
1749 inline isl::basic_set intersect_params(const isl::point &bset2) const;
1750 inline boolean involves_dims(isl::dim type, unsigned int first, unsigned int n) const;
1751 inline boolean involves_locals() const;
1752 inline boolean is_bounded() const;
1753 inline boolean is_disjoint(const isl::set &set2) const;
1754 inline boolean is_disjoint(const isl::union_set &uset2) const;
1755 inline boolean is_empty() const;
1756 inline boolean is_equal(const isl::basic_set &bset2) const;
1757 inline boolean is_equal(const isl::set &set2) const;
1758 inline boolean is_equal(const isl::union_set &uset2) const;
1759 inline boolean is_equal(const isl::point &bset2) const;
1760 inline boolean is_params() const;
1761 inline boolean is_singleton() const;
1762 inline boolean is_strict_subset(const isl::set &set2) const;
1763 inline boolean is_strict_subset(const isl::union_set &uset2) const;
1764 inline boolean is_subset(const isl::basic_set &bset2) const;
1765 inline boolean is_subset(const isl::set &set2) const;
1766 inline boolean is_subset(const isl::union_set &uset2) const;
1767 inline boolean is_subset(const isl::point &bset2) const;
1768 inline boolean is_wrapping() const;
1769 inline boolean isa_set() const;
1770 inline isl::set lexmax() const;
1772 inline isl::set lexmin() const;
1774 inline isl::set lower_bound(const isl::multi_pw_aff &lower) const;
1775 inline isl::set lower_bound(const isl::multi_val &lower) const;
1776 inline isl::set lower_bound_si(isl::dim type, unsigned int pos, int value) const;
1777 inline isl::set lower_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const;
1778 inline isl::set lower_bound_val(isl::dim type, unsigned int pos, long value) const;
1780 inline isl::val max_val(const isl::aff &obj) const;
1782 inline isl::val min_val(const isl::aff &obj) const;
1783 inline class size n_basic_set() const;
1784 inline isl::basic_set params() const;
1785 inline isl::val plain_get_val_if_fixed(isl::dim type, unsigned int pos) const;
1788 inline isl::set preimage(const isl::multi_aff &ma) const;
1789 inline isl::set preimage(const isl::multi_pw_aff &mpa) const;
1790 inline isl::set preimage(const isl::pw_multi_aff &pma) const;
1791 inline isl::union_set preimage(const isl::union_pw_multi_aff &upma) const;
1792 inline isl::set product(const isl::set &set2) const;
1793 inline isl::basic_set project_out(isl::dim type, unsigned int first, unsigned int n) const;
1795 inline isl::set project_out_param(const isl::id &id) const;
1796 inline isl::set project_out_param(const std::string &id) const;
1797 inline isl::set project_out_param(const isl::id_list &list) const;
1799 inline isl::set remove_dims(isl::dim type, unsigned int first, unsigned int n) const;
1800 inline isl::set remove_divs() const;
1801 inline isl::set remove_redundancies() const;
1802 inline isl::set reset_tuple_id() const;
1803 inline isl::basic_set sample() const;
1804 inline isl::point sample_point() const;
1805 inline isl::set set_dim_id(isl::dim type, unsigned int pos, const isl::id &id) const;
1806 inline isl::set set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const;
1807 inline isl::set_list set_list() const;
1808 inline isl::set set_tuple_id(const isl::id &id) const;
1809 inline isl::set set_tuple_id(const std::string &id) const;
1811 inline isl::basic_set simple_hull() const;
1812 inline isl::space space() const;
1813 inline isl::space get_space() const;
1814 inline isl::val stride(int pos) const;
1815 inline isl::set subtract(const isl::set &set2) const;
1816 inline isl::union_set subtract(const isl::union_set &uset2) const;
1817 inline isl::basic_set_list to_list() const;
1818 inline isl::set to_set() const;
1819 inline isl::union_set to_union_set() const;
1820 inline isl::map translation() const;
1821 inline class size tuple_dim() const;
1822 inline isl::id tuple_id() const;
1823 inline std::string tuple_name() const;
1824 inline isl::set unbind_params(const isl::multi_id &tuple) const;
1826 inline isl::set unite(isl::basic_set bset2) const;
1827 inline isl::set unite(const isl::set &set2) const;
1828 inline isl::union_set unite(const isl::union_set &uset2) const;
1829 inline isl::set unite(const isl::point &bset2) const;
1830 static inline isl::basic_set universe(isl::space space);
1832 inline isl::map unwrap() const;
1833 inline isl::set upper_bound(const isl::multi_pw_aff &upper) const;
1834 inline isl::set upper_bound(const isl::multi_val &upper) const;
1835 inline isl::set upper_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const;
1836 inline isl::set upper_bound_val(isl::dim type, unsigned int pos, long value) const;
1837};
1838
1839// declarations for isl::basic_set_list
1842
1846
1847protected:
1849
1851
1852public:
1853 inline /* implicit */ basic_set_list();
1854 inline /* implicit */ basic_set_list(const basic_set_list &obj);
1855 inline explicit basic_set_list(isl::ctx ctx, int n);
1856 inline explicit basic_set_list(isl::basic_set el);
1858 inline ~basic_set_list();
1859 inline __isl_give isl_basic_set_list *copy() const &;
1860 inline __isl_give isl_basic_set_list *copy() && = delete;
1861 inline __isl_keep isl_basic_set_list *get() const;
1863 inline bool is_null() const;
1864 inline isl::ctx ctx() const;
1865
1866 inline isl::basic_set_list add(isl::basic_set el) const;
1867 inline isl::basic_set at(int index) const;
1868 inline isl::basic_set get_at(int index) const;
1869 inline isl::basic_set_list clear() const;
1870 inline isl::basic_set_list concat(isl::basic_set_list list2) const;
1871 inline isl::basic_set_list drop(unsigned int first, unsigned int n) const;
1872 inline stat foreach(const std::function<stat(isl::basic_set)> &fn) const;
1873 inline isl::basic_set_list insert(unsigned int pos, isl::basic_set el) const;
1874 inline class size size() const;
1875};
1876
1877// declarations for isl::constraint
1880
1884
1885protected:
1887
1888 inline explicit constraint(__isl_take isl_constraint *ptr);
1889
1890public:
1891 inline /* implicit */ constraint();
1892 inline /* implicit */ constraint(const constraint &obj);
1894 inline ~constraint();
1895 inline __isl_give isl_constraint *copy() const &;
1896 inline __isl_give isl_constraint *copy() && = delete;
1897 inline __isl_keep isl_constraint *get() const;
1899 inline bool is_null() const;
1900 inline isl::ctx ctx() const;
1901
1902 static inline isl::constraint alloc_equality(isl::local_space ls);
1903 static inline isl::constraint alloc_inequality(isl::local_space ls);
1904 inline isl::constraint set_coefficient_si(isl::dim type, int pos, int v) const;
1905 inline isl::constraint set_constant_si(int v) const;
1906 inline isl::constraint set_constant_val(isl::val v) const;
1907 inline isl::constraint set_constant_val(long v) const;
1908};
1909
1910// declarations for isl::fixed_box
1913
1914class fixed_box {
1917
1918protected:
1919 isl_fixed_box *ptr = nullptr;
1920
1922
1923public:
1924 inline /* implicit */ fixed_box();
1925 inline /* implicit */ fixed_box(const fixed_box &obj);
1927 inline ~fixed_box();
1928 inline __isl_give isl_fixed_box *copy() const &;
1929 inline __isl_give isl_fixed_box *copy() && = delete;
1932 inline bool is_null() const;
1933 inline isl::ctx ctx() const;
1934
1935 inline boolean is_valid() const;
1936 inline isl::multi_aff offset() const;
1937 inline isl::multi_aff get_offset() const;
1938 inline isl::multi_val size() const;
1939 inline isl::multi_val get_size() const;
1940 inline isl::space space() const;
1941 inline isl::space get_space() const;
1942};
1943
1944// declarations for isl::id
1945inline id manage(__isl_take isl_id *ptr);
1946inline id manage_copy(__isl_keep isl_id *ptr);
1947
1948class id {
1949 friend inline id manage(__isl_take isl_id *ptr);
1950 friend inline id manage_copy(__isl_keep isl_id *ptr);
1951
1952protected:
1953 isl_id *ptr = nullptr;
1954
1955 inline explicit id(__isl_take isl_id *ptr);
1956
1957public:
1958 inline /* implicit */ id();
1959 inline /* implicit */ id(const id &obj);
1960 inline explicit id(isl::ctx ctx, const std::string &str);
1961 inline id &operator=(id obj);
1962 inline ~id();
1963 inline __isl_give isl_id *copy() const &;
1964 inline __isl_give isl_id *copy() && = delete;
1965 inline __isl_keep isl_id *get() const;
1967 inline bool is_null() const;
1968 inline isl::ctx ctx() const;
1969
1970 static inline isl::id alloc(isl::ctx ctx, const std::string &name, void * user);
1971 inline std::string name() const;
1972 inline std::string get_name() const;
1973 inline isl::id_list to_list() const;
1974 inline void * user() const;
1975 inline void * get_user() const;
1976};
1977
1978// declarations for isl::id_list
1979inline id_list manage(__isl_take isl_id_list *ptr);
1980inline id_list manage_copy(__isl_keep isl_id_list *ptr);
1981
1982class id_list {
1983 friend inline id_list manage(__isl_take isl_id_list *ptr);
1984 friend inline id_list manage_copy(__isl_keep isl_id_list *ptr);
1985
1986protected:
1987 isl_id_list *ptr = nullptr;
1988
1989 inline explicit id_list(__isl_take isl_id_list *ptr);
1990
1991public:
1992 inline /* implicit */ id_list();
1993 inline /* implicit */ id_list(const id_list &obj);
1994 inline explicit id_list(isl::ctx ctx, int n);
1995 inline explicit id_list(isl::id el);
1996 inline explicit id_list(isl::ctx ctx, const std::string &str);
1998 inline ~id_list();
1999 inline __isl_give isl_id_list *copy() const &;
2000 inline __isl_give isl_id_list *copy() && = delete;
2001 inline __isl_keep isl_id_list *get() const;
2002 inline __isl_give isl_id_list *release();
2003 inline bool is_null() const;
2004 inline isl::ctx ctx() const;
2005
2006 inline isl::id_list add(isl::id el) const;
2007 inline isl::id_list add(const std::string &el) const;
2008 inline isl::id at(int index) const;
2009 inline isl::id get_at(int index) const;
2010 inline isl::id_list clear() const;
2011 inline isl::id_list concat(isl::id_list list2) const;
2012 inline isl::id_list drop(unsigned int first, unsigned int n) const;
2013 inline stat foreach(const std::function<stat(isl::id)> &fn) const;
2014 inline isl::id_list insert(unsigned int pos, isl::id el) const;
2015 inline isl::id_list insert(unsigned int pos, const std::string &el) const;
2016 inline class size size() const;
2017};
2018
2019// declarations for isl::id_to_ast_expr
2020inline id_to_ast_expr manage(__isl_take isl_id_to_ast_expr *ptr);
2021inline id_to_ast_expr manage_copy(__isl_keep isl_id_to_ast_expr *ptr);
2022
2023class id_to_ast_expr {
2024 friend inline id_to_ast_expr manage(__isl_take isl_id_to_ast_expr *ptr);
2025 friend inline id_to_ast_expr manage_copy(__isl_keep isl_id_to_ast_expr *ptr);
2026
2027protected:
2028 isl_id_to_ast_expr *ptr = nullptr;
2029
2030 inline explicit id_to_ast_expr(__isl_take isl_id_to_ast_expr *ptr);
2031
2032public:
2033 inline /* implicit */ id_to_ast_expr();
2034 inline /* implicit */ id_to_ast_expr(const id_to_ast_expr &obj);
2037 inline __isl_give isl_id_to_ast_expr *copy() const &;
2038 inline __isl_give isl_id_to_ast_expr *copy() && = delete;
2039 inline __isl_keep isl_id_to_ast_expr *get() const;
2040 inline __isl_give isl_id_to_ast_expr *release();
2041 inline bool is_null() const;
2042 inline isl::ctx ctx() const;
2043
2044 static inline isl::id_to_ast_expr alloc(isl::ctx ctx, int min_size);
2045 inline isl::id_to_ast_expr set(isl::id key, isl::ast_expr val) const;
2046 inline isl::id_to_ast_expr set(const std::string &key, const isl::ast_expr &val) const;
2047};
2048
2049// declarations for isl::local_space
2052
2056
2057protected:
2059
2060 inline explicit local_space(__isl_take isl_local_space *ptr);
2061
2062public:
2063 inline /* implicit */ local_space();
2064 inline /* implicit */ local_space(const local_space &obj);
2065 inline explicit local_space(isl::space space);
2067 inline ~local_space();
2068 inline __isl_give isl_local_space *copy() const &;
2069 inline __isl_give isl_local_space *copy() && = delete;
2070 inline __isl_keep isl_local_space *get() const;
2072 inline bool is_null() const;
2073 inline isl::ctx ctx() const;
2074
2075};
2076
2077// declarations for isl::map
2080
2081class map {
2082 friend inline map manage(__isl_take isl_map *ptr);
2083 friend inline map manage_copy(__isl_keep isl_map *ptr);
2084
2085protected:
2086 isl_map *ptr = nullptr;
2087
2088 inline explicit map(__isl_take isl_map *ptr);
2089
2090public:
2091 inline /* implicit */ map();
2092 inline /* implicit */ map(const map &obj);
2093 inline /* implicit */ map(isl::basic_map bmap);
2094 inline explicit map(isl::ctx ctx, const std::string &str);
2096 inline ~map();
2097 inline __isl_give isl_map *copy() const &;
2098 inline __isl_give isl_map *copy() && = delete;
2099 inline __isl_keep isl_map *get() const;
2101 inline bool is_null() const;
2102 inline isl::ctx ctx() const;
2103
2105 inline isl::map add_dims(isl::dim type, unsigned int n) const;
2106 inline isl::basic_map affine_hull() const;
2107 inline isl::map align_params(isl::space model) const;
2108 inline isl::map apply_domain(isl::map map2) const;
2109 inline isl::union_map apply_domain(const isl::union_map &umap2) const;
2110 inline isl::map apply_domain(const isl::basic_map &map2) const;
2111 inline isl::map apply_range(isl::map map2) const;
2112 inline isl::union_map apply_range(const isl::union_map &umap2) const;
2113 inline isl::map apply_range(const isl::basic_map &map2) const;
2114 inline isl::map as_map() const;
2118 inline isl::basic_map_list basic_map_list() const;
2119 inline isl::basic_map_list get_basic_map_list() const;
2122 inline boolean can_curry() const;
2123 inline isl::map coalesce() const;
2124 inline isl::map complement() const;
2125 inline isl::union_map compute_divs() const;
2126 inline isl::map curry() const;
2127 inline isl::set deltas() const;
2128 inline isl::map detect_equalities() const;
2129 inline class size dim(isl::dim type) const;
2130 inline isl::pw_aff dim_max(int pos) const;
2131 inline isl::pw_aff dim_min(int pos) const;
2132 inline isl::set domain() const;
2134 inline isl::map domain_factor_range() const;
2135 inline isl::map domain_map() const;
2138 inline isl::union_map domain_product(const isl::union_map &umap2) const;
2139 inline isl::map domain_product(const isl::basic_map &map2) const;
2140 inline class size domain_tuple_dim() const;
2141 inline isl::id domain_tuple_id() const;
2142 inline isl::id get_domain_tuple_id() const;
2143 static inline isl::map empty(isl::space space);
2144 inline isl::map eq_at(isl::multi_pw_aff mpa) const;
2146 inline isl::map eq_at(const isl::aff &mpa) const;
2147 inline isl::map eq_at(const isl::multi_aff &mpa) const;
2148 inline isl::map eq_at(const isl::pw_aff &mpa) const;
2149 inline isl::map eq_at(const isl::pw_multi_aff &mpa) const;
2150 inline isl::map equate(isl::dim type1, int pos1, isl::dim type2, int pos2) const;
2151 inline boolean every_map(const std::function<boolean(isl::map)> &test) const;
2152 inline isl::map extract_map(const isl::space &space) const;
2153 inline isl::map factor_domain() const;
2154 inline isl::map factor_range() const;
2155 inline isl::map fix_si(isl::dim type, unsigned int pos, int value) const;
2156 inline isl::union_map fixed_power(const isl::val &exp) const;
2157 inline isl::union_map fixed_power(long exp) const;
2158 inline isl::map flat_range_product(isl::map map2) const;
2159 inline isl::union_map flat_range_product(const isl::union_map &umap2) const;
2160 inline isl::map flat_range_product(const isl::basic_map &map2) const;
2161 inline isl::map flatten() const;
2162 inline isl::map flatten_domain() const;
2163 inline isl::map flatten_range() const;
2164 inline isl::map floordiv_val(isl::val d) const;
2165 inline isl::map floordiv_val(long d) const;
2166 inline stat foreach_basic_map(const std::function<stat(isl::basic_map)> &fn) const;
2167 inline stat foreach_map(const std::function<stat(isl::map)> &fn) const;
2168 static inline isl::map from_aff(isl::aff aff);
2169 static inline isl::map from_domain(isl::set set);
2170 static inline isl::map from_domain_and_range(isl::set domain, isl::set range);
2171 static inline isl::map from_multi_aff(isl::multi_aff maff);
2172 static inline isl::map from_pw_aff(isl::pw_aff pwaff);
2173 static inline isl::map from_range(isl::set set);
2174 static inline isl::map from_union_map(isl::union_map umap);
2175 inline isl::map gist(isl::map context) const;
2176 inline isl::union_map gist(const isl::union_map &context) const;
2177 inline isl::map gist(const isl::basic_map &context) const;
2179 inline isl::union_map gist_domain(const isl::union_set &uset) const;
2180 inline isl::map gist_domain(const isl::basic_set &context) const;
2181 inline isl::map gist_domain(const isl::point &context) const;
2183 inline isl::union_map gist_range(const isl::union_set &uset) const;
2184 inline boolean has_domain_tuple_id() const;
2185 inline boolean has_equal_space(const isl::map &map2) const;
2186 inline boolean has_range_tuple_id() const;
2187 inline boolean has_tuple_id(isl::dim type) const;
2188 inline boolean has_tuple_name(isl::dim type) const;
2189 static inline isl::map identity(isl::space space);
2190 inline isl::map intersect(isl::map map2) const;
2191 inline isl::union_map intersect(const isl::union_map &umap2) const;
2192 inline isl::map intersect(const isl::basic_map &map2) const;
2195 inline isl::union_map intersect_domain(const isl::union_set &uset) const;
2196 inline isl::map intersect_domain(const isl::basic_set &set) const;
2197 inline isl::map intersect_domain(const isl::point &set) const;
2200 inline isl::map intersect_domain_factor_domain(const isl::basic_map &factor) const;
2203 inline isl::map intersect_domain_factor_range(const isl::basic_map &factor) const;
2206 inline isl::union_map intersect_range(const isl::space &space) const;
2207 inline isl::union_map intersect_range(const isl::union_set &uset) const;
2208 inline isl::map intersect_range(const isl::basic_set &set) const;
2209 inline isl::map intersect_range(const isl::point &set) const;
2212 inline isl::map intersect_range_factor_domain(const isl::basic_map &factor) const;
2215 inline isl::map intersect_range_factor_range(const isl::basic_map &factor) const;
2216 inline boolean involves_dims(isl::dim type, unsigned int first, unsigned int n) const;
2217 inline boolean is_bijective() const;
2218 inline boolean is_disjoint(const isl::map &map2) const;
2219 inline boolean is_disjoint(const isl::union_map &umap2) const;
2220 inline boolean is_disjoint(const isl::basic_map &map2) const;
2221 inline boolean is_empty() const;
2222 inline boolean is_equal(const isl::map &map2) const;
2223 inline boolean is_equal(const isl::union_map &umap2) const;
2224 inline boolean is_equal(const isl::basic_map &map2) const;
2225 inline boolean is_injective() const;
2226 inline boolean is_single_valued() const;
2227 inline boolean is_strict_subset(const isl::map &map2) const;
2228 inline boolean is_strict_subset(const isl::union_map &umap2) const;
2229 inline boolean is_strict_subset(const isl::basic_map &map2) const;
2230 inline boolean is_subset(const isl::map &map2) const;
2231 inline boolean is_subset(const isl::union_map &umap2) const;
2232 inline boolean is_subset(const isl::basic_map &map2) const;
2233 inline boolean isa_map() const;
2234 static inline isl::map lex_ge(isl::space set_space);
2235 inline isl::map lex_ge_at(isl::multi_pw_aff mpa) const;
2236 static inline isl::map lex_gt(isl::space set_space);
2237 inline isl::map lex_gt_at(isl::multi_pw_aff mpa) const;
2238 static inline isl::map lex_le(isl::space set_space);
2239 inline isl::map lex_le_at(isl::multi_pw_aff mpa) const;
2240 static inline isl::map lex_lt(isl::space set_space);
2241 inline isl::map lex_lt_at(isl::multi_pw_aff mpa) const;
2242 inline isl::map lexmax() const;
2244 inline isl::map lexmin() const;
2246 inline isl::map lower_bound(isl::multi_pw_aff lower) const;
2247 inline isl::map lower_bound_si(isl::dim type, unsigned int pos, int value) const;
2248 inline isl::map_list map_list() const;
2251 inline isl::map move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const;
2252 inline class size n_basic_map() const;
2253 inline isl::map order_lt(isl::dim type1, int pos1, isl::dim type2, int pos2) const;
2254 inline isl::set params() const;
2263 inline isl::map product(isl::map map2) const;
2264 inline isl::union_map product(const isl::union_map &umap2) const;
2265 inline isl::map product(const isl::basic_map &map2) const;
2266 inline isl::map project_out(isl::dim type, unsigned int first, unsigned int n) const;
2268 inline isl::set range() const;
2269 inline isl::map range_factor_domain() const;
2270 inline isl::map range_factor_range() const;
2273 inline isl::map range_map() const;
2274 inline isl::map range_product(isl::map map2) const;
2275 inline isl::union_map range_product(const isl::union_map &umap2) const;
2276 inline isl::map range_product(const isl::basic_map &map2) const;
2277 inline isl::map range_reverse() const;
2280 inline class size range_tuple_dim() const;
2281 inline isl::id range_tuple_id() const;
2282 inline isl::id get_range_tuple_id() const;
2283 inline isl::map reverse() const;
2284 inline isl::basic_map sample() const;
2285 inline isl::map set_domain_tuple(isl::id id) const;
2286 inline isl::map set_domain_tuple(const std::string &id) const;
2287 inline isl::map set_range_tuple(isl::id id) const;
2288 inline isl::map set_range_tuple(const std::string &id) const;
2289 inline isl::map set_tuple_id(isl::dim type, isl::id id) const;
2290 inline isl::map set_tuple_id(isl::dim type, const std::string &id) const;
2291 inline isl::space space() const;
2292 inline isl::space get_space() const;
2293 inline isl::map subtract(isl::map map2) const;
2294 inline isl::union_map subtract(const isl::union_map &umap2) const;
2295 inline isl::map subtract(const isl::basic_map &map2) const;
2296 inline isl::union_map subtract_domain(const isl::union_set &dom) const;
2297 inline isl::union_map subtract_range(const isl::union_set &dom) const;
2298 inline isl::map sum(isl::map map2) const;
2299 inline isl::map_list to_list() const;
2300 inline isl::union_map to_union_map() const;
2301 inline isl::id tuple_id(isl::dim type) const;
2302 inline isl::id get_tuple_id(isl::dim type) const;
2303 inline isl::map uncurry() const;
2304 inline isl::map unite(isl::map map2) const;
2305 inline isl::union_map unite(const isl::union_map &umap2) const;
2306 inline isl::map unite(const isl::basic_map &map2) const;
2307 static inline isl::map universe(isl::space space);
2309 inline isl::map upper_bound(isl::multi_pw_aff upper) const;
2310 inline isl::map upper_bound_si(isl::dim type, unsigned int pos, int value) const;
2311 inline isl::set wrap() const;
2312 inline isl::map zip() const;
2313};
2314
2315// declarations for isl::map_list
2316inline map_list manage(__isl_take isl_map_list *ptr);
2317inline map_list manage_copy(__isl_keep isl_map_list *ptr);
2318
2319class map_list {
2320 friend inline map_list manage(__isl_take isl_map_list *ptr);
2321 friend inline map_list manage_copy(__isl_keep isl_map_list *ptr);
2322
2323protected:
2324 isl_map_list *ptr = nullptr;
2325
2326 inline explicit map_list(__isl_take isl_map_list *ptr);
2327
2328public:
2329 inline /* implicit */ map_list();
2330 inline /* implicit */ map_list(const map_list &obj);
2331 inline explicit map_list(isl::ctx ctx, int n);
2332 inline explicit map_list(isl::map el);
2333 inline explicit map_list(isl::ctx ctx, const std::string &str);
2335 inline ~map_list();
2336 inline __isl_give isl_map_list *copy() const &;
2337 inline __isl_give isl_map_list *copy() && = delete;
2338 inline __isl_keep isl_map_list *get() const;
2339 inline __isl_give isl_map_list *release();
2340 inline bool is_null() const;
2341 inline isl::ctx ctx() const;
2342
2343 inline isl::map_list add(isl::map el) const;
2344 inline isl::map at(int index) const;
2345 inline isl::map get_at(int index) const;
2346 inline isl::map_list clear() const;
2347 inline isl::map_list concat(isl::map_list list2) const;
2348 inline isl::map_list drop(unsigned int first, unsigned int n) const;
2349 inline stat foreach(const std::function<stat(isl::map)> &fn) const;
2350 inline isl::map_list insert(unsigned int pos, isl::map el) const;
2351 inline class size size() const;
2352};
2353
2354// declarations for isl::multi_aff
2357
2358class multi_aff {
2361
2362protected:
2363 isl_multi_aff *ptr = nullptr;
2364
2366
2367public:
2368 inline /* implicit */ multi_aff();
2369 inline /* implicit */ multi_aff(const multi_aff &obj);
2370 inline /* implicit */ multi_aff(isl::aff aff);
2372 inline explicit multi_aff(isl::ctx ctx, const std::string &str);
2374 inline ~multi_aff();
2375 inline __isl_give isl_multi_aff *copy() const &;
2376 inline __isl_give isl_multi_aff *copy() && = delete;
2379 inline bool is_null() const;
2380 inline isl::ctx ctx() const;
2381
2382 inline isl::multi_aff add(isl::multi_aff multi2) const;
2383 inline isl::multi_pw_aff add(const isl::multi_pw_aff &multi2) const;
2384 inline isl::multi_union_pw_aff add(const isl::multi_union_pw_aff &multi2) const;
2385 inline isl::pw_multi_aff add(const isl::pw_multi_aff &pma2) const;
2386 inline isl::union_pw_multi_aff add(const isl::union_pw_multi_aff &upma2) const;
2387 inline isl::multi_aff add(const isl::aff &multi2) const;
2389 inline isl::multi_aff add_constant(isl::val v) const;
2390 inline isl::multi_aff add_constant(long v) const;
2392 inline isl::union_pw_multi_aff apply(const isl::union_pw_multi_aff &upma2) const;
2393 inline isl::map as_map() const;
2394 inline isl::multi_aff as_multi_aff() const;
2397 inline isl::set as_set() const;
2398 inline isl::union_map as_union_map() const;
2399 inline isl::aff at(int pos) const;
2400 inline isl::aff get_at(int pos) const;
2404 inline isl::pw_multi_aff coalesce() const;
2407 inline class size dim(isl::dim type) const;
2408 inline isl::set domain() const;
2410 inline isl::pw_multi_aff drop_dims(isl::dim type, unsigned int first, unsigned int n) const;
2413 inline isl::multi_pw_aff flat_range_product(const isl::multi_pw_aff &multi2) const;
2417 inline isl::multi_aff flat_range_product(const isl::aff &multi2) const;
2418 inline isl::multi_aff floor() const;
2419 inline stat foreach_piece(const std::function<stat(isl::set, isl::multi_aff)> &fn) const;
2420 inline isl::multi_aff gist(isl::set context) const;
2422 inline isl::multi_aff gist(const isl::basic_set &context) const;
2423 inline isl::multi_aff gist(const isl::point &context) const;
2424 inline boolean has_range_tuple_id() const;
2425 static inline isl::multi_aff identity(isl::space space);
2426 inline isl::multi_aff identity() const;
2429 inline isl::pw_multi_aff intersect_domain(const isl::set &set) const;
2434 inline isl::pw_multi_aff intersect_params(const isl::set &set) const;
2435 inline boolean involves_locals() const;
2436 inline boolean involves_nan() const;
2437 inline boolean involves_param(const isl::id &id) const;
2438 inline boolean involves_param(const std::string &id) const;
2439 inline boolean involves_param(const isl::id_list &list) const;
2440 inline boolean isa_multi_aff() const;
2441 inline boolean isa_pw_multi_aff() const;
2442 inline isl::aff_list list() const;
2443 inline isl::aff_list get_list() const;
2444 inline isl::multi_pw_aff max(const isl::multi_pw_aff &multi2) const;
2445 inline isl::multi_val max_multi_val() const;
2446 inline isl::multi_pw_aff min(const isl::multi_pw_aff &multi2) const;
2447 inline isl::multi_val min_multi_val() const;
2449 inline class size n_piece() const;
2450 inline isl::multi_aff neg() const;
2451 inline boolean plain_is_empty() const;
2452 inline boolean plain_is_equal(const isl::multi_aff &multi2) const;
2453 inline boolean plain_is_equal(const isl::multi_pw_aff &multi2) const;
2454 inline boolean plain_is_equal(const isl::multi_union_pw_aff &multi2) const;
2455 inline boolean plain_is_equal(const isl::aff &multi2) const;
2458 inline isl::multi_aff product(isl::multi_aff multi2) const;
2459 inline isl::multi_pw_aff product(const isl::multi_pw_aff &multi2) const;
2460 inline isl::pw_multi_aff product(const isl::pw_multi_aff &pma2) const;
2461 inline isl::multi_aff product(const isl::aff &multi2) const;
2462 inline isl::multi_aff pullback(isl::multi_aff ma2) const;
2463 inline isl::multi_pw_aff pullback(const isl::multi_pw_aff &mpa2) const;
2464 inline isl::pw_multi_aff pullback(const isl::pw_multi_aff &pma2) const;
2466 inline isl::multi_aff pullback(const isl::aff &ma2) const;
2471 inline isl::multi_aff range_product(isl::multi_aff multi2) const;
2472 inline isl::multi_pw_aff range_product(const isl::multi_pw_aff &multi2) const;
2474 inline isl::pw_multi_aff range_product(const isl::pw_multi_aff &pma2) const;
2476 inline isl::multi_aff range_product(const isl::aff &multi2) const;
2477 inline isl::id range_tuple_id() const;
2478 inline isl::id get_range_tuple_id() const;
2480 inline isl::multi_aff reset_tuple_id(isl::dim type) const;
2481 inline isl::multi_aff scale(isl::multi_val mv) const;
2482 inline isl::multi_aff scale(isl::val v) const;
2483 inline isl::multi_aff scale(long v) const;
2485 inline isl::multi_aff scale_down(isl::val v) const;
2486 inline isl::multi_aff scale_down(long v) const;
2487 inline isl::multi_aff set_aff(int pos, isl::aff el) const;
2488 inline isl::multi_aff set_at(int pos, isl::aff el) const;
2489 inline isl::multi_pw_aff set_at(int pos, const isl::pw_aff &el) const;
2490 inline isl::multi_union_pw_aff set_at(int pos, const isl::union_pw_aff &el) const;
2491 inline isl::multi_pw_aff set_pw_aff(int pos, const isl::pw_aff &el) const;
2492 inline isl::pw_multi_aff set_pw_aff(unsigned int pos, const isl::pw_aff &pa) const;
2493 inline isl::multi_aff set_range_tuple(isl::id id) const;
2494 inline isl::multi_aff set_range_tuple(const std::string &id) const;
2495 inline isl::multi_union_pw_aff set_union_pw_aff(int pos, const isl::union_pw_aff &el) const;
2496 inline class size size() const;
2497 inline isl::space space() const;
2498 inline isl::space get_space() const;
2499 inline isl::multi_aff sub(isl::multi_aff multi2) const;
2500 inline isl::multi_pw_aff sub(const isl::multi_pw_aff &multi2) const;
2501 inline isl::multi_union_pw_aff sub(const isl::multi_union_pw_aff &multi2) const;
2502 inline isl::pw_multi_aff sub(const isl::pw_multi_aff &pma2) const;
2503 inline isl::union_pw_multi_aff sub(const isl::union_pw_multi_aff &upma2) const;
2504 inline isl::multi_aff sub(const isl::aff &multi2) const;
2505 inline isl::pw_multi_aff subtract_domain(const isl::set &set) const;
2513 inline isl::id tuple_id(isl::dim type) const;
2515 inline isl::multi_pw_aff union_add(const isl::multi_pw_aff &mpa2) const;
2517 inline isl::pw_multi_aff union_add(const isl::pw_multi_aff &pma2) const;
2519 static inline isl::multi_aff zero(isl::space space);
2520};
2521
2522// declarations for isl::multi_id
2525
2526class multi_id {
2527 friend inline multi_id manage(__isl_take isl_multi_id *ptr);
2529
2530protected:
2531 isl_multi_id *ptr = nullptr;
2532
2534
2535public:
2536 inline /* implicit */ multi_id();
2537 inline /* implicit */ multi_id(const multi_id &obj);
2539 inline explicit multi_id(isl::ctx ctx, const std::string &str);
2541 inline ~multi_id();
2542 inline __isl_give isl_multi_id *copy() const &;
2543 inline __isl_give isl_multi_id *copy() && = delete;
2544 inline __isl_keep isl_multi_id *get() const;
2546 inline bool is_null() const;
2547 inline isl::ctx ctx() const;
2548
2549 inline isl::id at(int pos) const;
2550 inline isl::id get_at(int pos) const;
2552 inline isl::id_list list() const;
2553 inline isl::id_list get_list() const;
2554 inline boolean plain_is_equal(const isl::multi_id &multi2) const;
2555 inline isl::multi_id range_product(isl::multi_id multi2) const;
2556 inline isl::multi_id set_at(int pos, isl::id el) const;
2557 inline isl::multi_id set_at(int pos, const std::string &el) const;
2558 inline isl::multi_id set_id(int pos, isl::id el) const;
2559 inline isl::multi_id set_id(int pos, const std::string &el) const;
2560 inline class size size() const;
2561 inline isl::space space() const;
2562 inline isl::space get_space() const;
2563};
2564
2565// declarations for isl::multi_pw_aff
2568
2569class multi_pw_aff {
2572
2573protected:
2574 isl_multi_pw_aff *ptr = nullptr;
2575
2577
2578public:
2579 inline /* implicit */ multi_pw_aff();
2580 inline /* implicit */ multi_pw_aff(const multi_pw_aff &obj);
2581 inline /* implicit */ multi_pw_aff(isl::aff aff);
2582 inline /* implicit */ multi_pw_aff(isl::multi_aff ma);
2583 inline /* implicit */ multi_pw_aff(isl::pw_aff pa);
2585 inline /* implicit */ multi_pw_aff(isl::pw_multi_aff pma);
2586 inline explicit multi_pw_aff(isl::ctx ctx, const std::string &str);
2590 inline __isl_give isl_multi_pw_aff *copy() && = delete;
2593 inline bool is_null() const;
2594 inline isl::ctx ctx() const;
2595
2596 inline isl::multi_pw_aff add(isl::multi_pw_aff multi2) const;
2597 inline isl::multi_union_pw_aff add(const isl::multi_union_pw_aff &multi2) const;
2598 inline isl::multi_pw_aff add(const isl::aff &multi2) const;
2599 inline isl::multi_pw_aff add(const isl::multi_aff &multi2) const;
2600 inline isl::multi_pw_aff add(const isl::pw_aff &multi2) const;
2601 inline isl::multi_pw_aff add(const isl::pw_multi_aff &multi2) const;
2604 inline isl::multi_pw_aff add_constant(long v) const;
2605 inline isl::map as_map() const;
2606 inline isl::multi_aff as_multi_aff() const;
2607 inline isl::set as_set() const;
2608 inline isl::pw_aff at(int pos) const;
2609 inline isl::pw_aff get_at(int pos) const;
2610 inline isl::set bind(isl::multi_id tuple) const;
2613 inline isl::multi_pw_aff coalesce() const;
2614 inline class size dim(isl::dim type) const;
2615 inline isl::set domain() const;
2618 inline isl::multi_pw_aff flat_range_product(const isl::aff &multi2) const;
2619 inline isl::multi_pw_aff flat_range_product(const isl::multi_aff &multi2) const;
2620 inline isl::multi_pw_aff flat_range_product(const isl::pw_aff &multi2) const;
2621 inline isl::multi_pw_aff flat_range_product(const isl::pw_multi_aff &multi2) const;
2622 inline isl::multi_pw_aff gist(isl::set set) const;
2624 inline isl::multi_pw_aff gist(const isl::basic_set &set) const;
2625 inline isl::multi_pw_aff gist(const isl::point &set) const;
2626 inline boolean has_range_tuple_id() const;
2627 static inline isl::multi_pw_aff identity(isl::space space);
2628 inline isl::multi_pw_aff identity() const;
2636 inline boolean involves_nan() const;
2637 inline boolean involves_param(const isl::id &id) const;
2638 inline boolean involves_param(const std::string &id) const;
2639 inline boolean involves_param(const isl::id_list &list) const;
2640 inline boolean isa_multi_aff() const;
2641 inline isl::pw_aff_list list() const;
2642 inline isl::pw_aff_list get_list() const;
2643 inline isl::multi_pw_aff max(isl::multi_pw_aff multi2) const;
2644 inline isl::multi_val max_multi_val() const;
2645 inline isl::multi_pw_aff min(isl::multi_pw_aff multi2) const;
2646 inline isl::multi_val min_multi_val() const;
2647 inline isl::multi_pw_aff neg() const;
2648 inline boolean plain_is_equal(const isl::multi_pw_aff &multi2) const;
2649 inline boolean plain_is_equal(const isl::multi_union_pw_aff &multi2) const;
2650 inline boolean plain_is_equal(const isl::aff &multi2) const;
2651 inline boolean plain_is_equal(const isl::multi_aff &multi2) const;
2652 inline boolean plain_is_equal(const isl::pw_aff &multi2) const;
2653 inline boolean plain_is_equal(const isl::pw_multi_aff &multi2) const;
2654 inline isl::multi_pw_aff product(isl::multi_pw_aff multi2) const;
2661 inline isl::multi_pw_aff range_product(const isl::aff &multi2) const;
2662 inline isl::multi_pw_aff range_product(const isl::multi_aff &multi2) const;
2663 inline isl::multi_pw_aff range_product(const isl::pw_aff &multi2) const;
2664 inline isl::multi_pw_aff range_product(const isl::pw_multi_aff &multi2) const;
2665 inline isl::id range_tuple_id() const;
2666 inline isl::id get_range_tuple_id() const;
2668 inline isl::multi_pw_aff reset_tuple_id(isl::dim type) const;
2669 inline isl::multi_pw_aff scale(isl::multi_val mv) const;
2670 inline isl::multi_pw_aff scale(isl::val v) const;
2671 inline isl::multi_pw_aff scale(long v) const;
2673 inline isl::multi_pw_aff scale_down(isl::val v) const;
2674 inline isl::multi_pw_aff scale_down(long v) const;
2675 inline isl::multi_pw_aff set_at(int pos, isl::pw_aff el) const;
2676 inline isl::multi_union_pw_aff set_at(int pos, const isl::union_pw_aff &el) const;
2677 inline isl::multi_pw_aff set_pw_aff(int pos, isl::pw_aff el) const;
2678 inline isl::multi_pw_aff set_range_tuple(isl::id id) const;
2679 inline isl::multi_pw_aff set_range_tuple(const std::string &id) const;
2680 inline isl::multi_union_pw_aff set_union_pw_aff(int pos, const isl::union_pw_aff &el) const;
2681 inline class size size() const;
2682 inline isl::space space() const;
2683 inline isl::space get_space() const;
2684 inline isl::multi_pw_aff sub(isl::multi_pw_aff multi2) const;
2685 inline isl::multi_union_pw_aff sub(const isl::multi_union_pw_aff &multi2) const;
2686 inline isl::multi_pw_aff sub(const isl::aff &multi2) const;
2687 inline isl::multi_pw_aff sub(const isl::multi_aff &multi2) const;
2688 inline isl::multi_pw_aff sub(const isl::pw_aff &multi2) const;
2689 inline isl::multi_pw_aff sub(const isl::pw_multi_aff &multi2) const;
2693 inline isl::multi_pw_aff union_add(const isl::aff &mpa2) const;
2694 inline isl::multi_pw_aff union_add(const isl::multi_aff &mpa2) const;
2695 inline isl::multi_pw_aff union_add(const isl::pw_aff &mpa2) const;
2696 inline isl::multi_pw_aff union_add(const isl::pw_multi_aff &mpa2) const;
2698};
2699
2700// declarations for isl::multi_union_pw_aff
2703
2704class multi_union_pw_aff {
2707
2708protected:
2709 isl_multi_union_pw_aff *ptr = nullptr;
2710
2712
2713public:
2714 inline /* implicit */ multi_union_pw_aff();
2715 inline /* implicit */ multi_union_pw_aff(const multi_union_pw_aff &obj);
2716 inline /* implicit */ multi_union_pw_aff(isl::multi_pw_aff mpa);
2717 inline /* implicit */ multi_union_pw_aff(isl::union_pw_aff upa);
2719 inline explicit multi_union_pw_aff(isl::union_pw_multi_aff upma);
2720 inline explicit multi_union_pw_aff(isl::ctx ctx, const std::string &str);
2727 inline bool is_null() const;
2728 inline isl::ctx ctx() const;
2729
2731 inline isl::union_pw_aff at(int pos) const;
2732 inline isl::union_pw_aff get_at(int pos) const;
2735 inline class size dim(isl::dim type) const;
2736 inline isl::union_set domain() const;
2738 static inline isl::multi_union_pw_aff from_union_map(isl::union_map umap);
2740 inline boolean has_range_tuple_id() const;
2743 inline boolean involves_nan() const;
2744 inline isl::union_pw_aff_list list() const;
2746 inline isl::multi_union_pw_aff neg() const;
2747 inline boolean plain_is_equal(const isl::multi_union_pw_aff &multi2) const;
2750 inline isl::id range_tuple_id() const;
2751 inline isl::id get_range_tuple_id() const;
2756 inline isl::multi_union_pw_aff scale(long v) const;
2759 inline isl::multi_union_pw_aff scale_down(long v) const;
2762 inline isl::multi_union_pw_aff set_range_tuple(const std::string &id) const;
2764 inline class size size() const;
2765 inline isl::space space() const;
2766 inline isl::space get_space() const;
2770};
2771
2772// declarations for isl::multi_val
2775
2776class multi_val {
2779
2780protected:
2781 isl_multi_val *ptr = nullptr;
2782
2784
2785public:
2786 inline /* implicit */ multi_val();
2787 inline /* implicit */ multi_val(const multi_val &obj);
2789 inline explicit multi_val(isl::ctx ctx, const std::string &str);
2791 inline ~multi_val();
2792 inline __isl_give isl_multi_val *copy() const &;
2793 inline __isl_give isl_multi_val *copy() && = delete;
2796 inline bool is_null() const;
2797 inline isl::ctx ctx() const;
2798
2799 inline isl::multi_val add(isl::multi_val multi2) const;
2800 inline isl::multi_val add(isl::val v) const;
2801 inline isl::multi_val add(long v) const;
2802 inline isl::val at(int pos) const;
2803 inline isl::val get_at(int pos) const;
2804 inline class size dim(isl::dim type) const;
2806 inline boolean has_range_tuple_id() const;
2807 inline boolean involves_nan() const;
2808 inline isl::val_list list() const;
2809 inline isl::val_list get_list() const;
2810 inline isl::multi_val max(isl::multi_val multi2) const;
2811 inline isl::multi_val min(isl::multi_val multi2) const;
2812 inline isl::multi_val neg() const;
2813 inline boolean plain_is_equal(const isl::multi_val &multi2) const;
2814 inline isl::multi_val product(isl::multi_val multi2) const;
2815 inline isl::multi_val range_product(isl::multi_val multi2) const;
2816 inline isl::id range_tuple_id() const;
2817 inline isl::id get_range_tuple_id() const;
2819 inline isl::multi_val reset_tuple_id(isl::dim type) const;
2820 inline isl::multi_val scale(isl::multi_val mv) const;
2821 inline isl::multi_val scale(isl::val v) const;
2822 inline isl::multi_val scale(long v) const;
2824 inline isl::multi_val scale_down(isl::val v) const;
2825 inline isl::multi_val scale_down(long v) const;
2826 inline isl::multi_val set_at(int pos, isl::val el) const;
2827 inline isl::multi_val set_at(int pos, long el) const;
2828 inline isl::multi_val set_range_tuple(isl::id id) const;
2829 inline isl::multi_val set_range_tuple(const std::string &id) const;
2830 inline isl::multi_val set_val(int pos, isl::val el) const;
2831 inline isl::multi_val set_val(int pos, long el) const;
2832 inline class size size() const;
2833 inline isl::space space() const;
2834 inline isl::space get_space() const;
2835 inline isl::multi_val sub(isl::multi_val multi2) const;
2836 static inline isl::multi_val zero(isl::space space);
2837};
2838
2839// declarations for isl::point
2842
2843class point {
2844 friend inline point manage(__isl_take isl_point *ptr);
2845 friend inline point manage_copy(__isl_keep isl_point *ptr);
2846
2847protected:
2848 isl_point *ptr = nullptr;
2849
2850 inline explicit point(__isl_take isl_point *ptr);
2851
2852public:
2853 inline /* implicit */ point();
2854 inline /* implicit */ point(const point &obj);
2855 inline explicit point(isl::space space);
2857 inline ~point();
2858 inline __isl_give isl_point *copy() const &;
2859 inline __isl_give isl_point *copy() && = delete;
2860 inline __isl_keep isl_point *get() const;
2862 inline bool is_null() const;
2863 inline isl::ctx ctx() const;
2864
2865 inline isl::set add_constraint(const isl::constraint &constraint) const;
2866 inline isl::set add_dims(isl::dim type, unsigned int n) const;
2867 inline isl::basic_set affine_hull() const;
2868 inline isl::set align_params(const isl::space &model) const;
2869 inline isl::basic_set apply(const isl::basic_map &bmap) const;
2870 inline isl::set apply(const isl::map &map) const;
2871 inline isl::union_set apply(const isl::union_map &umap) const;
2873 inline isl::set as_set() const;
2874 inline isl::basic_set_list basic_set_list() const;
2875 inline isl::set bind(const isl::multi_id &tuple) const;
2876 inline isl::set coalesce() const;
2877 inline isl::set complement() const;
2878 inline isl::union_set compute_divs() const;
2879 inline boolean contains(const isl::space &space) const;
2880 inline isl::basic_set convex_hull() const;
2881 inline isl::val coordinate_val(isl::dim type, int pos) const;
2882 inline isl::val get_coordinate_val(isl::dim type, int pos) const;
2884 inline class size dim(isl::dim type) const;
2885 inline boolean dim_has_any_lower_bound(isl::dim type, unsigned int pos) const;
2886 inline isl::id dim_id(isl::dim type, unsigned int pos) const;
2887 inline isl::pw_aff dim_max(int pos) const;
2888 inline isl::val dim_max_val(int pos) const;
2889 inline isl::pw_aff dim_min(int pos) const;
2890 inline isl::val dim_min_val(int pos) const;
2891 inline std::string dim_name(isl::dim type, unsigned int pos) const;
2892 inline isl::aff div(int pos) const;
2893 inline isl::set drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const;
2894 inline isl::set eliminate(isl::dim type, unsigned int first, unsigned int n) const;
2895 inline boolean every_set(const std::function<boolean(isl::set)> &test) const;
2896 inline isl::set extract_set(const isl::space &space) const;
2897 inline int find_dim_by_id(isl::dim type, const isl::id &id) const;
2898 inline int find_dim_by_id(isl::dim type, const std::string &id) const;
2899 inline isl::basic_set fix_si(isl::dim type, unsigned int pos, int value) const;
2900 inline isl::basic_set fix_val(isl::dim type, unsigned int pos, const isl::val &v) const;
2901 inline isl::basic_set fix_val(isl::dim type, unsigned int pos, long v) const;
2902 inline isl::basic_set flatten() const;
2903 inline stat foreach_basic_set(const std::function<stat(isl::basic_set)> &fn) const;
2904 inline stat foreach_point(const std::function<stat(isl::point)> &fn) const;
2905 inline stat foreach_set(const std::function<stat(isl::set)> &fn) const;
2906 inline isl::basic_set gist(const isl::basic_set &context) const;
2907 inline isl::set gist(const isl::set &context) const;
2908 inline isl::union_set gist(const isl::union_set &context) const;
2909 inline isl::set gist_params(const isl::set &context) const;
2910 inline boolean has_equal_space(const isl::set &set2) const;
2911 inline isl::map identity() const;
2914 inline isl::set insert_dims(isl::dim type, unsigned int pos, unsigned int n) const;
2915 inline isl::map insert_domain(const isl::space &domain) const;
2916 inline isl::basic_set intersect(const isl::basic_set &bset2) const;
2917 inline isl::set intersect(const isl::set &set2) const;
2918 inline isl::union_set intersect(const isl::union_set &uset2) const;
2919 inline isl::basic_set intersect_params(const isl::basic_set &bset2) const;
2920 inline isl::set intersect_params(const isl::set &params) const;
2921 inline boolean involves_dims(isl::dim type, unsigned int first, unsigned int n) const;
2922 inline boolean involves_locals() const;
2923 inline boolean is_bounded() const;
2924 inline boolean is_disjoint(const isl::set &set2) const;
2925 inline boolean is_disjoint(const isl::union_set &uset2) const;
2926 inline boolean is_empty() const;
2927 inline boolean is_equal(const isl::basic_set &bset2) const;
2928 inline boolean is_equal(const isl::set &set2) const;
2929 inline boolean is_equal(const isl::union_set &uset2) const;
2930 inline boolean is_params() const;
2931 inline boolean is_singleton() const;
2932 inline boolean is_strict_subset(const isl::set &set2) const;
2933 inline boolean is_strict_subset(const isl::union_set &uset2) const;
2934 inline boolean is_subset(const isl::basic_set &bset2) const;
2935 inline boolean is_subset(const isl::set &set2) const;
2936 inline boolean is_subset(const isl::union_set &uset2) const;
2937 inline boolean is_wrapping() const;
2938 inline boolean isa_set() const;
2939 inline isl::set lexmax() const;
2941 inline isl::set lexmin() const;
2943 inline isl::set lower_bound(const isl::multi_pw_aff &lower) const;
2944 inline isl::set lower_bound(const isl::multi_val &lower) const;
2945 inline isl::set lower_bound_si(isl::dim type, unsigned int pos, int value) const;
2946 inline isl::set lower_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const;
2947 inline isl::set lower_bound_val(isl::dim type, unsigned int pos, long value) const;
2949 inline isl::val max_val(const isl::aff &obj) const;
2951 inline isl::val min_val(const isl::aff &obj) const;
2952 inline isl::multi_val multi_val() const;
2953 inline isl::multi_val get_multi_val() const;
2954 inline class size n_basic_set() const;
2955 inline isl::basic_set params() const;
2956 inline isl::val plain_get_val_if_fixed(isl::dim type, unsigned int pos) const;
2959 inline isl::set preimage(const isl::multi_aff &ma) const;
2960 inline isl::set preimage(const isl::multi_pw_aff &mpa) const;
2961 inline isl::set preimage(const isl::pw_multi_aff &pma) const;
2962 inline isl::union_set preimage(const isl::union_pw_multi_aff &upma) const;
2963 inline isl::set product(const isl::set &set2) const;
2964 inline isl::basic_set project_out(isl::dim type, unsigned int first, unsigned int n) const;
2966 inline isl::set project_out_param(const isl::id &id) const;
2967 inline isl::set project_out_param(const std::string &id) const;
2968 inline isl::set project_out_param(const isl::id_list &list) const;
2970 inline isl::set remove_dims(isl::dim type, unsigned int first, unsigned int n) const;
2971 inline isl::set remove_divs() const;
2972 inline isl::set remove_redundancies() const;
2973 inline isl::set reset_tuple_id() const;
2974 inline isl::basic_set sample() const;
2975 inline isl::point sample_point() const;
2976 inline isl::set set_dim_id(isl::dim type, unsigned int pos, const isl::id &id) const;
2977 inline isl::set set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const;
2978 inline isl::set_list set_list() const;
2979 inline isl::set set_tuple_id(const isl::id &id) const;
2980 inline isl::set set_tuple_id(const std::string &id) const;
2982 inline isl::basic_set simple_hull() const;
2983 inline isl::space space() const;
2984 inline isl::val stride(int pos) const;
2985 inline isl::set subtract(const isl::set &set2) const;
2986 inline isl::union_set subtract(const isl::union_set &uset2) const;
2987 inline isl::basic_set_list to_list() const;
2988 inline isl::set to_set() const;
2989 inline isl::union_set to_union_set() const;
2990 inline isl::map translation() const;
2991 inline class size tuple_dim() const;
2992 inline isl::id tuple_id() const;
2993 inline std::string tuple_name() const;
2994 inline isl::set unbind_params(const isl::multi_id &tuple) const;
2996 inline isl::set unite(const isl::basic_set &bset2) const;
2997 inline isl::set unite(const isl::set &set2) const;
2998 inline isl::union_set unite(const isl::union_set &uset2) const;
3000 inline isl::map unwrap() const;
3001 inline isl::set upper_bound(const isl::multi_pw_aff &upper) const;
3002 inline isl::set upper_bound(const isl::multi_val &upper) const;
3003 inline isl::set upper_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const;
3004 inline isl::set upper_bound_val(isl::dim type, unsigned int pos, long value) const;
3005};
3006
3007// declarations for isl::pw_aff
3010
3011class pw_aff {
3012 friend inline pw_aff manage(__isl_take isl_pw_aff *ptr);
3013 friend inline pw_aff manage_copy(__isl_keep isl_pw_aff *ptr);
3014
3015protected:
3016 isl_pw_aff *ptr = nullptr;
3017
3018 inline explicit pw_aff(__isl_take isl_pw_aff *ptr);
3019
3020public:
3021 inline /* implicit */ pw_aff();
3022 inline /* implicit */ pw_aff(const pw_aff &obj);
3023 inline /* implicit */ pw_aff(isl::aff aff);
3024 inline explicit pw_aff(isl::ctx ctx, const std::string &str);
3025 inline explicit pw_aff(isl::set domain, isl::val v);
3026 inline explicit pw_aff(isl::local_space ls);
3028 inline ~pw_aff();
3029 inline __isl_give isl_pw_aff *copy() const &;
3030 inline __isl_give isl_pw_aff *copy() && = delete;
3031 inline __isl_keep isl_pw_aff *get() const;
3033 inline bool is_null() const;
3034 inline isl::ctx ctx() const;
3035
3036 inline isl::multi_pw_aff add(const isl::multi_pw_aff &multi2) const;
3037 inline isl::multi_union_pw_aff add(const isl::multi_union_pw_aff &multi2) const;
3038 inline isl::pw_aff add(isl::pw_aff pwaff2) const;
3039 inline isl::pw_multi_aff add(const isl::pw_multi_aff &pma2) const;
3040 inline isl::union_pw_aff add(const isl::union_pw_aff &upa2) const;
3041 inline isl::union_pw_multi_aff add(const isl::union_pw_multi_aff &upma2) const;
3042 inline isl::pw_aff add(const isl::aff &pwaff2) const;
3043 inline isl::pw_aff add_constant(isl::val v) const;
3044 inline isl::pw_aff add_constant(long v) const;
3045 inline isl::pw_multi_aff add_constant(const isl::multi_val &mv) const;
3046 inline isl::pw_aff add_dims(isl::dim type, unsigned int n) const;
3048 inline isl::union_pw_multi_aff apply(const isl::union_pw_multi_aff &upma2) const;
3049 inline isl::aff as_aff() const;
3050 inline isl::map as_map() const;
3051 inline isl::multi_aff as_multi_aff() const;
3054 inline isl::set as_set() const;
3055 inline isl::union_map as_union_map() const;
3056 inline isl::pw_aff at(int pos) const;
3057 inline isl::set bind(const isl::multi_id &tuple) const;
3058 inline isl::set bind(isl::id id) const;
3059 inline isl::set bind(const std::string &id) const;
3062 inline isl::pw_aff ceil() const;
3063 inline isl::pw_aff coalesce() const;
3064 inline isl::pw_aff cond(isl::pw_aff pwaff_true, isl::pw_aff pwaff_false) const;
3065 inline class size dim(isl::dim type) const;
3066 inline isl::id dim_id(isl::dim type, unsigned int pos) const;
3067 inline isl::id get_dim_id(isl::dim type, unsigned int pos) const;
3068 inline isl::pw_aff div(isl::pw_aff pa2) const;
3069 inline isl::set domain() const;
3070 inline isl::space domain_space() const;
3071 inline isl::space get_domain_space() const;
3072 inline isl::pw_multi_aff drop_dims(isl::dim type, unsigned int first, unsigned int n) const;
3073 inline isl::set eq_set(isl::pw_aff pwaff2) const;
3074 inline isl::val eval(isl::point pnt) const;
3076 inline isl::multi_pw_aff flat_range_product(const isl::multi_pw_aff &multi2) const;
3080 inline isl::pw_aff floor() const;
3081 inline stat foreach_piece(const std::function<stat(isl::set, isl::aff)> &fn) const;
3082 inline stat foreach_piece(const std::function<stat(isl::set, isl::multi_aff)> &fn) const;
3083 inline stat foreach_pw_aff(const std::function<stat(isl::pw_aff)> &fn) const;
3084 inline isl::set ge_set(isl::pw_aff pwaff2) const;
3085 inline isl::pw_aff gist(isl::set context) const;
3086 inline isl::union_pw_aff gist(const isl::union_set &context) const;
3087 inline isl::pw_aff gist(const isl::basic_set &context) const;
3088 inline isl::pw_aff gist(const isl::point &context) const;
3089 inline isl::set gt_set(isl::pw_aff pwaff2) const;
3090 inline boolean has_range_tuple_id() const;
3091 inline isl::multi_pw_aff identity() const;
3095 inline isl::union_pw_aff intersect_domain(const isl::union_set &uset) const;
3096 inline isl::pw_aff intersect_domain(const isl::basic_set &set) const;
3097 inline isl::pw_aff intersect_domain(const isl::point &set) const;
3101 inline boolean involves_locals() const;
3102 inline boolean involves_nan() const;
3103 inline boolean involves_param(const isl::id &id) const;
3104 inline boolean involves_param(const std::string &id) const;
3105 inline boolean involves_param(const isl::id_list &list) const;
3106 inline boolean is_cst() const;
3107 inline boolean is_equal(const isl::pw_aff &pa2) const;
3108 inline boolean isa_aff() const;
3109 inline boolean isa_multi_aff() const;
3110 inline boolean isa_pw_multi_aff() const;
3111 inline isl::set le_set(isl::pw_aff pwaff2) const;
3112 inline isl::pw_aff_list list() const;
3113 inline isl::set lt_set(isl::pw_aff pwaff2) const;
3114 inline isl::multi_pw_aff max(const isl::multi_pw_aff &multi2) const;
3115 inline isl::pw_aff max(isl::pw_aff pwaff2) const;
3116 inline isl::pw_aff max(const isl::aff &pwaff2) const;
3117 inline isl::multi_val max_multi_val() const;
3118 inline isl::multi_pw_aff min(const isl::multi_pw_aff &multi2) const;
3119 inline isl::pw_aff min(isl::pw_aff pwaff2) const;
3120 inline isl::pw_aff min(const isl::aff &pwaff2) const;
3121 inline isl::multi_val min_multi_val() const;
3122 inline isl::pw_aff mod(isl::val mod) const;
3123 inline isl::pw_aff mod(long mod) const;
3124 inline isl::pw_aff mul(isl::pw_aff pwaff2) const;
3125 inline class size n_piece() const;
3126 inline isl::set ne_set(isl::pw_aff pwaff2) const;
3127 inline isl::pw_aff neg() const;
3128 static inline isl::pw_aff param_on_domain(isl::set domain, isl::id id);
3129 inline boolean plain_is_empty() const;
3130 inline boolean plain_is_equal(const isl::multi_pw_aff &multi2) const;
3131 inline boolean plain_is_equal(const isl::multi_union_pw_aff &multi2) const;
3134 inline isl::multi_pw_aff product(const isl::multi_pw_aff &multi2) const;
3135 inline isl::pw_multi_aff product(const isl::pw_multi_aff &pma2) const;
3137 inline isl::pw_aff pullback(isl::multi_pw_aff mpa) const;
3139 inline isl::union_pw_aff pullback(const isl::union_pw_multi_aff &upma) const;
3143 inline isl::multi_pw_aff range_product(const isl::multi_pw_aff &multi2) const;
3145 inline isl::pw_multi_aff range_product(const isl::pw_multi_aff &pma2) const;
3147 inline isl::id range_tuple_id() const;
3149 inline isl::multi_pw_aff reset_tuple_id(isl::dim type) const;
3150 inline isl::multi_pw_aff scale(const isl::multi_val &mv) const;
3151 inline isl::pw_aff scale(isl::val v) const;
3152 inline isl::pw_aff scale(long v) const;
3153 inline isl::multi_pw_aff scale_down(const isl::multi_val &mv) const;
3154 inline isl::pw_aff scale_down(isl::val f) const;
3155 inline isl::pw_aff scale_down(long f) const;
3156 inline isl::multi_pw_aff set_at(int pos, const isl::pw_aff &el) const;
3157 inline isl::multi_union_pw_aff set_at(int pos, const isl::union_pw_aff &el) const;
3158 inline isl::multi_pw_aff set_pw_aff(int pos, const isl::pw_aff &el) const;
3159 inline isl::pw_multi_aff set_pw_aff(unsigned int pos, const isl::pw_aff &pa) const;
3160 inline isl::pw_multi_aff set_range_tuple(const isl::id &id) const;
3161 inline isl::pw_multi_aff set_range_tuple(const std::string &id) const;
3162 inline isl::pw_aff set_tuple_id(isl::dim type, isl::id id) const;
3163 inline isl::pw_aff set_tuple_id(isl::dim type, const std::string &id) const;
3164 inline isl::multi_union_pw_aff set_union_pw_aff(int pos, const isl::union_pw_aff &el) const;
3165 inline class size size() const;
3166 inline isl::space space() const;
3167 inline isl::space get_space() const;
3168 inline isl::multi_pw_aff sub(const isl::multi_pw_aff &multi2) const;
3169 inline isl::multi_union_pw_aff sub(const isl::multi_union_pw_aff &multi2) const;
3170 inline isl::pw_aff sub(isl::pw_aff pwaff2) const;
3171 inline isl::pw_multi_aff sub(const isl::pw_multi_aff &pma2) const;
3172 inline isl::union_pw_aff sub(const isl::union_pw_aff &upa2) const;
3173 inline isl::union_pw_multi_aff sub(const isl::union_pw_multi_aff &upma2) const;
3174 inline isl::pw_aff sub(const isl::aff &pwaff2) const;
3177 inline isl::union_pw_aff subtract_domain(const isl::union_set &uset) const;
3178 inline isl::pw_aff subtract_domain(const isl::basic_set &set) const;
3179 inline isl::pw_aff subtract_domain(const isl::point &set) const;
3180 inline isl::pw_aff tdiv_q(isl::pw_aff pa2) const;
3181 inline isl::pw_aff tdiv_r(isl::pw_aff pa2) const;
3182 inline isl::pw_aff_list to_list() const;
3186 inline isl::id tuple_id(isl::dim type) const;
3187 inline isl::id get_tuple_id(isl::dim type) const;
3189 inline isl::multi_pw_aff union_add(const isl::multi_pw_aff &mpa2) const;
3191 inline isl::pw_aff union_add(isl::pw_aff pwaff2) const;
3192 inline isl::pw_multi_aff union_add(const isl::pw_multi_aff &pma2) const;
3193 inline isl::union_pw_aff union_add(const isl::union_pw_aff &upa2) const;
3195 inline isl::pw_aff union_add(const isl::aff &pwaff2) const;
3196 static inline isl::pw_aff var_on_domain(isl::local_space ls, isl::dim type, unsigned int pos);
3197};
3198
3199// declarations for isl::pw_aff_list
3200inline pw_aff_list manage(__isl_take isl_pw_aff_list *ptr);
3201inline pw_aff_list manage_copy(__isl_keep isl_pw_aff_list *ptr);
3202
3203class pw_aff_list {
3204 friend inline pw_aff_list manage(__isl_take isl_pw_aff_list *ptr);
3205 friend inline pw_aff_list manage_copy(__isl_keep isl_pw_aff_list *ptr);
3206
3207protected:
3208 isl_pw_aff_list *ptr = nullptr;
3209
3210 inline explicit pw_aff_list(__isl_take isl_pw_aff_list *ptr);
3211
3212public:
3213 inline /* implicit */ pw_aff_list();
3214 inline /* implicit */ pw_aff_list(const pw_aff_list &obj);
3215 inline explicit pw_aff_list(isl::ctx ctx, int n);
3216 inline explicit pw_aff_list(isl::pw_aff el);
3217 inline explicit pw_aff_list(isl::ctx ctx, const std::string &str);
3220 inline __isl_give isl_pw_aff_list *copy() const &;
3221 inline __isl_give isl_pw_aff_list *copy() && = delete;
3222 inline __isl_keep isl_pw_aff_list *get() const;
3223 inline __isl_give isl_pw_aff_list *release();
3224 inline bool is_null() const;
3225 inline isl::ctx ctx() const;
3226
3227 inline isl::pw_aff_list add(isl::pw_aff el) const;
3228 inline isl::pw_aff at(int index) const;
3229 inline isl::pw_aff get_at(int index) const;
3230 inline isl::pw_aff_list clear() const;
3231 inline isl::pw_aff_list concat(isl::pw_aff_list list2) const;
3232 inline isl::pw_aff_list drop(unsigned int first, unsigned int n) const;
3233 inline stat foreach(const std::function<stat(isl::pw_aff)> &fn) const;
3234 inline isl::pw_aff_list insert(unsigned int pos, isl::pw_aff el) const;
3235 inline class size size() const;
3236};
3237
3238// declarations for isl::pw_multi_aff
3241
3242class pw_multi_aff {
3245
3246protected:
3247 isl_pw_multi_aff *ptr = nullptr;
3248
3250
3251public:
3252 inline /* implicit */ pw_multi_aff();
3253 inline /* implicit */ pw_multi_aff(const pw_multi_aff &obj);
3254 inline /* implicit */ pw_multi_aff(isl::multi_aff ma);
3255 inline /* implicit */ pw_multi_aff(isl::pw_aff pa);
3256 inline explicit pw_multi_aff(isl::ctx ctx, const std::string &str);
3260 inline __isl_give isl_pw_multi_aff *copy() && = delete;
3263 inline bool is_null() const;
3264 inline isl::ctx ctx() const;
3265
3266 inline isl::multi_pw_aff add(const isl::multi_pw_aff &multi2) const;
3267 inline isl::multi_union_pw_aff add(const isl::multi_union_pw_aff &multi2) const;
3268 inline isl::pw_multi_aff add(isl::pw_multi_aff pma2) const;
3269 inline isl::union_pw_multi_aff add(const isl::union_pw_multi_aff &upma2) const;
3270 inline isl::pw_multi_aff add(const isl::multi_aff &pma2) const;
3271 inline isl::pw_multi_aff add(const isl::pw_aff &pma2) const;
3274 inline isl::pw_multi_aff add_constant(long v) const;
3276 inline isl::union_pw_multi_aff apply(const isl::union_pw_multi_aff &upma2) const;
3277 inline isl::map as_map() const;
3278 inline isl::multi_aff as_multi_aff() const;
3281 inline isl::set as_set() const;
3282 inline isl::union_map as_union_map() const;
3283 inline isl::pw_aff at(int pos) const;
3284 inline isl::pw_aff get_at(int pos) const;
3285 inline isl::set bind(const isl::multi_id &tuple) const;
3288 inline isl::pw_multi_aff coalesce() const;
3289 inline class size dim(isl::dim type) const;
3290 inline isl::set domain() const;
3292 inline isl::pw_multi_aff drop_dims(isl::dim type, unsigned int first, unsigned int n) const;
3294 inline isl::multi_pw_aff flat_range_product(const isl::multi_pw_aff &multi2) const;
3298 inline isl::pw_multi_aff flat_range_product(const isl::multi_aff &pma2) const;
3299 inline isl::pw_multi_aff flat_range_product(const isl::pw_aff &pma2) const;
3300 inline stat foreach_piece(const std::function<stat(isl::set, isl::multi_aff)> &fn) const;
3301 static inline isl::pw_multi_aff from_map(isl::map map);
3302 inline isl::pw_multi_aff gist(isl::set set) const;
3304 inline isl::pw_multi_aff gist(const isl::basic_set &set) const;
3305 inline isl::pw_multi_aff gist(const isl::point &set) const;
3306 inline boolean has_range_tuple_id() const;
3307 inline isl::multi_pw_aff identity() const;
3318 inline boolean involves_locals() const;
3319 inline boolean involves_nan() const;
3320 inline boolean involves_param(const isl::id &id) const;
3321 inline boolean involves_param(const std::string &id) const;
3322 inline boolean involves_param(const isl::id_list &list) const;
3323 inline boolean isa_multi_aff() const;
3324 inline boolean isa_pw_multi_aff() const;
3325 inline isl::pw_aff_list list() const;
3326 inline isl::multi_pw_aff max(const isl::multi_pw_aff &multi2) const;
3327 inline isl::multi_val max_multi_val() const;
3328 inline isl::multi_pw_aff min(const isl::multi_pw_aff &multi2) const;
3329 inline isl::multi_val min_multi_val() const;
3331 inline class size n_piece() const;
3332 inline isl::multi_pw_aff neg() const;
3333 inline boolean plain_is_empty() const;
3334 inline boolean plain_is_equal(const isl::multi_pw_aff &multi2) const;
3335 inline boolean plain_is_equal(const isl::multi_union_pw_aff &multi2) const;
3340 inline isl::multi_pw_aff product(const isl::multi_pw_aff &multi2) const;
3342 inline isl::pw_multi_aff product(const isl::multi_aff &pma2) const;
3343 inline isl::pw_multi_aff product(const isl::pw_aff &pma2) const;
3344 static inline isl::pw_multi_aff project_out_map(isl::space space, isl::dim type, unsigned int first, unsigned int n);
3345 inline isl::multi_pw_aff pullback(const isl::multi_pw_aff &mpa2) const;
3353 inline isl::multi_pw_aff range_product(const isl::multi_pw_aff &multi2) const;
3357 inline isl::pw_multi_aff range_product(const isl::multi_aff &pma2) const;
3358 inline isl::pw_multi_aff range_product(const isl::pw_aff &pma2) const;
3359 inline isl::id range_tuple_id() const;
3360 inline isl::id get_range_tuple_id() const;
3362 inline isl::multi_pw_aff reset_tuple_id(isl::dim type) const;
3363 inline isl::multi_pw_aff scale(const isl::multi_val &mv) const;
3364 inline isl::pw_multi_aff scale(isl::val v) const;
3365 inline isl::pw_multi_aff scale(long v) const;
3366 inline isl::multi_pw_aff scale_down(const isl::multi_val &mv) const;
3367 inline isl::pw_multi_aff scale_down(isl::val v) const;
3368 inline isl::pw_multi_aff scale_down(long v) const;
3369 inline isl::multi_pw_aff set_at(int pos, const isl::pw_aff &el) const;
3370 inline isl::multi_union_pw_aff set_at(int pos, const isl::union_pw_aff &el) const;
3371 inline isl::multi_pw_aff set_pw_aff(int pos, const isl::pw_aff &el) const;
3372 inline isl::pw_multi_aff set_pw_aff(unsigned int pos, isl::pw_aff pa) const;
3373 inline isl::pw_multi_aff set_range_tuple(isl::id id) const;
3374 inline isl::pw_multi_aff set_range_tuple(const std::string &id) const;
3375 inline isl::multi_union_pw_aff set_union_pw_aff(int pos, const isl::union_pw_aff &el) const;
3376 inline class size size() const;
3377 inline isl::space space() const;
3378 inline isl::space get_space() const;
3379 inline isl::multi_pw_aff sub(const isl::multi_pw_aff &multi2) const;
3380 inline isl::multi_union_pw_aff sub(const isl::multi_union_pw_aff &multi2) const;
3381 inline isl::pw_multi_aff sub(isl::pw_multi_aff pma2) const;
3382 inline isl::union_pw_multi_aff sub(const isl::union_pw_multi_aff &upma2) const;
3383 inline isl::pw_multi_aff sub(const isl::multi_aff &pma2) const;
3384 inline isl::pw_multi_aff sub(const isl::pw_aff &pma2) const;
3393 inline isl::id tuple_id(isl::dim type) const;
3394 inline isl::id get_tuple_id(isl::dim type) const;
3396 inline isl::multi_pw_aff union_add(const isl::multi_pw_aff &mpa2) const;
3400 inline isl::pw_multi_aff union_add(const isl::multi_aff &pma2) const;
3401 inline isl::pw_multi_aff union_add(const isl::pw_aff &pma2) const;
3403};
3404
3405// declarations for isl::pw_multi_aff_list
3406inline pw_multi_aff_list manage(__isl_take isl_pw_multi_aff_list *ptr);
3407inline pw_multi_aff_list manage_copy(__isl_keep isl_pw_multi_aff_list *ptr);
3408
3409class pw_multi_aff_list {
3410 friend inline pw_multi_aff_list manage(__isl_take isl_pw_multi_aff_list *ptr);
3411 friend inline pw_multi_aff_list manage_copy(__isl_keep isl_pw_multi_aff_list *ptr);
3412
3413protected:
3414 isl_pw_multi_aff_list *ptr = nullptr;
3415
3416 inline explicit pw_multi_aff_list(__isl_take isl_pw_multi_aff_list *ptr);
3417
3418public:
3419 inline /* implicit */ pw_multi_aff_list();
3420 inline /* implicit */ pw_multi_aff_list(const pw_multi_aff_list &obj);
3421 inline explicit pw_multi_aff_list(isl::ctx ctx, int n);
3423 inline explicit pw_multi_aff_list(isl::ctx ctx, const std::string &str);
3426 inline __isl_give isl_pw_multi_aff_list *copy() const &;
3427 inline __isl_give isl_pw_multi_aff_list *copy() && = delete;
3428 inline __isl_keep isl_pw_multi_aff_list *get() const;
3429 inline __isl_give isl_pw_multi_aff_list *release();
3430 inline bool is_null() const;
3431 inline isl::ctx ctx() const;
3432
3434 inline isl::pw_multi_aff at(int index) const;
3435 inline isl::pw_multi_aff get_at(int index) const;
3436 inline isl::pw_multi_aff_list clear() const;
3438 inline isl::pw_multi_aff_list drop(unsigned int first, unsigned int n) const;
3439 inline stat foreach(const std::function<stat(isl::pw_multi_aff)> &fn) const;
3440 inline isl::pw_multi_aff_list insert(unsigned int pos, isl::pw_multi_aff el) const;
3441 inline class size size() const;
3442};
3443
3444// declarations for isl::schedule
3447
3448class schedule {
3449 friend inline schedule manage(__isl_take isl_schedule *ptr);
3451
3452protected:
3453 isl_schedule *ptr = nullptr;
3454
3456
3457public:
3458 inline /* implicit */ schedule();
3459 inline /* implicit */ schedule(const schedule &obj);
3460 inline explicit schedule(isl::ctx ctx, const std::string &str);
3462 inline ~schedule();
3463 inline __isl_give isl_schedule *copy() const &;
3464 inline __isl_give isl_schedule *copy() && = delete;
3465 inline __isl_keep isl_schedule *get() const;
3467 inline bool is_null() const;
3468 inline isl::ctx ctx() const;
3469
3470 inline isl::schedule align_params(isl::space space) const;
3471 inline isl::union_set domain() const;
3472 inline isl::union_set get_domain() const;
3474 inline isl::schedule gist_domain_params(isl::set context) const;
3477 inline isl::union_map map() const;
3478 inline isl::union_map get_map() const;
3480 inline isl::schedule_node root() const;
3481 inline isl::schedule_node get_root() const;
3482 inline isl::schedule sequence(isl::schedule schedule2) const;
3483};
3484
3485// declarations for isl::schedule_constraints
3488
3492
3493protected:
3494 isl_schedule_constraints *ptr = nullptr;
3495
3497
3498public:
3499 inline /* implicit */ schedule_constraints();
3500 inline /* implicit */ schedule_constraints(const schedule_constraints &obj);
3501 inline explicit schedule_constraints(isl::ctx ctx, const std::string &str);
3508 inline bool is_null() const;
3509 inline isl::ctx ctx() const;
3510
3511 inline isl::union_map coincidence() const;
3518 inline isl::set context() const;
3519 inline isl::set get_context() const;
3520 inline isl::union_set domain() const;
3521 inline isl::union_set get_domain() const;
3523 inline isl::union_map proximity() const;
3524 inline isl::union_map get_proximity() const;
3530 inline isl::union_map validity() const;
3531 inline isl::union_map get_validity() const;
3532};
3533
3534// declarations for isl::schedule_node
3537
3538class schedule_node {
3541
3542protected:
3543 isl_schedule_node *ptr = nullptr;
3544
3546
3547public:
3548 inline /* implicit */ schedule_node();
3549 inline /* implicit */ schedule_node(const schedule_node &obj);
3553 inline __isl_give isl_schedule_node *copy() && = delete;
3556 inline bool is_null() const;
3557private:
3558 template <typename T,
3559 typename = typename std::enable_if<std::is_same<
3560 const decltype(isl_schedule_node_get_type(nullptr)),
3561 const T>::value>::type>
3562 inline boolean isa_type(T subtype) const;
3563public:
3564 template <class T> inline boolean isa() const;
3565 template <class T> inline T as() const;
3566 inline isl::ctx ctx() const;
3567
3568 inline isl::schedule_node ancestor(int generation) const;
3571 inline isl::schedule_node child(int pos) const;
3572 inline class size child_position() const;
3573 inline class size get_child_position() const;
3574 inline isl::union_set domain() const;
3575 inline isl::union_set get_domain() const;
3576 inline boolean every_descendant(const std::function<boolean(isl::schedule_node)> &test) const;
3578 inline stat foreach_ancestor_top_down(const std::function<stat(isl::schedule_node)> &fn) const;
3579 inline stat foreach_descendant_top_down(const std::function<boolean(isl::schedule_node)> &fn) const;
3581 static inline isl::schedule_node from_extension(isl::union_map extension);
3584 inline boolean has_children() const;
3585 inline boolean has_next_sibling() const;
3586 inline boolean has_parent() const;
3587 inline boolean has_previous_sibling() const;
3591 inline isl::schedule_node insert_mark(isl::id mark) const;
3592 inline isl::schedule_node insert_mark(const std::string &mark) const;
3596 inline boolean is_equal(const isl::schedule_node &node2) const;
3597 inline boolean is_subtree_anchored() const;
3598 inline isl::schedule_node map_descendant_bottom_up(const std::function<isl::schedule_node(isl::schedule_node)> &fn) const;
3599 inline class size n_children() const;
3603 inline isl::schedule_node parent() const;
3606 inline isl::union_map prefix_schedule_relation() const;
3613 inline isl::schedule_node root() const;
3614 inline isl::schedule schedule() const;
3615 inline isl::schedule get_schedule() const;
3616 inline class size schedule_depth() const;
3617 inline class size get_schedule_depth() const;
3618 inline isl::schedule_node shared_ancestor(const isl::schedule_node &node2) const;
3620 inline class size tree_depth() const;
3621 inline class size get_tree_depth() const;
3622 inline isl::union_set universe_domain() const;
3623 inline isl::union_set get_universe_domain() const;
3624};
3625
3626// declarations for isl::schedule_node_band
3627
3628class schedule_node_band : public schedule_node {
3629 template <class T>
3630 friend boolean schedule_node::isa() const;
3632 static const auto type = isl_schedule_node_band;
3633
3634protected:
3636
3637public:
3638 inline /* implicit */ schedule_node_band();
3639 inline /* implicit */ schedule_node_band(const schedule_node_band &obj);
3641 inline isl::ctx ctx() const;
3642
3647 inline boolean member_get_coincident(int pos) const;
3648 inline schedule_node_band member_set_coincident(int pos, int coincident) const;
3650 inline class size n_member() const;
3653 inline boolean permutable() const;
3654 inline boolean get_permutable() const;
3660 inline schedule_node_band split(int pos) const;
3666};
3667
3668// declarations for isl::schedule_node_context
3669
3670class schedule_node_context : public schedule_node {
3671 template <class T>
3672 friend boolean schedule_node::isa() const;
3674 static const auto type = isl_schedule_node_context;
3675
3676protected:
3678
3679public:
3680 inline /* implicit */ schedule_node_context();
3681 inline /* implicit */ schedule_node_context(const schedule_node_context &obj);
3683 inline isl::ctx ctx() const;
3684
3685 inline isl::set context() const;
3686 inline isl::set get_context() const;
3687};
3688
3689// declarations for isl::schedule_node_domain
3690
3691class schedule_node_domain : public schedule_node {
3692 template <class T>
3693 friend boolean schedule_node::isa() const;
3695 static const auto type = isl_schedule_node_domain;
3696
3697protected:
3699
3700public:
3701 inline /* implicit */ schedule_node_domain();
3702 inline /* implicit */ schedule_node_domain(const schedule_node_domain &obj);
3704 inline isl::ctx ctx() const;
3705
3706 inline isl::union_set domain() const;
3708};
3709
3710// declarations for isl::schedule_node_expansion
3711
3713 template <class T>
3714 friend boolean schedule_node::isa() const;
3716 static const auto type = isl_schedule_node_expansion;
3717
3718protected:
3720
3721public:
3722 inline /* implicit */ schedule_node_expansion();
3725 inline isl::ctx ctx() const;
3726
3731};
3732
3733// declarations for isl::schedule_node_extension
3734
3736 template <class T>
3737 friend boolean schedule_node::isa() const;
3739 static const auto type = isl_schedule_node_extension;
3740
3741protected:
3743
3744public:
3745 inline /* implicit */ schedule_node_extension();
3748 inline isl::ctx ctx() const;
3749
3752};
3753
3754// declarations for isl::schedule_node_filter
3755
3756class schedule_node_filter : public schedule_node {
3757 template <class T>
3758 friend boolean schedule_node::isa() const;
3760 static const auto type = isl_schedule_node_filter;
3761
3762protected:
3764
3765public:
3766 inline /* implicit */ schedule_node_filter();
3767 inline /* implicit */ schedule_node_filter(const schedule_node_filter &obj);
3769 inline isl::ctx ctx() const;
3770
3771 inline isl::union_set filter() const;
3773};
3774
3775// declarations for isl::schedule_node_guard
3776
3777class schedule_node_guard : public schedule_node {
3778 template <class T>
3779 friend boolean schedule_node::isa() const;
3781 static const auto type = isl_schedule_node_guard;
3782
3783protected:
3785
3786public:
3787 inline /* implicit */ schedule_node_guard();
3788 inline /* implicit */ schedule_node_guard(const schedule_node_guard &obj);
3790 inline isl::ctx ctx() const;
3791
3792 inline isl::set guard() const;
3793 inline isl::set get_guard() const;
3794};
3795
3796// declarations for isl::schedule_node_leaf
3797
3798class schedule_node_leaf : public schedule_node {
3799 template <class T>
3800 friend boolean schedule_node::isa() const;
3802 static const auto type = isl_schedule_node_leaf;
3803
3804protected:
3806
3807public:
3808 inline /* implicit */ schedule_node_leaf();
3809 inline /* implicit */ schedule_node_leaf(const schedule_node_leaf &obj);
3811 inline isl::ctx ctx() const;
3812
3813};
3814
3815// declarations for isl::schedule_node_mark
3816
3817class schedule_node_mark : public schedule_node {
3818 template <class T>
3819 friend boolean schedule_node::isa() const;
3821 static const auto type = isl_schedule_node_mark;
3822
3823protected:
3825
3826public:
3827 inline /* implicit */ schedule_node_mark();
3828 inline /* implicit */ schedule_node_mark(const schedule_node_mark &obj);
3830 inline isl::ctx ctx() const;
3831
3832 inline isl::id id() const;
3833 inline isl::id get_id() const;
3834};
3835
3836// declarations for isl::schedule_node_sequence
3837
3839 template <class T>
3840 friend boolean schedule_node::isa() const;
3842 static const auto type = isl_schedule_node_sequence;
3843
3844protected:
3846
3847public:
3848 inline /* implicit */ schedule_node_sequence();
3851 inline isl::ctx ctx() const;
3852
3853};
3854
3855// declarations for isl::schedule_node_set
3856
3857class schedule_node_set : public schedule_node {
3858 template <class T>
3859 friend boolean schedule_node::isa() const;
3861 static const auto type = isl_schedule_node_set;
3862
3863protected:
3865
3866public:
3867 inline /* implicit */ schedule_node_set();
3868 inline /* implicit */ schedule_node_set(const schedule_node_set &obj);
3870 inline isl::ctx ctx() const;
3871
3872};
3873
3874// declarations for isl::set
3875inline set manage(__isl_take isl_set *ptr);
3876inline set manage_copy(__isl_keep isl_set *ptr);
3877
3878class set {
3879 friend inline set manage(__isl_take isl_set *ptr);
3880 friend inline set manage_copy(__isl_keep isl_set *ptr);
3881
3882protected:
3883 isl_set *ptr = nullptr;
3884
3885 inline explicit set(__isl_take isl_set *ptr);
3886
3887public:
3888 inline /* implicit */ set();
3889 inline /* implicit */ set(const set &obj);
3890 inline /* implicit */ set(isl::basic_set bset);
3891 inline /* implicit */ set(isl::point pnt);
3892 inline explicit set(isl::union_set uset);
3893 inline explicit set(isl::ctx ctx, const std::string &str);
3895 inline ~set();
3896 inline __isl_give isl_set *copy() const &;
3897 inline __isl_give isl_set *copy() && = delete;
3898 inline __isl_keep isl_set *get() const;
3900 inline bool is_null() const;
3901 inline isl::ctx ctx() const;
3902
3904 inline isl::set add_dims(isl::dim type, unsigned int n) const;
3905 inline isl::basic_set affine_hull() const;
3906 inline isl::set align_params(isl::space model) const;
3907 inline isl::set apply(isl::map map) const;
3908 inline isl::union_set apply(const isl::union_map &umap) const;
3909 inline isl::set apply(const isl::basic_map &map) const;
3911 inline isl::set as_set() const;
3912 inline isl::basic_set_list basic_set_list() const;
3913 inline isl::basic_set_list get_basic_set_list() const;
3914 inline isl::set bind(isl::multi_id tuple) const;
3915 inline isl::set coalesce() const;
3916 inline isl::set complement() const;
3917 inline isl::union_set compute_divs() const;
3918 inline boolean contains(const isl::space &space) const;
3919 inline isl::basic_set convex_hull() const;
3920 inline isl::set detect_equalities() const;
3921 inline class size dim(isl::dim type) const;
3922 inline boolean dim_has_any_lower_bound(isl::dim type, unsigned int pos) const;
3923 inline isl::id dim_id(isl::dim type, unsigned int pos) const;
3924 inline isl::id get_dim_id(isl::dim type, unsigned int pos) const;
3925 inline isl::pw_aff dim_max(int pos) const;
3926 inline isl::val dim_max_val(int pos) const;
3927 inline isl::pw_aff dim_min(int pos) const;
3928 inline isl::val dim_min_val(int pos) const;
3929 inline std::string dim_name(isl::dim type, unsigned int pos) const;
3930 inline std::string get_dim_name(isl::dim type, unsigned int pos) const;
3931 inline isl::set drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const;
3932 inline isl::set eliminate(isl::dim type, unsigned int first, unsigned int n) const;
3933 static inline isl::set empty(isl::space space);
3934 inline boolean every_set(const std::function<boolean(isl::set)> &test) const;
3935 inline isl::set extract_set(const isl::space &space) const;
3936 inline int find_dim_by_id(isl::dim type, const isl::id &id) const;
3937 inline int find_dim_by_id(isl::dim type, const std::string &id) const;
3938 inline isl::set fix_si(isl::dim type, unsigned int pos, int value) const;
3939 inline isl::set flatten() const;
3940 inline stat foreach_basic_set(const std::function<stat(isl::basic_set)> &fn) const;
3941 inline stat foreach_point(const std::function<stat(isl::point)> &fn) const;
3942 inline stat foreach_set(const std::function<stat(isl::set)> &fn) const;
3943 inline isl::set gist(isl::set context) const;
3944 inline isl::union_set gist(const isl::union_set &context) const;
3945 inline isl::set gist(const isl::basic_set &context) const;
3946 inline isl::set gist(const isl::point &context) const;
3948 inline boolean has_equal_space(const isl::set &set2) const;
3949 inline isl::map identity() const;
3952 inline isl::set insert_dims(isl::dim type, unsigned int pos, unsigned int n) const;
3954 inline isl::set intersect(isl::set set2) const;
3955 inline isl::union_set intersect(const isl::union_set &uset2) const;
3956 inline isl::set intersect(const isl::basic_set &set2) const;
3957 inline isl::set intersect(const isl::point &set2) const;
3959 inline boolean involves_dims(isl::dim type, unsigned int first, unsigned int n) const;
3960 inline boolean involves_locals() const;
3961 inline boolean is_bounded() const;
3962 inline boolean is_disjoint(const isl::set &set2) const;
3963 inline boolean is_disjoint(const isl::union_set &uset2) const;
3964 inline boolean is_disjoint(const isl::basic_set &set2) const;
3965 inline boolean is_disjoint(const isl::point &set2) const;
3966 inline boolean is_empty() const;
3967 inline boolean is_equal(const isl::set &set2) const;
3968 inline boolean is_equal(const isl::union_set &uset2) const;
3969 inline boolean is_equal(const isl::basic_set &set2) const;
3970 inline boolean is_equal(const isl::point &set2) const;
3971 inline boolean is_params() const;
3972 inline boolean is_singleton() const;
3973 inline boolean is_strict_subset(const isl::set &set2) const;
3974 inline boolean is_strict_subset(const isl::union_set &uset2) const;
3975 inline boolean is_strict_subset(const isl::basic_set &set2) const;
3976 inline boolean is_strict_subset(const isl::point &set2) const;
3977 inline boolean is_subset(const isl::set &set2) const;
3978 inline boolean is_subset(const isl::union_set &uset2) const;
3979 inline boolean is_subset(const isl::basic_set &set2) const;
3980 inline boolean is_subset(const isl::point &set2) const;
3981 inline boolean is_wrapping() const;
3982 inline boolean isa_set() const;
3983 inline isl::set lexmax() const;
3985 inline isl::set lexmin() const;
3987 inline isl::set lower_bound(isl::multi_pw_aff lower) const;
3988 inline isl::set lower_bound(isl::multi_val lower) const;
3989 inline isl::set lower_bound_si(isl::dim type, unsigned int pos, int value) const;
3990 inline isl::set lower_bound_val(isl::dim type, unsigned int pos, isl::val value) const;
3991 inline isl::set lower_bound_val(isl::dim type, unsigned int pos, long value) const;
3993 inline isl::val max_val(const isl::aff &obj) const;
3995 inline isl::val min_val(const isl::aff &obj) const;
3996 inline class size n_basic_set() const;
3997 inline isl::set params() const;
3998 inline isl::val plain_get_val_if_fixed(isl::dim type, unsigned int pos) const;
4002 inline isl::set preimage(isl::multi_aff ma) const;
4003 inline isl::set preimage(isl::multi_pw_aff mpa) const;
4005 inline isl::union_set preimage(const isl::union_pw_multi_aff &upma) const;
4006 inline isl::set product(isl::set set2) const;
4007 inline isl::set project_out(isl::dim type, unsigned int first, unsigned int n) const;
4009 inline isl::set project_out_param(isl::id id) const;
4010 inline isl::set project_out_param(const std::string &id) const;
4011 inline isl::set project_out_param(isl::id_list list) const;
4013 inline isl::set remove_dims(isl::dim type, unsigned int first, unsigned int n) const;
4014 inline isl::set remove_divs() const;
4015 inline isl::set remove_redundancies() const;
4016 inline isl::set reset_tuple_id() const;
4017 inline isl::basic_set sample() const;
4018 inline isl::point sample_point() const;
4019 inline isl::set set_dim_id(isl::dim type, unsigned int pos, isl::id id) const;
4020 inline isl::set set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const;
4021 inline isl::set_list set_list() const;
4022 inline isl::set set_tuple_id(isl::id id) const;
4023 inline isl::set set_tuple_id(const std::string &id) const;
4026 inline isl::basic_set simple_hull() const;
4027 inline isl::space space() const;
4028 inline isl::space get_space() const;
4029 inline isl::val stride(int pos) const;
4030 inline isl::val get_stride(int pos) const;
4031 inline isl::set subtract(isl::set set2) const;
4032 inline isl::union_set subtract(const isl::union_set &uset2) const;
4033 inline isl::set subtract(const isl::basic_set &set2) const;
4034 inline isl::set subtract(const isl::point &set2) const;
4035 inline isl::set_list to_list() const;
4036 inline isl::union_set to_union_set() const;
4037 inline isl::map translation() const;
4038 inline class size tuple_dim() const;
4039 inline isl::id tuple_id() const;
4040 inline isl::id get_tuple_id() const;
4041 inline std::string tuple_name() const;
4042 inline std::string get_tuple_name() const;
4045 inline isl::set unite(isl::set set2) const;
4046 inline isl::union_set unite(const isl::union_set &uset2) const;
4047 inline isl::set unite(const isl::basic_set &set2) const;
4048 inline isl::set unite(const isl::point &set2) const;
4049 static inline isl::set universe(isl::space space);
4051 inline isl::map unwrap() const;
4052 inline isl::set upper_bound(isl::multi_pw_aff upper) const;
4053 inline isl::set upper_bound(isl::multi_val upper) const;
4054 inline isl::set upper_bound_val(isl::dim type, unsigned int pos, isl::val value) const;
4055 inline isl::set upper_bound_val(isl::dim type, unsigned int pos, long value) const;
4056};
4057
4058// declarations for isl::set_list
4061
4062class set_list {
4063 friend inline set_list manage(__isl_take isl_set_list *ptr);
4065
4066protected:
4067 isl_set_list *ptr = nullptr;
4068
4070
4071public:
4072 inline /* implicit */ set_list();
4073 inline /* implicit */ set_list(const set_list &obj);
4074 inline explicit set_list(isl::ctx ctx, int n);
4075 inline explicit set_list(isl::set el);
4076 inline explicit set_list(isl::ctx ctx, const std::string &str);
4078 inline ~set_list();
4079 inline __isl_give isl_set_list *copy() const &;
4080 inline __isl_give isl_set_list *copy() && = delete;
4081 inline __isl_keep isl_set_list *get() const;
4083 inline bool is_null() const;
4084 inline isl::ctx ctx() const;
4085
4086 inline isl::set_list add(isl::set el) const;
4087 inline isl::set at(int index) const;
4088 inline isl::set get_at(int index) const;
4089 inline isl::set_list clear() const;
4090 inline isl::set_list concat(isl::set_list list2) const;
4091 inline isl::set_list drop(unsigned int first, unsigned int n) const;
4092 inline stat foreach(const std::function<stat(isl::set)> &fn) const;
4093 inline isl::set_list insert(unsigned int pos, isl::set el) const;
4094 inline class size size() const;
4095};
4096
4097// declarations for isl::space
4100
4101class space {
4102 friend inline space manage(__isl_take isl_space *ptr);
4103 friend inline space manage_copy(__isl_keep isl_space *ptr);
4104
4105protected:
4106 isl_space *ptr = nullptr;
4107
4108 inline explicit space(__isl_take isl_space *ptr);
4109
4110public:
4111 inline /* implicit */ space();
4112 inline /* implicit */ space(const space &obj);
4113 inline explicit space(isl::ctx ctx, unsigned int nparam, unsigned int n_in, unsigned int n_out);
4114 inline explicit space(isl::ctx ctx, unsigned int nparam, unsigned int dim);
4116 inline ~space();
4117 inline __isl_give isl_space *copy() const &;
4118 inline __isl_give isl_space *copy() && = delete;
4119 inline __isl_keep isl_space *get() const;
4121 inline bool is_null() const;
4122 inline isl::ctx ctx() const;
4123
4124 inline isl::space add_dims(isl::dim type, unsigned int n) const;
4125 inline isl::space add_named_tuple(isl::id tuple_id, unsigned int dim) const;
4126 inline isl::space add_named_tuple(const std::string &tuple_id, unsigned int dim) const;
4127 inline isl::space add_param(isl::id id) const;
4128 inline isl::space add_param(const std::string &id) const;
4129 inline isl::space add_unnamed_tuple(unsigned int dim) const;
4130 inline isl::space align_params(isl::space space2) const;
4131 inline isl::space curry() const;
4132 inline class size dim(isl::dim type) const;
4133 inline isl::id dim_id(isl::dim type, unsigned int pos) const;
4134 inline isl::id get_dim_id(isl::dim type, unsigned int pos) const;
4135 inline isl::space domain() const;
4138 inline isl::id domain_tuple_id() const;
4139 inline isl::id get_domain_tuple_id() const;
4140 inline isl::space drop_dims(isl::dim type, unsigned int first, unsigned int num) const;
4141 inline int find_dim_by_id(isl::dim type, const isl::id &id) const;
4142 inline int find_dim_by_id(isl::dim type, const std::string &id) const;
4143 inline isl::space flatten_domain() const;
4144 inline isl::space flatten_range() const;
4145 inline boolean has_domain_tuple_id() const;
4146 inline boolean has_equal_tuples(const isl::space &space2) const;
4147 inline boolean has_range_tuple_id() const;
4148 inline boolean has_tuple_id(isl::dim type) const;
4149 inline boolean has_tuple_name(isl::dim type) const;
4153 inline boolean is_equal(const isl::space &space2) const;
4154 inline boolean is_params() const;
4155 inline boolean is_set() const;
4156 inline boolean is_wrapping() const;
4158 inline isl::space map_from_set() const;
4159 inline isl::multi_aff multi_aff(isl::aff_list list) const;
4161 inline isl::multi_id multi_id(isl::id_list list) const;
4164 inline isl::multi_val multi_val(isl::val_list list) const;
4165 inline isl::aff param_aff_on_domain(isl::id id) const;
4166 inline isl::aff param_aff_on_domain(const std::string &id) const;
4167 inline isl::space params() const;
4168 static inline isl::space params_alloc(isl::ctx ctx, unsigned int nparam);
4169 inline isl::space product(isl::space right) const;
4170 inline isl::space range() const;
4173 inline isl::space range_reverse() const;
4174 inline isl::id range_tuple_id() const;
4175 inline isl::id get_range_tuple_id() const;
4176 inline isl::space reverse() const;
4177 inline isl::space set_dim_id(isl::dim type, unsigned int pos, isl::id id) const;
4178 inline isl::space set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const;
4179 inline isl::space set_domain_tuple(isl::id id) const;
4180 inline isl::space set_domain_tuple(const std::string &id) const;
4181 inline isl::space set_from_params() const;
4182 inline isl::space set_range_tuple(isl::id id) const;
4183 inline isl::space set_range_tuple(const std::string &id) const;
4184 inline isl::space set_tuple_id(isl::dim type, isl::id id) const;
4185 inline isl::space set_tuple_id(isl::dim type, const std::string &id) const;
4186 inline isl::id tuple_id(isl::dim type) const;
4187 inline isl::id get_tuple_id(isl::dim type) const;
4188 inline std::string tuple_name(isl::dim type) const;
4189 inline std::string get_tuple_name(isl::dim type) const;
4190 inline isl::space uncurry() const;
4191 static inline isl::space unit(isl::ctx ctx);
4192 inline isl::map universe_map() const;
4193 inline isl::set universe_set() const;
4194 inline isl::space unwrap() const;
4195 inline isl::space wrap() const;
4196 inline isl::aff zero_aff_on_domain() const;
4201};
4202
4203// declarations for isl::union_access_info
4206
4207class union_access_info {
4210
4211protected:
4212 isl_union_access_info *ptr = nullptr;
4213
4215
4216public:
4217 inline /* implicit */ union_access_info();
4218 inline /* implicit */ union_access_info(const union_access_info &obj);
4219 inline explicit union_access_info(isl::union_map sink);
4226 inline bool is_null() const;
4227 inline isl::ctx ctx() const;
4228
4229 inline isl::union_flow compute_flow() const;
4235};
4236
4237// declarations for isl::union_flow
4240
4241class union_flow {
4244
4245protected:
4246 isl_union_flow *ptr = nullptr;
4247
4249
4250public:
4251 inline /* implicit */ union_flow();
4252 inline /* implicit */ union_flow(const union_flow &obj);
4254 inline ~union_flow();
4255 inline __isl_give isl_union_flow *copy() const &;
4256 inline __isl_give isl_union_flow *copy() && = delete;
4259 inline bool is_null() const;
4260 inline isl::ctx ctx() const;
4261
4268 inline isl::union_map may_no_source() const;
4274};
4275
4276// declarations for isl::union_map
4279
4280class union_map {
4283
4284protected:
4285 isl_union_map *ptr = nullptr;
4286
4288
4289public:
4290 inline /* implicit */ union_map();
4291 inline /* implicit */ union_map(const union_map &obj);
4292 inline /* implicit */ union_map(isl::basic_map bmap);
4293 inline /* implicit */ union_map(isl::map map);
4294 inline explicit union_map(isl::ctx ctx, const std::string &str);
4296 inline ~union_map();
4297 inline __isl_give isl_union_map *copy() const &;
4298 inline __isl_give isl_union_map *copy() && = delete;
4301 inline bool is_null() const;
4302 inline isl::ctx ctx() const;
4303
4304 inline isl::union_map affine_hull() const;
4305 inline isl::union_map apply_domain(isl::union_map umap2) const;
4306 inline isl::union_map apply_range(isl::union_map umap2) const;
4307 inline isl::map as_map() const;
4311 inline isl::union_map coalesce() const;
4312 inline isl::union_map compute_divs() const;
4313 inline isl::union_map curry() const;
4314 inline isl::union_set deltas() const;
4316 inline isl::union_set domain() const;
4319 inline isl::union_map domain_map() const;
4322 static inline isl::union_map empty(isl::ctx ctx);
4324 inline boolean every_map(const std::function<boolean(isl::map)> &test) const;
4326 inline isl::union_map factor_domain() const;
4327 inline isl::union_map factor_range() const;
4328 inline isl::union_map fixed_power(isl::val exp) const;
4329 inline isl::union_map fixed_power(long exp) const;
4330 inline isl::union_map flat_range_product(isl::union_map umap2) const;
4331 inline stat foreach_map(const std::function<stat(isl::map)> &fn) const;
4333 static inline isl::union_map from(isl::union_pw_multi_aff upma);
4334 static inline isl::union_map from_domain(isl::union_set uset);
4336 static inline isl::union_map from_range(isl::union_set uset);
4338 inline isl::union_map gist_domain(isl::union_set uset) const;
4340 inline isl::union_map gist_range(isl::union_set uset) const;
4341 inline isl::union_map intersect(isl::union_map umap2) const;
4351 inline boolean is_bijective() const;
4352 inline boolean is_disjoint(const isl::union_map &umap2) const;
4353 inline boolean is_empty() const;
4354 inline boolean is_equal(const isl::union_map &umap2) const;
4355 inline boolean is_injective() const;
4356 inline boolean is_single_valued() const;
4357 inline boolean is_strict_subset(const isl::union_map &umap2) const;
4358 inline boolean is_subset(const isl::union_map &umap2) const;
4359 inline boolean isa_map() const;
4360 inline isl::union_map lexmax() const;
4361 inline isl::union_map lexmin() const;
4362 inline isl::map_list map_list() const;
4363 inline isl::map_list get_map_list() const;
4364 inline isl::set params() const;
4373 inline isl::union_map product(isl::union_map umap2) const;
4375 inline isl::union_set range() const;
4378 inline isl::union_map range_map() const;
4379 inline isl::union_map range_product(isl::union_map umap2) const;
4380 inline isl::union_map range_reverse() const;
4381 inline isl::union_map reverse() const;
4382 inline isl::space space() const;
4383 inline isl::space get_space() const;
4384 inline isl::union_map subtract(isl::union_map umap2) const;
4387 inline isl::union_map uncurry() const;
4388 inline isl::union_map unite(isl::union_map umap2) const;
4389 inline isl::union_map universe() const;
4390 inline isl::union_set wrap() const;
4391 inline isl::union_map zip() const;
4392};
4393
4394// declarations for isl::union_pw_aff
4397
4398class union_pw_aff {
4401
4402protected:
4403 isl_union_pw_aff *ptr = nullptr;
4404
4406
4407public:
4408 inline /* implicit */ union_pw_aff();
4409 inline /* implicit */ union_pw_aff(const union_pw_aff &obj);
4410 inline /* implicit */ union_pw_aff(isl::aff aff);
4411 inline /* implicit */ union_pw_aff(isl::pw_aff pa);
4412 inline explicit union_pw_aff(isl::ctx ctx, const std::string &str);
4413 inline explicit union_pw_aff(isl::union_set domain, isl::val v);
4417 inline __isl_give isl_union_pw_aff *copy() && = delete;
4420 inline bool is_null() const;
4421 inline isl::ctx ctx() const;
4422
4423 inline isl::multi_union_pw_aff add(const isl::multi_union_pw_aff &multi2) const;
4424 inline isl::union_pw_aff add(isl::union_pw_aff upa2) const;
4425 inline isl::union_pw_multi_aff add(const isl::union_pw_multi_aff &upma2) const;
4426 inline isl::union_pw_aff add(const isl::aff &upa2) const;
4427 inline isl::union_pw_aff add(const isl::pw_aff &upa2) const;
4429 inline isl::union_pw_multi_aff apply(const isl::union_pw_multi_aff &upma2) const;
4432 inline isl::union_map as_union_map() const;
4433 inline isl::union_pw_aff at(int pos) const;
4434 inline isl::union_set bind(const isl::multi_id &tuple) const;
4435 inline isl::union_set bind(isl::id id) const;
4436 inline isl::union_set bind(const std::string &id) const;
4437 inline isl::union_pw_aff coalesce() const;
4438 inline class size dim(isl::dim type) const;
4439 inline isl::union_set domain() const;
4440 static inline isl::union_pw_aff empty(isl::space space);
4444 inline stat foreach_pw_aff(const std::function<stat(isl::pw_aff)> &fn) const;
4446 inline boolean has_range_tuple_id() const;
4452 inline boolean involves_locals() const;
4453 inline boolean involves_nan() const;
4454 inline boolean isa_pw_multi_aff() const;
4455 inline isl::union_pw_aff_list list() const;
4456 inline isl::multi_union_pw_aff neg() const;
4457 inline boolean plain_is_empty() const;
4458 inline boolean plain_is_equal(const isl::multi_union_pw_aff &multi2) const;
4466 inline isl::id range_tuple_id() const;
4469 inline isl::multi_union_pw_aff scale(const isl::multi_val &mv) const;
4470 inline isl::multi_union_pw_aff scale(const isl::val &v) const;
4471 inline isl::multi_union_pw_aff scale(long v) const;
4472 inline isl::multi_union_pw_aff scale_down(const isl::multi_val &mv) const;
4473 inline isl::multi_union_pw_aff scale_down(const isl::val &v) const;
4474 inline isl::multi_union_pw_aff scale_down(long v) const;
4475 inline isl::multi_union_pw_aff set_at(int pos, const isl::union_pw_aff &el) const;
4476 inline isl::multi_union_pw_aff set_range_tuple(const isl::id &id) const;
4477 inline isl::multi_union_pw_aff set_range_tuple(const std::string &id) const;
4478 inline isl::multi_union_pw_aff set_union_pw_aff(int pos, const isl::union_pw_aff &el) const;
4479 inline class size size() const;
4480 inline isl::space space() const;
4481 inline isl::space get_space() const;
4482 inline isl::multi_union_pw_aff sub(const isl::multi_union_pw_aff &multi2) const;
4483 inline isl::union_pw_aff sub(isl::union_pw_aff upa2) const;
4484 inline isl::union_pw_multi_aff sub(const isl::union_pw_multi_aff &upma2) const;
4485 inline isl::union_pw_aff sub(const isl::aff &upa2) const;
4486 inline isl::union_pw_aff sub(const isl::pw_aff &upa2) const;
4493 inline isl::union_pw_aff union_add(const isl::aff &upa2) const;
4494 inline isl::union_pw_aff union_add(const isl::pw_aff &upa2) const;
4495};
4496
4497// declarations for isl::union_pw_aff_list
4498inline union_pw_aff_list manage(__isl_take isl_union_pw_aff_list *ptr);
4499inline union_pw_aff_list manage_copy(__isl_keep isl_union_pw_aff_list *ptr);
4500
4501class union_pw_aff_list {
4502 friend inline union_pw_aff_list manage(__isl_take isl_union_pw_aff_list *ptr);
4503 friend inline union_pw_aff_list manage_copy(__isl_keep isl_union_pw_aff_list *ptr);
4504
4505protected:
4506 isl_union_pw_aff_list *ptr = nullptr;
4507
4508 inline explicit union_pw_aff_list(__isl_take isl_union_pw_aff_list *ptr);
4509
4510public:
4511 inline /* implicit */ union_pw_aff_list();
4512 inline /* implicit */ union_pw_aff_list(const union_pw_aff_list &obj);
4513 inline explicit union_pw_aff_list(isl::ctx ctx, int n);
4515 inline explicit union_pw_aff_list(isl::ctx ctx, const std::string &str);
4518 inline __isl_give isl_union_pw_aff_list *copy() const &;
4519 inline __isl_give isl_union_pw_aff_list *copy() && = delete;
4520 inline __isl_keep isl_union_pw_aff_list *get() const;
4521 inline __isl_give isl_union_pw_aff_list *release();
4522 inline bool is_null() const;
4523 inline isl::ctx ctx() const;
4524
4526 inline isl::union_pw_aff at(int index) const;
4527 inline isl::union_pw_aff get_at(int index) const;
4528 inline isl::union_pw_aff_list clear() const;
4530 inline isl::union_pw_aff_list drop(unsigned int first, unsigned int n) const;
4531 inline stat foreach(const std::function<stat(isl::union_pw_aff)> &fn) const;
4532 inline isl::union_pw_aff_list insert(unsigned int pos, isl::union_pw_aff el) const;
4533 inline class size size() const;
4534};
4535
4536// declarations for isl::union_pw_multi_aff
4539
4540class union_pw_multi_aff {
4543
4544protected:
4545 isl_union_pw_multi_aff *ptr = nullptr;
4546
4548
4549public:
4550 inline /* implicit */ union_pw_multi_aff();
4551 inline /* implicit */ union_pw_multi_aff(const union_pw_multi_aff &obj);
4552 inline explicit union_pw_multi_aff(isl::union_set uset);
4553 inline /* implicit */ union_pw_multi_aff(isl::multi_aff ma);
4555 inline explicit union_pw_multi_aff(isl::union_map umap);
4556 inline /* implicit */ union_pw_multi_aff(isl::union_pw_aff upa);
4557 inline explicit union_pw_multi_aff(isl::ctx ctx, const std::string &str);
4564 inline bool is_null() const;
4565 inline isl::ctx ctx() const;
4566
4572 inline isl::union_map as_union_map() const;
4574 inline isl::union_set domain() const;
4575 static inline isl::union_pw_multi_aff empty(isl::space space);
4585 inline boolean involves_locals() const;
4586 inline boolean isa_pw_multi_aff() const;
4587 inline boolean plain_is_empty() const;
4595 inline isl::space space() const;
4596 inline isl::space get_space() const;
4601};
4602
4603// declarations for isl::union_set
4606
4607class union_set {
4610
4611protected:
4612 isl_union_set *ptr = nullptr;
4613
4615
4616public:
4617 inline /* implicit */ union_set();
4618 inline /* implicit */ union_set(const union_set &obj);
4619 inline /* implicit */ union_set(isl::basic_set bset);
4620 inline /* implicit */ union_set(isl::point pnt);
4621 inline /* implicit */ union_set(isl::set set);
4622 inline explicit union_set(isl::ctx ctx, const std::string &str);
4624 inline ~union_set();
4625 inline __isl_give isl_union_set *copy() const &;
4626 inline __isl_give isl_union_set *copy() && = delete;
4629 inline bool is_null() const;
4630 inline isl::ctx ctx() const;
4631
4632 inline isl::union_set affine_hull() const;
4633 inline isl::union_set apply(isl::union_map umap) const;
4634 inline isl::set as_set() const;
4635 inline isl::union_set coalesce() const;
4636 inline isl::union_set compute_divs() const;
4637 inline boolean contains(const isl::space &space) const;
4639 static inline isl::union_set empty(isl::ctx ctx);
4640 inline boolean every_set(const std::function<boolean(isl::set)> &test) const;
4642 inline stat foreach_point(const std::function<stat(isl::point)> &fn) const;
4643 inline stat foreach_set(const std::function<stat(isl::set)> &fn) const;
4646 inline isl::union_map identity() const;
4648 inline isl::union_set intersect(isl::union_set uset2) const;
4650 inline boolean is_disjoint(const isl::union_set &uset2) const;
4651 inline boolean is_empty() const;
4652 inline boolean is_equal(const isl::union_set &uset2) const;
4653 inline boolean is_strict_subset(const isl::union_set &uset2) const;
4654 inline boolean is_subset(const isl::union_set &uset2) const;
4655 inline boolean isa_set() const;
4656 inline isl::union_set lexmax() const;
4657 inline isl::union_set lexmin() const;
4658 inline isl::set params() const;
4663 inline isl::point sample_point() const;
4664 inline isl::set_list set_list() const;
4665 inline isl::set_list get_set_list() const;
4666 inline isl::space space() const;
4667 inline isl::space get_space() const;
4668 inline isl::union_set subtract(isl::union_set uset2) const;
4669 inline isl::union_set_list to_list() const;
4670 inline isl::union_set unite(isl::union_set uset2) const;
4671 inline isl::union_set universe() const;
4672 inline isl::union_map unwrap() const;
4673};
4674
4675// declarations for isl::union_set_list
4678
4679class union_set_list {
4682
4683protected:
4684 isl_union_set_list *ptr = nullptr;
4685
4687
4688public:
4689 inline /* implicit */ union_set_list();
4690 inline /* implicit */ union_set_list(const union_set_list &obj);
4691 inline explicit union_set_list(isl::ctx ctx, int n);
4692 inline explicit union_set_list(isl::union_set el);
4693 inline explicit union_set_list(isl::ctx ctx, const std::string &str);
4697 inline __isl_give isl_union_set_list *copy() && = delete;
4700 inline bool is_null() const;
4701 inline isl::ctx ctx() const;
4702
4703 inline isl::union_set_list add(isl::union_set el) const;
4704 inline isl::union_set at(int index) const;
4705 inline isl::union_set get_at(int index) const;
4706 inline isl::union_set_list clear() const;
4708 inline isl::union_set_list drop(unsigned int first, unsigned int n) const;
4709 inline stat foreach(const std::function<stat(isl::union_set)> &fn) const;
4710 inline isl::union_set_list insert(unsigned int pos, isl::union_set el) const;
4711 inline class size size() const;
4712};
4713
4714// declarations for isl::val
4717
4718class val {
4719 friend inline val manage(__isl_take isl_val *ptr);
4720 friend inline val manage_copy(__isl_keep isl_val *ptr);
4721
4722protected:
4723 isl_val *ptr = nullptr;
4724
4725 inline explicit val(__isl_take isl_val *ptr);
4726
4727public:
4728 inline /* implicit */ val();
4729 inline /* implicit */ val(const val &obj);
4730 inline explicit val(isl::ctx ctx, long i);
4731 inline explicit val(isl::ctx ctx, const std::string &str);
4733 inline ~val();
4734 inline __isl_give isl_val *copy() const &;
4735 inline __isl_give isl_val *copy() && = delete;
4736 inline __isl_keep isl_val *get() const;
4738 inline bool is_null() const;
4739 inline isl::ctx ctx() const;
4740
4741 inline isl::val abs() const;
4742 inline boolean abs_eq(const isl::val &v2) const;
4743 inline boolean abs_eq(long v2) const;
4744 inline isl::val add(isl::val v2) const;
4745 inline isl::val add(long v2) const;
4746 inline isl::val ceil() const;
4747 inline int cmp_si(long i) const;
4748 inline long den_si() const;
4749 inline long get_den_si() const;
4750 inline isl::val div(isl::val v2) const;
4751 inline isl::val div(long v2) const;
4752 inline boolean eq(const isl::val &v2) const;
4753 inline boolean eq(long v2) const;
4754 inline isl::val floor() const;
4755 inline isl::val gcd(isl::val v2) const;
4756 inline isl::val gcd(long v2) const;
4757 inline boolean ge(const isl::val &v2) const;
4758 inline boolean ge(long v2) const;
4759 inline boolean gt(const isl::val &v2) const;
4760 inline boolean gt(long v2) const;
4761 static inline isl::val infty(isl::ctx ctx);
4762 static inline isl::val int_from_ui(isl::ctx ctx, unsigned long u);
4763 inline isl::val inv() const;
4764 inline boolean is_divisible_by(const isl::val &v2) const;
4765 inline boolean is_divisible_by(long v2) const;
4766 inline boolean is_infty() const;
4767 inline boolean is_int() const;
4768 inline boolean is_nan() const;
4769 inline boolean is_neg() const;
4770 inline boolean is_neginfty() const;
4771 inline boolean is_negone() const;
4772 inline boolean is_nonneg() const;
4773 inline boolean is_nonpos() const;
4774 inline boolean is_one() const;
4775 inline boolean is_pos() const;
4776 inline boolean is_rat() const;
4777 inline boolean is_zero() const;
4778 inline boolean le(const isl::val &v2) const;
4779 inline boolean le(long v2) const;
4780 inline boolean lt(const isl::val &v2) const;
4781 inline boolean lt(long v2) const;
4782 inline isl::val max(isl::val v2) const;
4783 inline isl::val max(long v2) const;
4784 inline isl::val min(isl::val v2) const;
4785 inline isl::val min(long v2) const;
4786 inline isl::val mod(isl::val v2) const;
4787 inline isl::val mod(long v2) const;
4788 inline isl::val mul(isl::val v2) const;
4789 inline isl::val mul(long v2) const;
4790 static inline isl::val nan(isl::ctx ctx);
4791 inline boolean ne(const isl::val &v2) const;
4792 inline boolean ne(long v2) const;
4793 inline isl::val neg() const;
4794 static inline isl::val neginfty(isl::ctx ctx);
4795 static inline isl::val negone(isl::ctx ctx);
4796 inline long num_si() const;
4797 inline long get_num_si() const;
4798 static inline isl::val one(isl::ctx ctx);
4799 inline isl::val pow2() const;
4800 inline int sgn() const;
4801 inline isl::val sub(isl::val v2) const;
4802 inline isl::val sub(long v2) const;
4803 inline isl::val_list to_list() const;
4804 inline isl::val trunc() const;
4805 static inline isl::val zero(isl::ctx ctx);
4806};
4807
4808// declarations for isl::val_list
4809inline val_list manage(__isl_take isl_val_list *ptr);
4810inline val_list manage_copy(__isl_keep isl_val_list *ptr);
4811
4812class val_list {
4813 friend inline val_list manage(__isl_take isl_val_list *ptr);
4814 friend inline val_list manage_copy(__isl_keep isl_val_list *ptr);
4815
4816protected:
4817 isl_val_list *ptr = nullptr;
4818
4819 inline explicit val_list(__isl_take isl_val_list *ptr);
4820
4821public:
4822 inline /* implicit */ val_list();
4823 inline /* implicit */ val_list(const val_list &obj);
4824 inline explicit val_list(isl::ctx ctx, int n);
4825 inline explicit val_list(isl::val el);
4826 inline explicit val_list(isl::ctx ctx, const std::string &str);
4828 inline ~val_list();
4829 inline __isl_give isl_val_list *copy() const &;
4830 inline __isl_give isl_val_list *copy() && = delete;
4831 inline __isl_keep isl_val_list *get() const;
4832 inline __isl_give isl_val_list *release();
4833 inline bool is_null() const;
4834 inline isl::ctx ctx() const;
4835
4836 inline isl::val_list add(isl::val el) const;
4837 inline isl::val_list add(long el) const;
4838 inline isl::val at(int index) const;
4839 inline isl::val get_at(int index) const;
4840 inline isl::val_list clear() const;
4841 inline isl::val_list concat(isl::val_list list2) const;
4842 inline isl::val_list drop(unsigned int first, unsigned int n) const;
4843 inline stat foreach(const std::function<stat(isl::val)> &fn) const;
4844 inline isl::val_list insert(unsigned int pos, isl::val el) const;
4845 inline isl::val_list insert(unsigned int pos, long el) const;
4846 inline class size size() const;
4847};
4848
4849// implementations for isl::aff
4851 return aff(ptr);
4852}
4854 ptr = isl_aff_copy(ptr);
4855 return aff(ptr);
4856}
4857
4858aff::aff()
4859 : ptr(nullptr) {}
4860
4861aff::aff(const aff &obj)
4862 : ptr(nullptr)
4863{
4864 ptr = obj.copy();
4865}
4866
4868 : ptr(ptr) {}
4869
4870aff::aff(isl::ctx ctx, const std::string &str)
4871{
4872 auto res = isl_aff_read_from_str(ctx.release(), str.c_str());
4873 ptr = res;
4874}
4875
4877{
4879 ptr = res;
4880}
4881
4883{
4884 auto res = isl_aff_zero_on_domain(ls.release());
4885 ptr = res;
4886}
4887
4889 std::swap(this->ptr, obj.ptr);
4890 return *this;
4891}
4892
4893aff::~aff() {
4894 if (ptr)
4896}
4897
4898__isl_give isl_aff *aff::copy() const & {
4899 return isl_aff_copy(ptr);
4900}
4901
4902__isl_keep isl_aff *aff::get() const {
4903 return ptr;
4904}
4905
4907 isl_aff *tmp = ptr;
4908 ptr = nullptr;
4909 return tmp;
4910}
4911
4912bool aff::is_null() const {
4913 return ptr == nullptr;
4914}
4915
4916isl::ctx aff::ctx() const {
4917 return isl::ctx(isl_aff_get_ctx(ptr));
4918}
4919
4920isl::aff aff::add(isl::aff aff2) const
4921{
4922 auto res = isl_aff_add(copy(), aff2.release());
4923 return manage(res);
4924}
4925
4926isl::multi_aff aff::add(const isl::multi_aff &multi2) const
4927{
4928 return isl::multi_aff(*this).add(multi2);
4929}
4930
4931isl::multi_pw_aff aff::add(const isl::multi_pw_aff &multi2) const
4932{
4933 return isl::pw_aff(*this).add(multi2);
4934}
4935
4936isl::multi_union_pw_aff aff::add(const isl::multi_union_pw_aff &multi2) const
4937{
4938 return isl::pw_aff(*this).add(multi2);
4939}
4940
4941isl::pw_aff aff::add(const isl::pw_aff &pwaff2) const
4942{
4943 return isl::pw_aff(*this).add(pwaff2);
4944}
4945
4946isl::pw_multi_aff aff::add(const isl::pw_multi_aff &pma2) const
4947{
4948 return isl::pw_aff(*this).add(pma2);
4949}
4950
4951isl::union_pw_aff aff::add(const isl::union_pw_aff &upa2) const
4952{
4953 return isl::pw_aff(*this).add(upa2);
4954}
4955
4956isl::union_pw_multi_aff aff::add(const isl::union_pw_multi_aff &upma2) const
4957{
4958 return isl::pw_aff(*this).add(upma2);
4959}
4960
4961isl::aff aff::add_constant(isl::val v) const
4962{
4964 return manage(res);
4965}
4966
4967isl::aff aff::add_constant(long v) const
4968{
4969 return this->add_constant(isl::val(ctx(), v));
4970}
4971
4972isl::multi_aff aff::add_constant(const isl::multi_val &mv) const
4973{
4974 return isl::multi_aff(*this).add_constant(mv);
4975}
4976
4978{
4979 auto res = isl_aff_add_constant_si(copy(), v);
4980 return manage(res);
4981}
4982
4984{
4985 return isl::pw_aff(*this).add_dims(type, n);
4986}
4987
4989{
4990 return isl::pw_aff(*this).add_pw_multi_aff(pma);
4991}
4992
4994{
4995 return isl::pw_aff(*this).apply(upma2);
4996}
4997
4998isl::aff aff::as_aff() const
4999{
5000 return isl::pw_aff(*this).as_aff();
5001}
5002
5003isl::map aff::as_map() const
5004{
5005 return isl::pw_aff(*this).as_map();
5006}
5007
5008isl::multi_aff aff::as_multi_aff() const
5009{
5010 return isl::pw_aff(*this).as_multi_aff();
5011}
5012
5013isl::multi_union_pw_aff aff::as_multi_union_pw_aff() const
5014{
5015 return isl::pw_aff(*this).as_multi_union_pw_aff();
5016}
5017
5018isl::pw_multi_aff aff::as_pw_multi_aff() const
5019{
5020 return isl::pw_aff(*this).as_pw_multi_aff();
5021}
5022
5023isl::set aff::as_set() const
5024{
5025 return isl::multi_aff(*this).as_set();
5026}
5027
5028isl::union_map aff::as_union_map() const
5029{
5030 return isl::pw_aff(*this).as_union_map();
5031}
5032
5033isl::aff aff::at(int pos) const
5034{
5035 return isl::multi_aff(*this).at(pos);
5036}
5037
5038isl::basic_set aff::bind(isl::id id) const
5039{
5040 auto res = isl_aff_bind_id(copy(), id.release());
5041 return manage(res);
5042}
5043
5044isl::basic_set aff::bind(const std::string &id) const
5045{
5046 return this->bind(isl::id(ctx(), id));
5047}
5048
5049isl::basic_set aff::bind(const isl::multi_id &tuple) const
5050{
5051 return isl::multi_aff(*this).bind(tuple);
5052}
5053
5054isl::pw_aff aff::bind_domain(const isl::multi_id &tuple) const
5055{
5056 return isl::pw_aff(*this).bind_domain(tuple);
5057}
5058
5059isl::pw_aff aff::bind_domain_wrapped_domain(const isl::multi_id &tuple) const
5060{
5061 return isl::pw_aff(*this).bind_domain_wrapped_domain(tuple);
5062}
5063
5064isl::aff aff::ceil() const
5065{
5066 auto res = isl_aff_ceil(copy());
5067 return manage(res);
5068}
5069
5070isl::pw_aff aff::coalesce() const
5071{
5072 return isl::pw_aff(*this).coalesce();
5073}
5074
5075isl::pw_aff aff::cond(const isl::pw_aff &pwaff_true, const isl::pw_aff &pwaff_false) const
5076{
5077 return isl::pw_aff(*this).cond(pwaff_true, pwaff_false);
5078}
5079
5080isl::multi_val aff::constant_multi_val() const
5081{
5082 return isl::multi_aff(*this).constant_multi_val();
5083}
5084
5085isl::val aff::constant_val() const
5086{
5088 return manage(res);
5089}
5090
5091isl::val aff::get_constant_val() const
5092{
5093 return constant_val();
5094}
5095
5097{
5099 return manage(res);
5100}
5101
5103{
5104 return denominator_val();
5105}
5106
5108{
5109 return isl::multi_aff(*this).dim(type);
5110}
5111
5113{
5114 return isl::pw_aff(*this).dim_id(type, pos);
5115}
5116
5117isl::aff aff::div(isl::aff aff2) const
5118{
5119 auto res = isl_aff_div(copy(), aff2.release());
5120 return manage(res);
5121}
5122
5123isl::pw_aff aff::div(const isl::pw_aff &pa2) const
5124{
5125 return isl::pw_aff(*this).div(pa2);
5126}
5127
5128isl::set aff::domain() const
5129{
5130 return isl::pw_aff(*this).domain();
5131}
5132
5134{
5135 return isl::pw_aff(*this).domain_space();
5136}
5137
5138isl::pw_multi_aff aff::drop_dims(isl::dim type, unsigned int first, unsigned int n) const
5139{
5140 return isl::pw_aff(*this).drop_dims(type, first, n);
5141}
5142
5143isl::set aff::eq_set(isl::aff aff2) const
5144{
5145 auto res = isl_aff_eq_set(copy(), aff2.release());
5146 return manage(res);
5147}
5148
5149isl::set aff::eq_set(const isl::pw_aff &pwaff2) const
5150{
5151 return isl::pw_aff(*this).eq_set(pwaff2);
5152}
5153
5154isl::val aff::eval(isl::point pnt) const
5155{
5156 auto res = isl_aff_eval(copy(), pnt.release());
5157 return manage(res);
5158}
5159
5160isl::pw_multi_aff aff::extract_pw_multi_aff(const isl::space &space) const
5161{
5162 return isl::pw_aff(*this).extract_pw_multi_aff(space);
5163}
5164
5165isl::multi_aff aff::flat_range_product(const isl::multi_aff &multi2) const
5166{
5167 return isl::multi_aff(*this).flat_range_product(multi2);
5168}
5169
5170isl::multi_pw_aff aff::flat_range_product(const isl::multi_pw_aff &multi2) const
5171{
5172 return isl::pw_aff(*this).flat_range_product(multi2);
5173}
5174
5175isl::multi_union_pw_aff aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const
5176{
5177 return isl::pw_aff(*this).flat_range_product(multi2);
5178}
5179
5180isl::pw_multi_aff aff::flat_range_product(const isl::pw_multi_aff &pma2) const
5181{
5182 return isl::pw_aff(*this).flat_range_product(pma2);
5183}
5184
5185isl::union_pw_multi_aff aff::flat_range_product(const isl::union_pw_multi_aff &upma2) const
5186{
5187 return isl::pw_aff(*this).flat_range_product(upma2);
5188}
5189
5190isl::aff aff::floor() const
5191{
5192 auto res = isl_aff_floor(copy());
5193 return manage(res);
5194}
5195
5196stat aff::foreach_piece(const std::function<stat(isl::set, isl::aff)> &fn) const
5197{
5198 return isl::pw_aff(*this).foreach_piece(fn);
5199}
5200
5202{
5203 return isl::pw_aff(*this).foreach_piece(fn);
5204}
5205
5206stat aff::foreach_pw_aff(const std::function<stat(isl::pw_aff)> &fn) const
5207{
5208 return isl::pw_aff(*this).foreach_pw_aff(fn);
5209}
5210
5211isl::set aff::ge_set(isl::aff aff2) const
5212{
5213 auto res = isl_aff_ge_set(copy(), aff2.release());
5214 return manage(res);
5215}
5216
5217isl::set aff::ge_set(const isl::pw_aff &pwaff2) const
5218{
5219 return isl::pw_aff(*this).ge_set(pwaff2);
5220}
5221
5222isl::aff aff::gist(isl::set context) const
5223{
5224 auto res = isl_aff_gist(copy(), context.release());
5225 return manage(res);
5226}
5227
5228isl::union_pw_aff aff::gist(const isl::union_set &context) const
5229{
5230 return isl::pw_aff(*this).gist(context);
5231}
5232
5233isl::aff aff::gist(const isl::basic_set &context) const
5234{
5235 return this->gist(isl::set(context));
5236}
5237
5238isl::aff aff::gist(const isl::point &context) const
5239{
5240 return this->gist(isl::set(context));
5241}
5242
5243isl::set aff::gt_set(isl::aff aff2) const
5244{
5245 auto res = isl_aff_gt_set(copy(), aff2.release());
5246 return manage(res);
5247}
5248
5249isl::set aff::gt_set(const isl::pw_aff &pwaff2) const
5250{
5251 return isl::pw_aff(*this).gt_set(pwaff2);
5252}
5253
5254boolean aff::has_range_tuple_id() const
5255{
5256 return isl::multi_aff(*this).has_range_tuple_id();
5257}
5258
5259isl::multi_aff aff::identity() const
5260{
5261 return isl::multi_aff(*this).identity();
5262}
5263
5264isl::pw_aff aff::insert_domain(const isl::space &domain) const
5265{
5266 return isl::pw_aff(*this).insert_domain(domain);
5267}
5268
5269isl::pw_aff aff::intersect_domain(const isl::set &set) const
5270{
5271 return isl::pw_aff(*this).intersect_domain(set);
5272}
5273
5274isl::union_pw_aff aff::intersect_domain(const isl::space &space) const
5275{
5276 return isl::pw_aff(*this).intersect_domain(space);
5277}
5278
5279isl::union_pw_aff aff::intersect_domain(const isl::union_set &uset) const
5280{
5281 return isl::pw_aff(*this).intersect_domain(uset);
5282}
5283
5284isl::union_pw_aff aff::intersect_domain_wrapped_domain(const isl::union_set &uset) const
5285{
5286 return isl::pw_aff(*this).intersect_domain_wrapped_domain(uset);
5287}
5288
5289isl::union_pw_aff aff::intersect_domain_wrapped_range(const isl::union_set &uset) const
5290{
5291 return isl::pw_aff(*this).intersect_domain_wrapped_range(uset);
5292}
5293
5294isl::pw_aff aff::intersect_params(const isl::set &set) const
5295{
5296 return isl::pw_aff(*this).intersect_params(set);
5297}
5298
5299boolean aff::involves_locals() const
5300{
5301 return isl::multi_aff(*this).involves_locals();
5302}
5303
5304boolean aff::involves_nan() const
5305{
5306 return isl::multi_aff(*this).involves_nan();
5307}
5308
5309boolean aff::involves_param(const isl::id &id) const
5310{
5311 return isl::pw_aff(*this).involves_param(id);
5312}
5313
5314boolean aff::involves_param(const std::string &id) const
5315{
5316 return this->involves_param(isl::id(ctx(), id));
5317}
5318
5319boolean aff::involves_param(const isl::id_list &list) const
5320{
5321 return isl::pw_aff(*this).involves_param(list);
5322}
5323
5324boolean aff::is_cst() const
5325{
5326 auto res = isl_aff_is_cst(get());
5327 return manage(res);
5328}
5329
5330boolean aff::is_equal(const isl::pw_aff &pa2) const
5331{
5332 return isl::pw_aff(*this).is_equal(pa2);
5333}
5334
5335boolean aff::isa_aff() const
5336{
5337 return isl::pw_aff(*this).isa_aff();
5338}
5339
5340boolean aff::isa_multi_aff() const
5341{
5342 return isl::pw_aff(*this).isa_multi_aff();
5343}
5344
5345boolean aff::isa_pw_multi_aff() const
5346{
5347 return isl::pw_aff(*this).isa_pw_multi_aff();
5348}
5349
5350isl::set aff::le_set(isl::aff aff2) const
5351{
5352 auto res = isl_aff_le_set(copy(), aff2.release());
5353 return manage(res);
5354}
5355
5356isl::set aff::le_set(const isl::pw_aff &pwaff2) const
5357{
5358 return isl::pw_aff(*this).le_set(pwaff2);
5359}
5360
5361isl::aff_list aff::list() const
5362{
5363 return isl::multi_aff(*this).list();
5364}
5365
5366isl::set aff::lt_set(isl::aff aff2) const
5367{
5368 auto res = isl_aff_lt_set(copy(), aff2.release());
5369 return manage(res);
5370}
5371
5372isl::set aff::lt_set(const isl::pw_aff &pwaff2) const
5373{
5374 return isl::pw_aff(*this).lt_set(pwaff2);
5375}
5376
5377isl::multi_pw_aff aff::max(const isl::multi_pw_aff &multi2) const
5378{
5379 return isl::pw_aff(*this).max(multi2);
5380}
5381
5382isl::pw_aff aff::max(const isl::pw_aff &pwaff2) const
5383{
5384 return isl::pw_aff(*this).max(pwaff2);
5385}
5386
5387isl::multi_val aff::max_multi_val() const
5388{
5389 return isl::pw_aff(*this).max_multi_val();
5390}
5391
5392isl::multi_pw_aff aff::min(const isl::multi_pw_aff &multi2) const
5393{
5394 return isl::pw_aff(*this).min(multi2);
5395}
5396
5397isl::pw_aff aff::min(const isl::pw_aff &pwaff2) const
5398{
5399 return isl::pw_aff(*this).min(pwaff2);
5400}
5401
5402isl::multi_val aff::min_multi_val() const
5403{
5404 return isl::pw_aff(*this).min_multi_val();
5405}
5406
5407isl::aff aff::mod(isl::val mod) const
5408{
5409 auto res = isl_aff_mod_val(copy(), mod.release());
5410 return manage(res);
5411}
5412
5413isl::aff aff::mod(long mod) const
5414{
5415 return this->mod(isl::val(ctx(), mod));
5416}
5417
5418isl::aff aff::mul(isl::aff aff2) const
5419{
5420 auto res = isl_aff_mul(copy(), aff2.release());
5421 return manage(res);
5422}
5423
5424isl::pw_aff aff::mul(const isl::pw_aff &pwaff2) const
5425{
5426 return isl::pw_aff(*this).mul(pwaff2);
5427}
5428
5429class size aff::n_piece() const
5430{
5431 return isl::pw_aff(*this).n_piece();
5432}
5433
5434isl::set aff::ne_set(isl::aff aff2) const
5435{
5436 auto res = isl_aff_ne_set(copy(), aff2.release());
5437 return manage(res);
5438}
5439
5440isl::set aff::ne_set(const isl::pw_aff &pwaff2) const
5441{
5442 return isl::pw_aff(*this).ne_set(pwaff2);
5443}
5444
5445isl::aff aff::neg() const
5446{
5447 auto res = isl_aff_neg(copy());
5448 return manage(res);
5449}
5450
5451boolean aff::plain_is_empty() const
5452{
5453 return isl::pw_aff(*this).plain_is_empty();
5454}
5455
5456boolean aff::plain_is_equal(const isl::multi_aff &multi2) const
5457{
5458 return isl::multi_aff(*this).plain_is_equal(multi2);
5459}
5460
5461boolean aff::plain_is_equal(const isl::multi_pw_aff &multi2) const
5462{
5463 return isl::pw_aff(*this).plain_is_equal(multi2);
5464}
5465
5466boolean aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
5467{
5468 return isl::pw_aff(*this).plain_is_equal(multi2);
5469}
5470
5471isl::pw_multi_aff aff::preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const
5472{
5473 return isl::pw_aff(*this).preimage_domain_wrapped_domain(pma2);
5474}
5475
5476isl::union_pw_multi_aff aff::preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const
5477{
5478 return isl::pw_aff(*this).preimage_domain_wrapped_domain(upma2);
5479}
5480
5481isl::multi_aff aff::product(const isl::multi_aff &multi2) const
5482{
5483 return isl::multi_aff(*this).product(multi2);
5484}
5485
5486isl::multi_pw_aff aff::product(const isl::multi_pw_aff &multi2) const
5487{
5488 return isl::pw_aff(*this).product(multi2);
5489}
5490
5491isl::pw_multi_aff aff::product(const isl::pw_multi_aff &pma2) const
5492{
5493 return isl::pw_aff(*this).product(pma2);
5494}
5495
5496isl::aff aff::pullback(isl::multi_aff ma) const
5497{
5498 auto res = isl_aff_pullback_multi_aff(copy(), ma.release());
5499 return manage(res);
5500}
5501
5502isl::pw_aff aff::pullback(const isl::multi_pw_aff &mpa) const
5503{
5504 return isl::pw_aff(*this).pullback(mpa);
5505}
5506
5507isl::pw_aff aff::pullback(const isl::pw_multi_aff &pma) const
5508{
5509 return isl::pw_aff(*this).pullback(pma);
5510}
5511
5512isl::union_pw_aff aff::pullback(const isl::union_pw_multi_aff &upma) const
5513{
5514 return isl::pw_aff(*this).pullback(upma);
5515}
5516
5517isl::aff aff::pullback(const isl::aff &ma) const
5518{
5519 return this->pullback(isl::multi_aff(ma));
5520}
5521
5522isl::pw_multi_aff_list aff::pw_multi_aff_list() const
5523{
5524 return isl::pw_aff(*this).pw_multi_aff_list();
5525}
5526
5527isl::pw_multi_aff aff::range_factor_domain() const
5528{
5529 return isl::pw_aff(*this).range_factor_domain();
5530}
5531
5532isl::pw_multi_aff aff::range_factor_range() const
5533{
5534 return isl::pw_aff(*this).range_factor_range();
5535}
5536
5537isl::multi_aff aff::range_product(const isl::multi_aff &multi2) const
5538{
5539 return isl::multi_aff(*this).range_product(multi2);
5540}
5541
5542isl::multi_pw_aff aff::range_product(const isl::multi_pw_aff &multi2) const
5543{
5544 return isl::pw_aff(*this).range_product(multi2);
5545}
5546
5547isl::multi_union_pw_aff aff::range_product(const isl::multi_union_pw_aff &multi2) const
5548{
5549 return isl::pw_aff(*this).range_product(multi2);
5550}
5551
5552isl::pw_multi_aff aff::range_product(const isl::pw_multi_aff &pma2) const
5553{
5554 return isl::pw_aff(*this).range_product(pma2);
5555}
5556
5557isl::union_pw_multi_aff aff::range_product(const isl::union_pw_multi_aff &upma2) const
5558{
5559 return isl::pw_aff(*this).range_product(upma2);
5560}
5561
5562isl::id aff::range_tuple_id() const
5563{
5564 return isl::multi_aff(*this).range_tuple_id();
5565}
5566
5567isl::multi_aff aff::reset_range_tuple_id() const
5568{
5569 return isl::multi_aff(*this).reset_range_tuple_id();
5570}
5571
5573{
5574 return isl::multi_aff(*this).reset_tuple_id(type);
5575}
5576
5578{
5579 auto res = isl_aff_scale_val(copy(), v.release());
5580 return manage(res);
5581}
5582
5583isl::aff aff::scale(long v) const
5584{
5585 return this->scale(isl::val(ctx(), v));
5586}
5587
5588isl::multi_aff aff::scale(const isl::multi_val &mv) const
5589{
5590 return isl::multi_aff(*this).scale(mv);
5591}
5592
5593isl::aff aff::scale_down(isl::val v) const
5594{
5595 auto res = isl_aff_scale_down_val(copy(), v.release());
5596 return manage(res);
5597}
5598
5599isl::aff aff::scale_down(long v) const
5600{
5601 return this->scale_down(isl::val(ctx(), v));
5602}
5603
5604isl::multi_aff aff::scale_down(const isl::multi_val &mv) const
5605{
5606 return isl::multi_aff(*this).scale_down(mv);
5607}
5608
5610{
5611 return isl::multi_aff(*this).set_aff(pos, el);
5612}
5613
5614isl::multi_aff aff::set_at(int pos, const isl::aff &el) const
5615{
5616 return isl::multi_aff(*this).set_at(pos, el);
5617}
5618
5619isl::multi_pw_aff aff::set_at(int pos, const isl::pw_aff &el) const
5620{
5621 return isl::pw_aff(*this).set_at(pos, el);
5622}
5623
5624isl::multi_union_pw_aff aff::set_at(int pos, const isl::union_pw_aff &el) const
5625{
5626 return isl::pw_aff(*this).set_at(pos, el);
5627}
5628
5630{
5631 auto res = isl_aff_set_constant_si(copy(), v);
5632 return manage(res);
5633}
5634
5636{
5637 return isl::pw_aff(*this).set_pw_aff(pos, el);
5638}
5639
5641{
5642 return isl::pw_aff(*this).set_pw_aff(pos, pa);
5643}
5644
5646{
5647 return isl::multi_aff(*this).set_range_tuple(id);
5648}
5649
5650isl::multi_aff aff::set_range_tuple(const std::string &id) const
5651{
5652 return this->set_range_tuple(isl::id(ctx(), id));
5653}
5654
5656{
5657 return isl::pw_aff(*this).set_tuple_id(type, id);
5658}
5659
5660isl::pw_aff aff::set_tuple_id(isl::dim type, const std::string &id) const
5661{
5662 return this->set_tuple_id(type, isl::id(ctx(), id));
5663}
5664
5666{
5667 return isl::pw_aff(*this).set_union_pw_aff(pos, el);
5668}
5669
5670class size aff::size() const
5671{
5672 return isl::multi_aff(*this).size();
5673}
5674
5675isl::space aff::space() const
5676{
5677 return isl::pw_aff(*this).space();
5678}
5679
5680isl::aff aff::sub(isl::aff aff2) const
5681{
5682 auto res = isl_aff_sub(copy(), aff2.release());
5683 return manage(res);
5684}
5685
5686isl::multi_aff aff::sub(const isl::multi_aff &multi2) const
5687{
5688 return isl::multi_aff(*this).sub(multi2);
5689}
5690
5691isl::multi_pw_aff aff::sub(const isl::multi_pw_aff &multi2) const
5692{
5693 return isl::pw_aff(*this).sub(multi2);
5694}
5695
5696isl::multi_union_pw_aff aff::sub(const isl::multi_union_pw_aff &multi2) const
5697{
5698 return isl::pw_aff(*this).sub(multi2);
5699}
5700
5701isl::pw_aff aff::sub(const isl::pw_aff &pwaff2) const
5702{
5703 return isl::pw_aff(*this).sub(pwaff2);
5704}
5705
5706isl::pw_multi_aff aff::sub(const isl::pw_multi_aff &pma2) const
5707{
5708 return isl::pw_aff(*this).sub(pma2);
5709}
5710
5711isl::union_pw_aff aff::sub(const isl::union_pw_aff &upa2) const
5712{
5713 return isl::pw_aff(*this).sub(upa2);
5714}
5715
5716isl::union_pw_multi_aff aff::sub(const isl::union_pw_multi_aff &upma2) const
5717{
5718 return isl::pw_aff(*this).sub(upma2);
5719}
5720
5721isl::pw_aff aff::subtract_domain(const isl::set &set) const
5722{
5723 return isl::pw_aff(*this).subtract_domain(set);
5724}
5725
5726isl::union_pw_aff aff::subtract_domain(const isl::space &space) const
5727{
5728 return isl::pw_aff(*this).subtract_domain(space);
5729}
5730
5731isl::union_pw_aff aff::subtract_domain(const isl::union_set &uset) const
5732{
5733 return isl::pw_aff(*this).subtract_domain(uset);
5734}
5735
5736isl::pw_aff aff::tdiv_q(const isl::pw_aff &pa2) const
5737{
5738 return isl::pw_aff(*this).tdiv_q(pa2);
5739}
5740
5741isl::pw_aff aff::tdiv_r(const isl::pw_aff &pa2) const
5742{
5743 return isl::pw_aff(*this).tdiv_r(pa2);
5744}
5745
5746isl::aff_list aff::to_list() const
5747{
5748 auto res = isl_aff_to_list(copy());
5749 return manage(res);
5750}
5751
5752isl::multi_pw_aff aff::to_multi_pw_aff() const
5753{
5754 return isl::multi_aff(*this).to_multi_pw_aff();
5755}
5756
5757isl::multi_union_pw_aff aff::to_multi_union_pw_aff() const
5758{
5759 return isl::multi_aff(*this).to_multi_union_pw_aff();
5760}
5761
5762isl::pw_multi_aff aff::to_pw_multi_aff() const
5763{
5764 return isl::multi_aff(*this).to_pw_multi_aff();
5765}
5766
5767isl::union_pw_aff aff::to_union_pw_aff() const
5768{
5769 return isl::pw_aff(*this).to_union_pw_aff();
5770}
5771
5772isl::union_pw_multi_aff aff::to_union_pw_multi_aff() const
5773{
5774 return isl::pw_aff(*this).to_union_pw_multi_aff();
5775}
5776
5778{
5779 return isl::pw_aff(*this).tuple_id(type);
5780}
5781
5783{
5785 return manage(res);
5786}
5787
5789{
5790 return isl::pw_aff(*this).union_add(mpa2);
5791}
5792
5793isl::multi_union_pw_aff aff::union_add(const isl::multi_union_pw_aff &mupa2) const
5794{
5795 return isl::pw_aff(*this).union_add(mupa2);
5796}
5797
5798isl::pw_aff aff::union_add(const isl::pw_aff &pwaff2) const
5799{
5800 return isl::pw_aff(*this).union_add(pwaff2);
5801}
5802
5803isl::pw_multi_aff aff::union_add(const isl::pw_multi_aff &pma2) const
5804{
5805 return isl::pw_aff(*this).union_add(pma2);
5806}
5807
5808isl::union_pw_aff aff::union_add(const isl::union_pw_aff &upa2) const
5809{
5810 return isl::pw_aff(*this).union_add(upa2);
5811}
5812
5813isl::union_pw_multi_aff aff::union_add(const isl::union_pw_multi_aff &upma2) const
5814{
5815 return isl::pw_aff(*this).union_add(upma2);
5816}
5817
5819{
5820 auto res = isl_aff_var_on_domain(ls.release(), static_cast<enum isl_dim_type>(type), pos);
5821 return manage(res);
5822}
5823
5825{
5827 return manage(res);
5828}
5829
5830inline std::ostream &operator<<(std::ostream &os, const aff &obj)
5831{
5832 char *str = isl_aff_to_str(obj.get());
5833 if (!str) {
5834 os.setstate(std::ios_base::badbit);
5835 return os;
5836 }
5837 os << str;
5838 free(str);
5839 return os;
5840}
5841
5842// implementations for isl::aff_list
5843aff_list manage(__isl_take isl_aff_list *ptr) {
5844 return aff_list(ptr);
5845}
5846aff_list manage_copy(__isl_keep isl_aff_list *ptr) {
5847 ptr = isl_aff_list_copy(ptr);
5848 return aff_list(ptr);
5849}
5850
5852 : ptr(nullptr) {}
5853
5855 : ptr(nullptr)
5856{
5857 ptr = obj.copy();
5858}
5859
5860aff_list::aff_list(__isl_take isl_aff_list *ptr)
5861 : ptr(ptr) {}
5862
5863aff_list::aff_list(isl::ctx ctx, int n)
5864{
5865 auto res = isl_aff_list_alloc(ctx.release(), n);
5866 ptr = res;
5867}
5868
5869aff_list::aff_list(isl::aff el)
5870{
5871 auto res = isl_aff_list_from_aff(el.release());
5872 ptr = res;
5873}
5874
5875aff_list::aff_list(isl::ctx ctx, const std::string &str)
5876{
5877 auto res = isl_aff_list_read_from_str(ctx.release(), str.c_str());
5878 ptr = res;
5879}
5880
5882 std::swap(this->ptr, obj.ptr);
5883 return *this;
5884}
5885
5887 if (ptr)
5888 isl_aff_list_free(ptr);
5889}
5890
5891__isl_give isl_aff_list *aff_list::copy() const & {
5892 return isl_aff_list_copy(ptr);
5893}
5894
5895__isl_keep isl_aff_list *aff_list::get() const {
5896 return ptr;
5897}
5898
5899__isl_give isl_aff_list *aff_list::release() {
5900 isl_aff_list *tmp = ptr;
5901 ptr = nullptr;
5902 return tmp;
5903}
5904
5905bool aff_list::is_null() const {
5906 return ptr == nullptr;
5907}
5908
5909isl::ctx aff_list::ctx() const {
5910 return isl::ctx(isl_aff_list_get_ctx(ptr));
5911}
5912
5913isl::aff_list aff_list::add(isl::aff el) const
5914{
5915 auto res = isl_aff_list_add(copy(), el.release());
5916 return manage(res);
5917}
5918
5919isl::aff aff_list::at(int index) const
5920{
5921 auto res = isl_aff_list_get_at(get(), index);
5922 return manage(res);
5923}
5924
5925isl::aff aff_list::get_at(int index) const
5926{
5927 return at(index);
5928}
5929
5930isl::aff_list aff_list::clear() const
5931{
5932 auto res = isl_aff_list_clear(copy());
5933 return manage(res);
5934}
5935
5936isl::aff_list aff_list::concat(isl::aff_list list2) const
5937{
5938 auto res = isl_aff_list_concat(copy(), list2.release());
5939 return manage(res);
5940}
5941
5942isl::aff_list aff_list::drop(unsigned int first, unsigned int n) const
5943{
5944 auto res = isl_aff_list_drop(copy(), first, n);
5945 return manage(res);
5946}
5947
5948stat aff_list::foreach(const std::function<stat(isl::aff)> &fn) const
5949{
5950 struct fn_data {
5951 std::function<stat(isl::aff)> func;
5952 } fn_data = { fn };
5953 auto fn_lambda = [](isl_aff *arg_0, void *arg_1) -> isl_stat {
5954 auto *data = static_cast<struct fn_data *>(arg_1);
5955 auto ret = (data->func)(manage(arg_0));
5956 return ret.release();
5957 };
5958 auto res = isl_aff_list_foreach(get(), fn_lambda, &fn_data);
5959 return manage(res);
5960}
5961
5962isl::aff_list aff_list::insert(unsigned int pos, isl::aff el) const
5963{
5964 auto res = isl_aff_list_insert(copy(), pos, el.release());
5965 return manage(res);
5966}
5967
5968class size aff_list::size() const
5969{
5970 auto res = isl_aff_list_size(get());
5971 return manage(res);
5972}
5973
5974inline std::ostream &operator<<(std::ostream &os, const aff_list &obj)
5975{
5976 char *str = isl_aff_list_to_str(obj.get());
5977 if (!str) {
5978 os.setstate(std::ios_base::badbit);
5979 return os;
5980 }
5981 os << str;
5982 free(str);
5983 return os;
5984}
5985
5986// implementations for isl::ast_build
5988 return ast_build(ptr);
5989}
5991 ptr = isl_ast_build_copy(ptr);
5992 return ast_build(ptr);
5993}
5994
5996 : ptr(nullptr) {}
5997
5999 : ptr(nullptr)
6000{
6001 ptr = obj.copy();
6002 copy_callbacks(obj);
6003}
6004
6006 : ptr(ptr) {}
6007
6008ast_build::ast_build(isl::ctx ctx)
6009{
6010 auto res = isl_ast_build_alloc(ctx.release());
6011 ptr = res;
6012}
6013
6015 std::swap(this->ptr, obj.ptr);
6017 return *this;
6018}
6019
6021 if (ptr)
6023}
6024
6026 return isl_ast_build_copy(ptr);
6027}
6028
6030 return ptr;
6031}
6032
6035 isl_die(ctx().get(), isl_error_invalid, "cannot release object with persistent callbacks", return nullptr);
6036 isl_ast_build *tmp = ptr;
6037 ptr = nullptr;
6038 return tmp;
6039}
6040
6041bool ast_build::is_null() const {
6042 return ptr == nullptr;
6043}
6044
6045isl::ctx ast_build::ctx() const {
6046 return isl::ctx(isl_ast_build_get_ctx(ptr));
6047}
6048
6050{
6051 at_each_domain_data = obj.at_each_domain_data;
6052 return *this;
6053}
6054
6056{
6057 auto *data = static_cast<struct at_each_domain_data *>(arg_2);
6058 auto ret = (data->func)(manage(arg_0), manage_copy(arg_1));
6059 return ret.release();
6060}
6061
6062void ast_build::set_at_each_domain_data(const std::function<isl::ast_node(isl::ast_node, isl::ast_build)> &fn)
6063{
6064 at_each_domain_data = std::make_shared<struct at_each_domain_data>();
6067}
6068
6069isl::ast_build ast_build::set_at_each_domain(const std::function<isl::ast_node(isl::ast_node, isl::ast_build)> &fn) const
6070{
6071 auto copy = *this;
6072 copy.set_at_each_domain_data(fn);
6073 return copy;
6074}
6075
6076isl::ast_expr ast_build::access_from(isl::multi_pw_aff mpa) const
6077{
6079 return manage(res);
6080}
6081
6082isl::ast_expr ast_build::access_from(isl::pw_multi_aff pma) const
6083{
6085 return manage(res);
6086}
6087
6088isl::ast_expr ast_build::call_from(isl::multi_pw_aff mpa) const
6089{
6091 return manage(res);
6092}
6093
6094isl::ast_expr ast_build::call_from(isl::pw_multi_aff pma) const
6095{
6096 auto res = isl_ast_build_call_from_pw_multi_aff(get(), pma.release());
6097 return manage(res);
6098}
6099
6100isl::ast_expr ast_build::expr_from(isl::pw_aff pa) const
6101{
6102 auto res = isl_ast_build_expr_from_pw_aff(get(), pa.release());
6103 return manage(res);
6104}
6105
6106isl::ast_expr ast_build::expr_from(isl::set set) const
6107{
6108 auto res = isl_ast_build_expr_from_set(get(), set.release());
6109 return manage(res);
6110}
6111
6112isl::ast_build ast_build::from_context(isl::set set)
6113{
6114 auto res = isl_ast_build_from_context(set.release());
6115 return manage(res);
6116}
6117
6118isl::ast_node ast_build::node_from(isl::schedule schedule) const
6119{
6120 auto res = isl_ast_build_node_from_schedule(get(), schedule.release());
6121 return manage(res);
6122}
6123
6124isl::ast_node ast_build::node_from_schedule_map(isl::union_map schedule) const
6125{
6127 return manage(res);
6128}
6129
6135
6137{
6139 return manage(res);
6140}
6141
6143{
6144 return schedule();
6145}
6146
6147// implementations for isl::ast_expr
6149 return ast_expr(ptr);
6150}
6152 ptr = isl_ast_expr_copy(ptr);
6153 return ast_expr(ptr);
6154}
6155
6157 : ptr(nullptr) {}
6158
6160 : ptr(nullptr)
6161{
6162 ptr = obj.copy();
6163}
6164
6166 : ptr(ptr) {}
6167
6169 std::swap(this->ptr, obj.ptr);
6170 return *this;
6171}
6172
6174 if (ptr)
6176}
6177
6179 return isl_ast_expr_copy(ptr);
6180}
6181
6183 return ptr;
6184}
6185
6187 isl_ast_expr *tmp = ptr;
6188 ptr = nullptr;
6189 return tmp;
6190}
6191
6192bool ast_expr::is_null() const {
6193 return ptr == nullptr;
6194}
6195
6196template <typename T, typename>
6197boolean ast_expr::isa_type(T subtype) const
6198{
6199 if (is_null())
6200 return boolean();
6201 return isl_ast_expr_get_type(get()) == subtype;
6202}
6203template <class T>
6204boolean ast_expr::isa() const
6205{
6206 return isa_type<decltype(T::type)>(T::type);
6207}
6208template <class T>
6209T ast_expr::as() const
6210{
6211 if (isa<T>().is_false())
6212 isl_die(ctx().get(), isl_error_invalid, "not an object of the requested subtype", return T());
6213 return T(copy());
6214}
6215
6216isl::ctx ast_expr::ctx() const {
6217 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6218}
6219
6221{
6222 auto res = isl_ast_expr_add(copy(), expr2.release());
6223 return manage(res);
6224}
6225
6227{
6229 return manage(res);
6230}
6231
6233{
6234 auto res = isl_ast_expr_eq(copy(), expr2.release());
6235 return manage(res);
6236}
6237
6243
6245{
6246 auto res = isl_ast_expr_get_id(get());
6247 return manage(res);
6248}
6249
6251{
6252 return id();
6253}
6254
6256{
6257 auto res = isl_ast_expr_le(copy(), expr2.release());
6258 return manage(res);
6259}
6260
6262{
6263 auto res = isl_ast_expr_mul(copy(), expr2.release());
6264 return manage(res);
6265}
6266
6268{
6270 return manage(res);
6271}
6272
6274{
6275 return op_arg(pos);
6276}
6277
6278std::string ast_expr::to_C_str() const
6279{
6280 auto res = isl_ast_expr_to_C_str(get());
6281 std::string tmp(res);
6282 free(res);
6283 return tmp;
6284}
6285
6287{
6288 auto res = isl_ast_expr_get_val(get());
6289 return manage(res);
6290}
6291
6293{
6294 return val();
6295}
6296
6297inline std::ostream &operator<<(std::ostream &os, const ast_expr &obj)
6298{
6299 char *str = isl_ast_expr_to_str(obj.get());
6300 if (!str) {
6301 os.setstate(std::ios_base::badbit);
6302 return os;
6303 }
6304 os << str;
6305 free(str);
6306 return os;
6307}
6308
6309// implementations for isl::ast_expr_id
6311 : ast_expr() {}
6312
6314 : ast_expr(obj)
6315{
6316}
6317
6319 : ast_expr(ptr) {}
6320
6322 std::swap(this->ptr, obj.ptr);
6323 return *this;
6324}
6325
6326isl::ctx ast_expr_id::ctx() const {
6327 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6328}
6329
6330isl::id ast_expr_id::id() const
6331{
6332 auto res = isl_ast_expr_id_get_id(get());
6333 return manage(res);
6334}
6335
6336isl::id ast_expr_id::get_id() const
6337{
6338 return id();
6339}
6340
6341inline std::ostream &operator<<(std::ostream &os, const ast_expr_id &obj)
6342{
6343 char *str = isl_ast_expr_to_str(obj.get());
6344 if (!str) {
6345 os.setstate(std::ios_base::badbit);
6346 return os;
6347 }
6348 os << str;
6349 free(str);
6350 return os;
6351}
6352
6353// implementations for isl::ast_expr_int
6355 : ast_expr() {}
6356
6358 : ast_expr(obj)
6359{
6360}
6361
6363 : ast_expr(ptr) {}
6364
6366 std::swap(this->ptr, obj.ptr);
6367 return *this;
6368}
6369
6370isl::ctx ast_expr_int::ctx() const {
6371 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6372}
6373
6374isl::val ast_expr_int::val() const
6375{
6377 return manage(res);
6378}
6379
6380isl::val ast_expr_int::get_val() const
6381{
6382 return val();
6383}
6384
6385inline std::ostream &operator<<(std::ostream &os, const ast_expr_int &obj)
6386{
6387 char *str = isl_ast_expr_to_str(obj.get());
6388 if (!str) {
6389 os.setstate(std::ios_base::badbit);
6390 return os;
6391 }
6392 os << str;
6393 free(str);
6394 return os;
6395}
6396
6397// implementations for isl::ast_expr_op
6399 : ast_expr() {}
6400
6402 : ast_expr(obj)
6403{
6404}
6405
6407 : ast_expr(ptr) {}
6408
6410 std::swap(this->ptr, obj.ptr);
6411 return *this;
6412}
6413
6414template <typename T, typename>
6415boolean ast_expr_op::isa_type(T subtype) const
6416{
6417 if (is_null())
6418 return boolean();
6419 return isl_ast_expr_op_get_type(get()) == subtype;
6420}
6421template <class T>
6422boolean ast_expr_op::isa() const
6423{
6424 return isa_type<decltype(T::type)>(T::type);
6425}
6426template <class T>
6427T ast_expr_op::as() const
6428{
6429 if (isa<T>().is_false())
6430 isl_die(ctx().get(), isl_error_invalid, "not an object of the requested subtype", return T());
6431 return T(copy());
6432}
6433
6434isl::ctx ast_expr_op::ctx() const {
6435 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6436}
6437
6438isl::ast_expr ast_expr_op::arg(int pos) const
6439{
6441 return manage(res);
6442}
6443
6444isl::ast_expr ast_expr_op::get_arg(int pos) const
6445{
6446 return arg(pos);
6447}
6448
6449class size ast_expr_op::n_arg() const
6450{
6452 return manage(res);
6453}
6454
6455class size ast_expr_op::get_n_arg() const
6456{
6457 return n_arg();
6458}
6459
6460inline std::ostream &operator<<(std::ostream &os, const ast_expr_op &obj)
6461{
6462 char *str = isl_ast_expr_to_str(obj.get());
6463 if (!str) {
6464 os.setstate(std::ios_base::badbit);
6465 return os;
6466 }
6467 os << str;
6468 free(str);
6469 return os;
6470}
6471
6472// implementations for isl::ast_expr_op_access
6474 : ast_expr_op() {}
6475
6477 : ast_expr_op(obj)
6478{
6479}
6480
6482 : ast_expr_op(ptr) {}
6483
6485 std::swap(this->ptr, obj.ptr);
6486 return *this;
6487}
6488
6489isl::ctx ast_expr_op_access::ctx() const {
6490 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6491}
6492
6493inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_access &obj)
6494{
6495 char *str = isl_ast_expr_to_str(obj.get());
6496 if (!str) {
6497 os.setstate(std::ios_base::badbit);
6498 return os;
6499 }
6500 os << str;
6501 free(str);
6502 return os;
6503}
6504
6505// implementations for isl::ast_expr_op_add
6507 : ast_expr_op() {}
6508
6510 : ast_expr_op(obj)
6511{
6512}
6513
6515 : ast_expr_op(ptr) {}
6516
6518 std::swap(this->ptr, obj.ptr);
6519 return *this;
6520}
6521
6522isl::ctx ast_expr_op_add::ctx() const {
6523 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6524}
6525
6526inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_add &obj)
6527{
6528 char *str = isl_ast_expr_to_str(obj.get());
6529 if (!str) {
6530 os.setstate(std::ios_base::badbit);
6531 return os;
6532 }
6533 os << str;
6534 free(str);
6535 return os;
6536}
6537
6538// implementations for isl::ast_expr_op_address_of
6540 : ast_expr_op() {}
6541
6543 : ast_expr_op(obj)
6544{
6545}
6546
6548 : ast_expr_op(ptr) {}
6549
6551 std::swap(this->ptr, obj.ptr);
6552 return *this;
6553}
6554
6555isl::ctx ast_expr_op_address_of::ctx() const {
6556 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6557}
6558
6559inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_address_of &obj)
6560{
6561 char *str = isl_ast_expr_to_str(obj.get());
6562 if (!str) {
6563 os.setstate(std::ios_base::badbit);
6564 return os;
6565 }
6566 os << str;
6567 free(str);
6568 return os;
6569}
6570
6571// implementations for isl::ast_expr_op_and
6573 : ast_expr_op() {}
6574
6576 : ast_expr_op(obj)
6577{
6578}
6579
6581 : ast_expr_op(ptr) {}
6582
6584 std::swap(this->ptr, obj.ptr);
6585 return *this;
6586}
6587
6588isl::ctx ast_expr_op_and::ctx() const {
6589 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6590}
6591
6592inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_and &obj)
6593{
6594 char *str = isl_ast_expr_to_str(obj.get());
6595 if (!str) {
6596 os.setstate(std::ios_base::badbit);
6597 return os;
6598 }
6599 os << str;
6600 free(str);
6601 return os;
6602}
6603
6604// implementations for isl::ast_expr_op_and_then
6606 : ast_expr_op() {}
6607
6609 : ast_expr_op(obj)
6610{
6611}
6612
6614 : ast_expr_op(ptr) {}
6615
6617 std::swap(this->ptr, obj.ptr);
6618 return *this;
6619}
6620
6621isl::ctx ast_expr_op_and_then::ctx() const {
6622 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6623}
6624
6625inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_and_then &obj)
6626{
6627 char *str = isl_ast_expr_to_str(obj.get());
6628 if (!str) {
6629 os.setstate(std::ios_base::badbit);
6630 return os;
6631 }
6632 os << str;
6633 free(str);
6634 return os;
6635}
6636
6637// implementations for isl::ast_expr_op_call
6639 : ast_expr_op() {}
6640
6642 : ast_expr_op(obj)
6643{
6644}
6645
6647 : ast_expr_op(ptr) {}
6648
6650 std::swap(this->ptr, obj.ptr);
6651 return *this;
6652}
6653
6654isl::ctx ast_expr_op_call::ctx() const {
6655 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6656}
6657
6658inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_call &obj)
6659{
6660 char *str = isl_ast_expr_to_str(obj.get());
6661 if (!str) {
6662 os.setstate(std::ios_base::badbit);
6663 return os;
6664 }
6665 os << str;
6666 free(str);
6667 return os;
6668}
6669
6670// implementations for isl::ast_expr_op_cond
6672 : ast_expr_op() {}
6673
6675 : ast_expr_op(obj)
6676{
6677}
6678
6680 : ast_expr_op(ptr) {}
6681
6683 std::swap(this->ptr, obj.ptr);
6684 return *this;
6685}
6686
6687isl::ctx ast_expr_op_cond::ctx() const {
6688 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6689}
6690
6691inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_cond &obj)
6692{
6693 char *str = isl_ast_expr_to_str(obj.get());
6694 if (!str) {
6695 os.setstate(std::ios_base::badbit);
6696 return os;
6697 }
6698 os << str;
6699 free(str);
6700 return os;
6701}
6702
6703// implementations for isl::ast_expr_op_div
6705 : ast_expr_op() {}
6706
6708 : ast_expr_op(obj)
6709{
6710}
6711
6713 : ast_expr_op(ptr) {}
6714
6716 std::swap(this->ptr, obj.ptr);
6717 return *this;
6718}
6719
6720isl::ctx ast_expr_op_div::ctx() const {
6721 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6722}
6723
6724inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_div &obj)
6725{
6726 char *str = isl_ast_expr_to_str(obj.get());
6727 if (!str) {
6728 os.setstate(std::ios_base::badbit);
6729 return os;
6730 }
6731 os << str;
6732 free(str);
6733 return os;
6734}
6735
6736// implementations for isl::ast_expr_op_eq
6738 : ast_expr_op() {}
6739
6741 : ast_expr_op(obj)
6742{
6743}
6744
6746 : ast_expr_op(ptr) {}
6747
6749 std::swap(this->ptr, obj.ptr);
6750 return *this;
6751}
6752
6753isl::ctx ast_expr_op_eq::ctx() const {
6754 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6755}
6756
6757inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_eq &obj)
6758{
6759 char *str = isl_ast_expr_to_str(obj.get());
6760 if (!str) {
6761 os.setstate(std::ios_base::badbit);
6762 return os;
6763 }
6764 os << str;
6765 free(str);
6766 return os;
6767}
6768
6769// implementations for isl::ast_expr_op_fdiv_q
6771 : ast_expr_op() {}
6772
6774 : ast_expr_op(obj)
6775{
6776}
6777
6779 : ast_expr_op(ptr) {}
6780
6782 std::swap(this->ptr, obj.ptr);
6783 return *this;
6784}
6785
6786isl::ctx ast_expr_op_fdiv_q::ctx() const {
6787 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6788}
6789
6790inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_fdiv_q &obj)
6791{
6792 char *str = isl_ast_expr_to_str(obj.get());
6793 if (!str) {
6794 os.setstate(std::ios_base::badbit);
6795 return os;
6796 }
6797 os << str;
6798 free(str);
6799 return os;
6800}
6801
6802// implementations for isl::ast_expr_op_ge
6804 : ast_expr_op() {}
6805
6807 : ast_expr_op(obj)
6808{
6809}
6810
6812 : ast_expr_op(ptr) {}
6813
6815 std::swap(this->ptr, obj.ptr);
6816 return *this;
6817}
6818
6819isl::ctx ast_expr_op_ge::ctx() const {
6820 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6821}
6822
6823inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_ge &obj)
6824{
6825 char *str = isl_ast_expr_to_str(obj.get());
6826 if (!str) {
6827 os.setstate(std::ios_base::badbit);
6828 return os;
6829 }
6830 os << str;
6831 free(str);
6832 return os;
6833}
6834
6835// implementations for isl::ast_expr_op_gt
6837 : ast_expr_op() {}
6838
6840 : ast_expr_op(obj)
6841{
6842}
6843
6845 : ast_expr_op(ptr) {}
6846
6848 std::swap(this->ptr, obj.ptr);
6849 return *this;
6850}
6851
6852isl::ctx ast_expr_op_gt::ctx() const {
6853 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6854}
6855
6856inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_gt &obj)
6857{
6858 char *str = isl_ast_expr_to_str(obj.get());
6859 if (!str) {
6860 os.setstate(std::ios_base::badbit);
6861 return os;
6862 }
6863 os << str;
6864 free(str);
6865 return os;
6866}
6867
6868// implementations for isl::ast_expr_op_le
6870 : ast_expr_op() {}
6871
6873 : ast_expr_op(obj)
6874{
6875}
6876
6878 : ast_expr_op(ptr) {}
6879
6881 std::swap(this->ptr, obj.ptr);
6882 return *this;
6883}
6884
6885isl::ctx ast_expr_op_le::ctx() const {
6886 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6887}
6888
6889inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_le &obj)
6890{
6891 char *str = isl_ast_expr_to_str(obj.get());
6892 if (!str) {
6893 os.setstate(std::ios_base::badbit);
6894 return os;
6895 }
6896 os << str;
6897 free(str);
6898 return os;
6899}
6900
6901// implementations for isl::ast_expr_op_lt
6903 : ast_expr_op() {}
6904
6906 : ast_expr_op(obj)
6907{
6908}
6909
6911 : ast_expr_op(ptr) {}
6912
6914 std::swap(this->ptr, obj.ptr);
6915 return *this;
6916}
6917
6918isl::ctx ast_expr_op_lt::ctx() const {
6919 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6920}
6921
6922inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_lt &obj)
6923{
6924 char *str = isl_ast_expr_to_str(obj.get());
6925 if (!str) {
6926 os.setstate(std::ios_base::badbit);
6927 return os;
6928 }
6929 os << str;
6930 free(str);
6931 return os;
6932}
6933
6934// implementations for isl::ast_expr_op_max
6936 : ast_expr_op() {}
6937
6939 : ast_expr_op(obj)
6940{
6941}
6942
6944 : ast_expr_op(ptr) {}
6945
6947 std::swap(this->ptr, obj.ptr);
6948 return *this;
6949}
6950
6951isl::ctx ast_expr_op_max::ctx() const {
6952 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6953}
6954
6955inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_max &obj)
6956{
6957 char *str = isl_ast_expr_to_str(obj.get());
6958 if (!str) {
6959 os.setstate(std::ios_base::badbit);
6960 return os;
6961 }
6962 os << str;
6963 free(str);
6964 return os;
6965}
6966
6967// implementations for isl::ast_expr_op_member
6969 : ast_expr_op() {}
6970
6972 : ast_expr_op(obj)
6973{
6974}
6975
6977 : ast_expr_op(ptr) {}
6978
6980 std::swap(this->ptr, obj.ptr);
6981 return *this;
6982}
6983
6984isl::ctx ast_expr_op_member::ctx() const {
6985 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6986}
6987
6988inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_member &obj)
6989{
6990 char *str = isl_ast_expr_to_str(obj.get());
6991 if (!str) {
6992 os.setstate(std::ios_base::badbit);
6993 return os;
6994 }
6995 os << str;
6996 free(str);
6997 return os;
6998}
6999
7000// implementations for isl::ast_expr_op_min
7002 : ast_expr_op() {}
7003
7005 : ast_expr_op(obj)
7006{
7007}
7008
7010 : ast_expr_op(ptr) {}
7011
7013 std::swap(this->ptr, obj.ptr);
7014 return *this;
7015}
7016
7017isl::ctx ast_expr_op_min::ctx() const {
7018 return isl::ctx(isl_ast_expr_get_ctx(ptr));
7019}
7020
7021inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_min &obj)
7022{
7023 char *str = isl_ast_expr_to_str(obj.get());
7024 if (!str) {
7025 os.setstate(std::ios_base::badbit);
7026 return os;
7027 }
7028 os << str;
7029 free(str);
7030 return os;
7031}
7032
7033// implementations for isl::ast_expr_op_minus
7035 : ast_expr_op() {}
7036
7038 : ast_expr_op(obj)
7039{
7040}
7041
7043 : ast_expr_op(ptr) {}
7044
7046 std::swap(this->ptr, obj.ptr);
7047 return *this;
7048}
7049
7050isl::ctx ast_expr_op_minus::ctx() const {
7051 return isl::ctx(isl_ast_expr_get_ctx(ptr));
7052}
7053
7054inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_minus &obj)
7055{
7056 char *str = isl_ast_expr_to_str(obj.get());
7057 if (!str) {
7058 os.setstate(std::ios_base::badbit);
7059 return os;
7060 }
7061 os << str;
7062 free(str);
7063 return os;
7064}
7065
7066// implementations for isl::ast_expr_op_mul
7068 : ast_expr_op() {}
7069
7071 : ast_expr_op(obj)
7072{
7073}
7074
7076 : ast_expr_op(ptr) {}
7077
7079 std::swap(this->ptr, obj.ptr);
7080 return *this;
7081}
7082
7083isl::ctx ast_expr_op_mul::ctx() const {
7084 return isl::ctx(isl_ast_expr_get_ctx(ptr));
7085}
7086
7087inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_mul &obj)
7088{
7089 char *str = isl_ast_expr_to_str(obj.get());
7090 if (!str) {
7091 os.setstate(std::ios_base::badbit);
7092 return os;
7093 }
7094 os << str;
7095 free(str);
7096 return os;
7097}
7098
7099// implementations for isl::ast_expr_op_or
7101 : ast_expr_op() {}
7102
7104 : ast_expr_op(obj)
7105{
7106}
7107
7109 : ast_expr_op(ptr) {}
7110
7112 std::swap(this->ptr, obj.ptr);
7113 return *this;
7114}
7115
7116isl::ctx ast_expr_op_or::ctx() const {
7117 return isl::ctx(isl_ast_expr_get_ctx(ptr));
7118}
7119
7120inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_or &obj)
7121{
7122 char *str = isl_ast_expr_to_str(obj.get());
7123 if (!str) {
7124 os.setstate(std::ios_base::badbit);
7125 return os;
7126 }
7127 os << str;
7128 free(str);
7129 return os;
7130}
7131
7132// implementations for isl::ast_expr_op_or_else
7134 : ast_expr_op() {}
7135
7137 : ast_expr_op(obj)
7138{
7139}
7140
7142 : ast_expr_op(ptr) {}
7143
7145 std::swap(this->ptr, obj.ptr);
7146 return *this;
7147}
7148
7149isl::ctx ast_expr_op_or_else::ctx() const {
7150 return isl::ctx(isl_ast_expr_get_ctx(ptr));
7151}
7152
7153inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_or_else &obj)
7154{
7155 char *str = isl_ast_expr_to_str(obj.get());
7156 if (!str) {
7157 os.setstate(std::ios_base::badbit);
7158 return os;
7159 }
7160 os << str;
7161 free(str);
7162 return os;
7163}
7164
7165// implementations for isl::ast_expr_op_pdiv_q
7167 : ast_expr_op() {}
7168
7170 : ast_expr_op(obj)
7171{
7172}
7173
7175 : ast_expr_op(ptr) {}
7176
7178 std::swap(this->ptr, obj.ptr);
7179 return *this;
7180}
7181
7182isl::ctx ast_expr_op_pdiv_q::ctx() const {
7183 return isl::ctx(isl_ast_expr_get_ctx(ptr));
7184}
7185
7186inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_pdiv_q &obj)
7187{
7188 char *str = isl_ast_expr_to_str(obj.get());
7189 if (!str) {
7190 os.setstate(std::ios_base::badbit);
7191 return os;
7192 }
7193 os << str;
7194 free(str);
7195 return os;
7196}
7197
7198// implementations for isl::ast_expr_op_pdiv_r
7200 : ast_expr_op() {}
7201
7203 : ast_expr_op(obj)
7204{
7205}
7206
7208 : ast_expr_op(ptr) {}
7209
7211 std::swap(this->ptr, obj.ptr);
7212 return *this;
7213}
7214
7215isl::ctx ast_expr_op_pdiv_r::ctx() const {
7216 return isl::ctx(isl_ast_expr_get_ctx(ptr));
7217}
7218
7219inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_pdiv_r &obj)
7220{
7221 char *str = isl_ast_expr_to_str(obj.get());
7222 if (!str) {
7223 os.setstate(std::ios_base::badbit);
7224 return os;
7225 }
7226 os << str;
7227 free(str);
7228 return os;
7229}
7230
7231// implementations for isl::ast_expr_op_select
7233 : ast_expr_op() {}
7234
7236 : ast_expr_op(obj)
7237{
7238}
7239
7241 : ast_expr_op(ptr) {}
7242
7244 std::swap(this->ptr, obj.ptr);
7245 return *this;
7246}
7247
7248isl::ctx ast_expr_op_select::ctx() const {
7249 return isl::ctx(isl_ast_expr_get_ctx(ptr));
7250}
7251
7252inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_select &obj)
7253{
7254 char *str = isl_ast_expr_to_str(obj.get());
7255 if (!str) {
7256 os.setstate(std::ios_base::badbit);
7257 return os;
7258 }
7259 os << str;
7260 free(str);
7261 return os;
7262}
7263
7264// implementations for isl::ast_expr_op_sub
7266 : ast_expr_op() {}
7267
7269 : ast_expr_op(obj)
7270{
7271}
7272
7274 : ast_expr_op(ptr) {}
7275
7277 std::swap(this->ptr, obj.ptr);
7278 return *this;
7279}
7280
7281isl::ctx ast_expr_op_sub::ctx() const {
7282 return isl::ctx(isl_ast_expr_get_ctx(ptr));
7283}
7284
7285inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_sub &obj)
7286{
7287 char *str = isl_ast_expr_to_str(obj.get());
7288 if (!str) {
7289 os.setstate(std::ios_base::badbit);
7290 return os;
7291 }
7292 os << str;
7293 free(str);
7294 return os;
7295}
7296
7297// implementations for isl::ast_expr_op_zdiv_r
7299 : ast_expr_op() {}
7300
7302 : ast_expr_op(obj)
7303{
7304}
7305
7307 : ast_expr_op(ptr) {}
7308
7310 std::swap(this->ptr, obj.ptr);
7311 return *this;
7312}
7313
7314isl::ctx ast_expr_op_zdiv_r::ctx() const {
7315 return isl::ctx(isl_ast_expr_get_ctx(ptr));
7316}
7317
7318inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_zdiv_r &obj)
7319{
7320 char *str = isl_ast_expr_to_str(obj.get());
7321 if (!str) {
7322 os.setstate(std::ios_base::badbit);
7323 return os;
7324 }
7325 os << str;
7326 free(str);
7327 return os;
7328}
7329
7330// implementations for isl::ast_node
7332 return ast_node(ptr);
7333}
7335 ptr = isl_ast_node_copy(ptr);
7336 return ast_node(ptr);
7337}
7338
7340 : ptr(nullptr) {}
7341
7343 : ptr(nullptr)
7344{
7345 ptr = obj.copy();
7346}
7347
7349 : ptr(ptr) {}
7350
7352 std::swap(this->ptr, obj.ptr);
7353 return *this;
7354}
7355
7357 if (ptr)
7359}
7360
7362 return isl_ast_node_copy(ptr);
7363}
7364
7366 return ptr;
7367}
7368
7370 isl_ast_node *tmp = ptr;
7371 ptr = nullptr;
7372 return tmp;
7373}
7374
7375bool ast_node::is_null() const {
7376 return ptr == nullptr;
7377}
7378
7379template <typename T, typename>
7380boolean ast_node::isa_type(T subtype) const
7381{
7382 if (is_null())
7383 return boolean();
7384 return isl_ast_node_get_type(get()) == subtype;
7385}
7386template <class T>
7387boolean ast_node::isa() const
7388{
7389 return isa_type<decltype(T::type)>(T::type);
7390}
7391template <class T>
7392T ast_node::as() const
7393{
7394 if (isa<T>().is_false())
7395 isl_die(ctx().get(), isl_error_invalid, "not an object of the requested subtype", return T());
7396 return T(copy());
7397}
7398
7399isl::ctx ast_node::ctx() const {
7400 return isl::ctx(isl_ast_node_get_ctx(ptr));
7401}
7402
7404{
7406 return manage(res);
7407}
7408
7410{
7411 return annotation();
7412}
7413
7414std::string ast_node::to_C_str() const
7415{
7416 auto res = isl_ast_node_to_C_str(get());
7417 std::string tmp(res);
7418 free(res);
7419 return tmp;
7420}
7421
7423{
7424 auto res = isl_ast_node_to_list(copy());
7425 return manage(res);
7426}
7427
7428inline std::ostream &operator<<(std::ostream &os, const ast_node &obj)
7429{
7430 char *str = isl_ast_node_to_str(obj.get());
7431 if (!str) {
7432 os.setstate(std::ios_base::badbit);
7433 return os;
7434 }
7435 os << str;
7436 free(str);
7437 return os;
7438}
7439
7440// implementations for isl::ast_node_block
7442 : ast_node() {}
7443
7445 : ast_node(obj)
7446{
7447}
7448
7450 : ast_node(ptr) {}
7451
7453 std::swap(this->ptr, obj.ptr);
7454 return *this;
7455}
7456
7457isl::ctx ast_node_block::ctx() const {
7458 return isl::ctx(isl_ast_node_get_ctx(ptr));
7459}
7460
7461isl::ast_node_list ast_node_block::children() const
7462{
7464 return manage(res);
7465}
7466
7467isl::ast_node_list ast_node_block::get_children() const
7468{
7469 return children();
7470}
7471
7472inline std::ostream &operator<<(std::ostream &os, const ast_node_block &obj)
7473{
7474 char *str = isl_ast_node_to_str(obj.get());
7475 if (!str) {
7476 os.setstate(std::ios_base::badbit);
7477 return os;
7478 }
7479 os << str;
7480 free(str);
7481 return os;
7482}
7483
7484// implementations for isl::ast_node_for
7486 : ast_node() {}
7487
7489 : ast_node(obj)
7490{
7491}
7492
7494 : ast_node(ptr) {}
7495
7497 std::swap(this->ptr, obj.ptr);
7498 return *this;
7499}
7500
7501isl::ctx ast_node_for::ctx() const {
7502 return isl::ctx(isl_ast_node_get_ctx(ptr));
7503}
7504
7505isl::ast_node ast_node_for::body() const
7506{
7508 return manage(res);
7509}
7510
7511isl::ast_node ast_node_for::get_body() const
7512{
7513 return body();
7514}
7515
7516isl::ast_expr ast_node_for::cond() const
7517{
7519 return manage(res);
7520}
7521
7522isl::ast_expr ast_node_for::get_cond() const
7523{
7524 return cond();
7525}
7526
7527isl::ast_expr ast_node_for::inc() const
7528{
7530 return manage(res);
7531}
7532
7533isl::ast_expr ast_node_for::get_inc() const
7534{
7535 return inc();
7536}
7537
7538isl::ast_expr ast_node_for::init() const
7539{
7541 return manage(res);
7542}
7543
7544isl::ast_expr ast_node_for::get_init() const
7545{
7546 return init();
7547}
7548
7549boolean ast_node_for::is_degenerate() const
7550{
7552 return manage(res);
7553}
7554
7555isl::ast_expr ast_node_for::iterator() const
7556{
7558 return manage(res);
7559}
7560
7561isl::ast_expr ast_node_for::get_iterator() const
7562{
7563 return iterator();
7564}
7565
7566inline std::ostream &operator<<(std::ostream &os, const ast_node_for &obj)
7567{
7568 char *str = isl_ast_node_to_str(obj.get());
7569 if (!str) {
7570 os.setstate(std::ios_base::badbit);
7571 return os;
7572 }
7573 os << str;
7574 free(str);
7575 return os;
7576}
7577
7578// implementations for isl::ast_node_if
7580 : ast_node() {}
7581
7583 : ast_node(obj)
7584{
7585}
7586
7588 : ast_node(ptr) {}
7589
7591 std::swap(this->ptr, obj.ptr);
7592 return *this;
7593}
7594
7595isl::ctx ast_node_if::ctx() const {
7596 return isl::ctx(isl_ast_node_get_ctx(ptr));
7597}
7598
7599isl::ast_expr ast_node_if::cond() const
7600{
7602 return manage(res);
7603}
7604
7605isl::ast_expr ast_node_if::get_cond() const
7606{
7607 return cond();
7608}
7609
7610isl::ast_node ast_node_if::else_node() const
7611{
7613 return manage(res);
7614}
7615
7616isl::ast_node ast_node_if::get_else_node() const
7617{
7618 return else_node();
7619}
7620
7621boolean ast_node_if::has_else_node() const
7622{
7624 return manage(res);
7625}
7626
7627isl::ast_node ast_node_if::then_node() const
7628{
7630 return manage(res);
7631}
7632
7633isl::ast_node ast_node_if::get_then_node() const
7634{
7635 return then_node();
7636}
7637
7638inline std::ostream &operator<<(std::ostream &os, const ast_node_if &obj)
7639{
7640 char *str = isl_ast_node_to_str(obj.get());
7641 if (!str) {
7642 os.setstate(std::ios_base::badbit);
7643 return os;
7644 }
7645 os << str;
7646 free(str);
7647 return os;
7648}
7649
7650// implementations for isl::ast_node_list
7651ast_node_list manage(__isl_take isl_ast_node_list *ptr) {
7652 return ast_node_list(ptr);
7653}
7654ast_node_list manage_copy(__isl_keep isl_ast_node_list *ptr) {
7655 ptr = isl_ast_node_list_copy(ptr);
7656 return ast_node_list(ptr);
7657}
7658
7660 : ptr(nullptr) {}
7661
7663 : ptr(nullptr)
7664{
7665 ptr = obj.copy();
7666}
7667
7668ast_node_list::ast_node_list(__isl_take isl_ast_node_list *ptr)
7669 : ptr(ptr) {}
7670
7671ast_node_list::ast_node_list(isl::ctx ctx, int n)
7672{
7673 auto res = isl_ast_node_list_alloc(ctx.release(), n);
7674 ptr = res;
7675}
7676
7677ast_node_list::ast_node_list(isl::ast_node el)
7678{
7679 auto res = isl_ast_node_list_from_ast_node(el.release());
7680 ptr = res;
7681}
7682
7684 std::swap(this->ptr, obj.ptr);
7685 return *this;
7686}
7687
7689 if (ptr)
7690 isl_ast_node_list_free(ptr);
7691}
7692
7693__isl_give isl_ast_node_list *ast_node_list::copy() const & {
7694 return isl_ast_node_list_copy(ptr);
7695}
7696
7697__isl_keep isl_ast_node_list *ast_node_list::get() const {
7698 return ptr;
7699}
7700
7701__isl_give isl_ast_node_list *ast_node_list::release() {
7702 isl_ast_node_list *tmp = ptr;
7703 ptr = nullptr;
7704 return tmp;
7705}
7706
7707bool ast_node_list::is_null() const {
7708 return ptr == nullptr;
7709}
7710
7711isl::ctx ast_node_list::ctx() const {
7712 return isl::ctx(isl_ast_node_list_get_ctx(ptr));
7713}
7714
7715isl::ast_node_list ast_node_list::add(isl::ast_node el) const
7716{
7717 auto res = isl_ast_node_list_add(copy(), el.release());
7718 return manage(res);
7719}
7720
7721isl::ast_node ast_node_list::at(int index) const
7722{
7723 auto res = isl_ast_node_list_get_at(get(), index);
7724 return manage(res);
7725}
7726
7727isl::ast_node ast_node_list::get_at(int index) const
7728{
7729 return at(index);
7730}
7731
7732isl::ast_node_list ast_node_list::clear() const
7733{
7734 auto res = isl_ast_node_list_clear(copy());
7735 return manage(res);
7736}
7737
7738isl::ast_node_list ast_node_list::concat(isl::ast_node_list list2) const
7739{
7740 auto res = isl_ast_node_list_concat(copy(), list2.release());
7741 return manage(res);
7742}
7743
7744isl::ast_node_list ast_node_list::drop(unsigned int first, unsigned int n) const
7745{
7746 auto res = isl_ast_node_list_drop(copy(), first, n);
7747 return manage(res);
7748}
7749
7750stat ast_node_list::foreach(const std::function<stat(isl::ast_node)> &fn) const
7751{
7752 struct fn_data {
7753 std::function<stat(isl::ast_node)> func;
7754 } fn_data = { fn };
7755 auto fn_lambda = [](isl_ast_node *arg_0, void *arg_1) -> isl_stat {
7756 auto *data = static_cast<struct fn_data *>(arg_1);
7757 auto ret = (data->func)(manage(arg_0));
7758 return ret.release();
7759 };
7760 auto res = isl_ast_node_list_foreach(get(), fn_lambda, &fn_data);
7761 return manage(res);
7762}
7763
7765{
7766 auto res = isl_ast_node_list_insert(copy(), pos, el.release());
7767 return manage(res);
7768}
7769
7770class size ast_node_list::size() const
7771{
7772 auto res = isl_ast_node_list_size(get());
7773 return manage(res);
7774}
7775
7776inline std::ostream &operator<<(std::ostream &os, const ast_node_list &obj)
7777{
7778 char *str = isl_ast_node_list_to_str(obj.get());
7779 if (!str) {
7780 os.setstate(std::ios_base::badbit);
7781 return os;
7782 }
7783 os << str;
7784 free(str);
7785 return os;
7786}
7787
7788// implementations for isl::ast_node_mark
7790 : ast_node() {}
7791
7793 : ast_node(obj)
7794{
7795}
7796
7798 : ast_node(ptr) {}
7799
7801 std::swap(this->ptr, obj.ptr);
7802 return *this;
7803}
7804
7805isl::ctx ast_node_mark::ctx() const {
7806 return isl::ctx(isl_ast_node_get_ctx(ptr));
7807}
7808
7809isl::id ast_node_mark::id() const
7810{
7812 return manage(res);
7813}
7814
7815isl::id ast_node_mark::get_id() const
7816{
7817 return id();
7818}
7819
7820isl::ast_node ast_node_mark::node() const
7821{
7823 return manage(res);
7824}
7825
7826isl::ast_node ast_node_mark::get_node() const
7827{
7828 return node();
7829}
7830
7831inline std::ostream &operator<<(std::ostream &os, const ast_node_mark &obj)
7832{
7833 char *str = isl_ast_node_to_str(obj.get());
7834 if (!str) {
7835 os.setstate(std::ios_base::badbit);
7836 return os;
7837 }
7838 os << str;
7839 free(str);
7840 return os;
7841}
7842
7843// implementations for isl::ast_node_user
7845 : ast_node() {}
7846
7848 : ast_node(obj)
7849{
7850}
7851
7853 : ast_node(ptr) {}
7854
7856 std::swap(this->ptr, obj.ptr);
7857 return *this;
7858}
7859
7860isl::ctx ast_node_user::ctx() const {
7861 return isl::ctx(isl_ast_node_get_ctx(ptr));
7862}
7863
7864isl::ast_expr ast_node_user::expr() const
7865{
7867 return manage(res);
7868}
7869
7870isl::ast_expr ast_node_user::get_expr() const
7871{
7872 return expr();
7873}
7874
7875inline std::ostream &operator<<(std::ostream &os, const ast_node_user &obj)
7876{
7877 char *str = isl_ast_node_to_str(obj.get());
7878 if (!str) {
7879 os.setstate(std::ios_base::badbit);
7880 return os;
7881 }
7882 os << str;
7883 free(str);
7884 return os;
7885}
7886
7887// implementations for isl::basic_map
7889 return basic_map(ptr);
7890}
7892 ptr = isl_basic_map_copy(ptr);
7893 return basic_map(ptr);
7894}
7895
7897 : ptr(nullptr) {}
7898
7900 : ptr(nullptr)
7901{
7902 ptr = obj.copy();
7903}
7904
7906 : ptr(ptr) {}
7907
7908basic_map::basic_map(isl::ctx ctx, const std::string &str)
7909{
7910 auto res = isl_basic_map_read_from_str(ctx.release(), str.c_str());
7911 ptr = res;
7912}
7913
7915 std::swap(this->ptr, obj.ptr);
7916 return *this;
7917}
7918
7920 if (ptr)
7922}
7923
7925 return isl_basic_map_copy(ptr);
7926}
7927
7929 return ptr;
7930}
7931
7933 isl_basic_map *tmp = ptr;
7934 ptr = nullptr;
7935 return tmp;
7936}
7937
7938bool basic_map::is_null() const {
7939 return ptr == nullptr;
7940}
7941
7942isl::ctx basic_map::ctx() const {
7943 return isl::ctx(isl_basic_map_get_ctx(ptr));
7944}
7945
7947{
7948 return isl::map(*this).add_constraint(constraint);
7949}
7950
7952{
7953 return isl::map(*this).add_dims(type, n);
7954}
7955
7957{
7959 return manage(res);
7960}
7961
7963{
7964 return isl::map(*this).align_params(model);
7965}
7966
7968{
7969 auto res = isl_basic_map_apply_domain(copy(), bmap2.release());
7970 return manage(res);
7971}
7972
7974{
7975 return isl::map(*this).apply_domain(map2);
7976}
7977
7978isl::union_map basic_map::apply_domain(const isl::union_map &umap2) const
7979{
7980 return isl::map(*this).apply_domain(umap2);
7981}
7982
7983isl::basic_map basic_map::apply_range(isl::basic_map bmap2) const
7984{
7985 auto res = isl_basic_map_apply_range(copy(), bmap2.release());
7986 return manage(res);
7987}
7988
7989isl::map basic_map::apply_range(const isl::map &map2) const
7990{
7991 return isl::map(*this).apply_range(map2);
7992}
7993
7994isl::union_map basic_map::apply_range(const isl::union_map &umap2) const
7995{
7996 return isl::map(*this).apply_range(umap2);
7997}
7998
7999isl::map basic_map::as_map() const
8000{
8001 return isl::map(*this).as_map();
8002}
8003
8004isl::multi_union_pw_aff basic_map::as_multi_union_pw_aff() const
8005{
8006 return isl::map(*this).as_multi_union_pw_aff();
8007}
8008
8009isl::pw_multi_aff basic_map::as_pw_multi_aff() const
8010{
8011 return isl::map(*this).as_pw_multi_aff();
8012}
8013
8014isl::union_pw_multi_aff basic_map::as_union_pw_multi_aff() const
8015{
8016 return isl::map(*this).as_union_pw_multi_aff();
8017}
8018
8020{
8021 return isl::map(*this).basic_map_list();
8022}
8023
8025{
8026 return isl::map(*this).bind_domain(tuple);
8027}
8028
8030{
8031 return isl::map(*this).bind_range(tuple);
8032}
8033
8035{
8036 return isl::map(*this).can_curry();
8037}
8038
8040{
8041 return isl::map(*this).coalesce();
8042}
8043
8045{
8046 return isl::map(*this).complement();
8047}
8048
8049isl::union_map basic_map::compute_divs() const
8050{
8051 return isl::map(*this).compute_divs();
8052}
8053
8054isl::map basic_map::curry() const
8055{
8056 return isl::map(*this).curry();
8057}
8058
8059isl::basic_set basic_map::deltas() const
8060{
8061 auto res = isl_basic_map_deltas(copy());
8062 return manage(res);
8063}
8064
8065isl::basic_map basic_map::detect_equalities() const
8066{
8068 return manage(res);
8069}
8070
8072{
8073 return isl::map(*this).dim(type);
8074}
8075
8077{
8078 return isl::map(*this).dim_max(pos);
8079}
8080
8082{
8083 return isl::map(*this).dim_min(pos);
8084}
8085
8087{
8088 auto res = isl_basic_map_domain(copy());
8089 return manage(res);
8090}
8091
8093{
8094 return isl::map(*this).domain_factor_domain();
8095}
8096
8097isl::map basic_map::domain_factor_range() const
8098{
8099 return isl::map(*this).domain_factor_range();
8100}
8101
8102isl::map basic_map::domain_map() const
8103{
8104 return isl::map(*this).domain_map();
8105}
8106
8107isl::union_pw_multi_aff basic_map::domain_map_union_pw_multi_aff() const
8108{
8109 return isl::map(*this).domain_map_union_pw_multi_aff();
8110}
8111
8112isl::map basic_map::domain_product(const isl::map &map2) const
8113{
8114 return isl::map(*this).domain_product(map2);
8115}
8116
8117isl::union_map basic_map::domain_product(const isl::union_map &umap2) const
8118{
8119 return isl::map(*this).domain_product(umap2);
8120}
8121
8123{
8124 return isl::map(*this).domain_tuple_dim();
8125}
8126
8127isl::id basic_map::domain_tuple_id() const
8128{
8129 return isl::map(*this).domain_tuple_id();
8130}
8131
8132isl::map basic_map::eq_at(const isl::multi_pw_aff &mpa) const
8133{
8134 return isl::map(*this).eq_at(mpa);
8135}
8136
8137isl::union_map basic_map::eq_at(const isl::multi_union_pw_aff &mupa) const
8138{
8139 return isl::map(*this).eq_at(mupa);
8140}
8141
8143{
8144 auto res = isl_basic_map_equal(space.release(), n_equal);
8145 return manage(res);
8146}
8147
8148isl::basic_map basic_map::equate(isl::dim type1, int pos1, isl::dim type2, int pos2) const
8149{
8150 auto res = isl_basic_map_equate(copy(), static_cast<enum isl_dim_type>(type1), pos1, static_cast<enum isl_dim_type>(type2), pos2);
8151 return manage(res);
8152}
8153
8154boolean basic_map::every_map(const std::function<boolean(isl::map)> &test) const
8155{
8156 return isl::map(*this).every_map(test);
8157}
8158
8160{
8161 return isl::map(*this).extract_map(space);
8162}
8163
8165{
8166 return isl::map(*this).factor_domain();
8167}
8168
8169isl::map basic_map::factor_range() const
8170{
8171 return isl::map(*this).factor_range();
8172}
8173
8174isl::basic_map basic_map::fix_si(isl::dim type, unsigned int pos, int value) const
8175{
8176 auto res = isl_basic_map_fix_si(copy(), static_cast<enum isl_dim_type>(type), pos, value);
8177 return manage(res);
8178}
8179
8181{
8182 auto res = isl_basic_map_fix_val(copy(), static_cast<enum isl_dim_type>(type), pos, v.release());
8183 return manage(res);
8184}
8185
8187{
8188 return this->fix_val(type, pos, isl::val(ctx(), v));
8189}
8190
8192{
8193 return isl::map(*this).fixed_power(exp);
8194}
8195
8197{
8198 return this->fixed_power(isl::val(ctx(), exp));
8199}
8200
8202{
8203 return isl::map(*this).flat_range_product(map2);
8204}
8205
8207{
8208 return isl::map(*this).flat_range_product(umap2);
8209}
8210
8212{
8213 auto res = isl_basic_map_flatten(copy());
8214 return manage(res);
8215}
8216
8218{
8220 return manage(res);
8221}
8222
8223isl::basic_map basic_map::flatten_range() const
8224{
8226 return manage(res);
8227}
8228
8230{
8231 return isl::map(*this).floordiv_val(d);
8232}
8233
8235{
8236 return this->floordiv_val(isl::val(ctx(), d));
8237}
8238
8240{
8241 return isl::map(*this).foreach_basic_map(fn);
8242}
8243
8244stat basic_map::foreach_map(const std::function<stat(isl::map)> &fn) const
8245{
8246 return isl::map(*this).foreach_map(fn);
8247}
8248
8254
8260
8262{
8263 auto res = isl_basic_map_gist(copy(), context.release());
8264 return manage(res);
8265}
8266
8268{
8269 return isl::map(*this).gist(context);
8270}
8271
8272isl::union_map basic_map::gist(const isl::union_map &context) const
8273{
8274 return isl::map(*this).gist(context);
8275}
8276
8277isl::map basic_map::gist_domain(const isl::set &context) const
8278{
8279 return isl::map(*this).gist_domain(context);
8280}
8281
8282isl::union_map basic_map::gist_domain(const isl::union_set &uset) const
8283{
8284 return isl::map(*this).gist_domain(uset);
8285}
8286
8287isl::map basic_map::gist_params(const isl::set &context) const
8288{
8289 return isl::map(*this).gist_params(context);
8290}
8291
8292isl::union_map basic_map::gist_range(const isl::union_set &uset) const
8293{
8294 return isl::map(*this).gist_range(uset);
8295}
8296
8297boolean basic_map::has_domain_tuple_id() const
8298{
8299 return isl::map(*this).has_domain_tuple_id();
8300}
8301
8303{
8304 return isl::map(*this).has_equal_space(map2);
8305}
8306
8307boolean basic_map::has_range_tuple_id() const
8308{
8309 return isl::map(*this).has_range_tuple_id();
8310}
8311
8313{
8314 return isl::map(*this).has_tuple_id(type);
8315}
8316
8318{
8319 return isl::map(*this).has_tuple_name(type);
8320}
8321
8323{
8324 auto res = isl_basic_map_intersect(copy(), bmap2.release());
8325 return manage(res);
8326}
8327
8329{
8330 return isl::map(*this).intersect(map2);
8331}
8332
8333isl::union_map basic_map::intersect(const isl::union_map &umap2) const
8334{
8335 return isl::map(*this).intersect(umap2);
8336}
8337
8338isl::basic_map basic_map::intersect_domain(isl::basic_set bset) const
8339{
8341 return manage(res);
8342}
8343
8344isl::map basic_map::intersect_domain(const isl::set &set) const
8345{
8346 return isl::map(*this).intersect_domain(set);
8347}
8348
8349isl::union_map basic_map::intersect_domain(const isl::space &space) const
8350{
8351 return isl::map(*this).intersect_domain(space);
8352}
8353
8354isl::union_map basic_map::intersect_domain(const isl::union_set &uset) const
8355{
8356 return isl::map(*this).intersect_domain(uset);
8357}
8358
8359isl::basic_map basic_map::intersect_domain(const isl::point &bset) const
8360{
8361 return this->intersect_domain(isl::basic_set(bset));
8362}
8363
8364isl::map basic_map::intersect_domain_factor_domain(const isl::map &factor) const
8365{
8366 return isl::map(*this).intersect_domain_factor_domain(factor);
8367}
8368
8369isl::union_map basic_map::intersect_domain_factor_domain(const isl::union_map &factor) const
8370{
8371 return isl::map(*this).intersect_domain_factor_domain(factor);
8372}
8373
8374isl::map basic_map::intersect_domain_factor_range(const isl::map &factor) const
8375{
8376 return isl::map(*this).intersect_domain_factor_range(factor);
8377}
8378
8379isl::union_map basic_map::intersect_domain_factor_range(const isl::union_map &factor) const
8380{
8381 return isl::map(*this).intersect_domain_factor_range(factor);
8382}
8383
8384isl::map basic_map::intersect_params(const isl::set &params) const
8385{
8386 return isl::map(*this).intersect_params(params);
8387}
8388
8389isl::basic_map basic_map::intersect_range(isl::basic_set bset) const
8390{
8392 return manage(res);
8393}
8394
8395isl::map basic_map::intersect_range(const isl::set &set) const
8396{
8397 return isl::map(*this).intersect_range(set);
8398}
8399
8400isl::union_map basic_map::intersect_range(const isl::space &space) const
8401{
8402 return isl::map(*this).intersect_range(space);
8403}
8404
8405isl::union_map basic_map::intersect_range(const isl::union_set &uset) const
8406{
8407 return isl::map(*this).intersect_range(uset);
8408}
8409
8410isl::basic_map basic_map::intersect_range(const isl::point &bset) const
8411{
8412 return this->intersect_range(isl::basic_set(bset));
8413}
8414
8415isl::map basic_map::intersect_range_factor_domain(const isl::map &factor) const
8416{
8417 return isl::map(*this).intersect_range_factor_domain(factor);
8418}
8419
8420isl::union_map basic_map::intersect_range_factor_domain(const isl::union_map &factor) const
8421{
8422 return isl::map(*this).intersect_range_factor_domain(factor);
8423}
8424
8425isl::map basic_map::intersect_range_factor_range(const isl::map &factor) const
8426{
8427 return isl::map(*this).intersect_range_factor_range(factor);
8428}
8429
8430isl::union_map basic_map::intersect_range_factor_range(const isl::union_map &factor) const
8431{
8432 return isl::map(*this).intersect_range_factor_range(factor);
8433}
8434
8435boolean basic_map::involves_dims(isl::dim type, unsigned int first, unsigned int n) const
8436{
8437 return isl::map(*this).involves_dims(type, first, n);
8438}
8439
8440boolean basic_map::is_bijective() const
8441{
8442 return isl::map(*this).is_bijective();
8443}
8444
8445boolean basic_map::is_disjoint(const isl::map &map2) const
8446{
8447 return isl::map(*this).is_disjoint(map2);
8448}
8449
8450boolean basic_map::is_disjoint(const isl::union_map &umap2) const
8451{
8452 return isl::map(*this).is_disjoint(umap2);
8453}
8454
8455boolean basic_map::is_empty() const
8456{
8457 auto res = isl_basic_map_is_empty(get());
8458 return manage(res);
8459}
8460
8461boolean basic_map::is_equal(const isl::basic_map &bmap2) const
8462{
8463 auto res = isl_basic_map_is_equal(get(), bmap2.get());
8464 return manage(res);
8465}
8466
8467boolean basic_map::is_equal(const isl::map &map2) const
8468{
8469 return isl::map(*this).is_equal(map2);
8470}
8471
8472boolean basic_map::is_equal(const isl::union_map &umap2) const
8473{
8474 return isl::map(*this).is_equal(umap2);
8475}
8476
8477boolean basic_map::is_injective() const
8478{
8479 return isl::map(*this).is_injective();
8480}
8481
8482boolean basic_map::is_single_valued() const
8483{
8484 return isl::map(*this).is_single_valued();
8485}
8486
8487boolean basic_map::is_strict_subset(const isl::map &map2) const
8488{
8489 return isl::map(*this).is_strict_subset(map2);
8490}
8491
8492boolean basic_map::is_strict_subset(const isl::union_map &umap2) const
8493{
8494 return isl::map(*this).is_strict_subset(umap2);
8495}
8496
8497boolean basic_map::is_subset(const isl::basic_map &bmap2) const
8498{
8499 auto res = isl_basic_map_is_subset(get(), bmap2.get());
8500 return manage(res);
8501}
8502
8503boolean basic_map::is_subset(const isl::map &map2) const
8504{
8505 return isl::map(*this).is_subset(map2);
8506}
8507
8508boolean basic_map::is_subset(const isl::union_map &umap2) const
8509{
8510 return isl::map(*this).is_subset(umap2);
8511}
8512
8513boolean basic_map::isa_map() const
8514{
8515 return isl::map(*this).isa_map();
8516}
8517
8518isl::map basic_map::lex_ge_at(const isl::multi_pw_aff &mpa) const
8519{
8520 return isl::map(*this).lex_ge_at(mpa);
8521}
8522
8523isl::map basic_map::lex_gt_at(const isl::multi_pw_aff &mpa) const
8524{
8525 return isl::map(*this).lex_gt_at(mpa);
8526}
8527
8528isl::map basic_map::lex_le_at(const isl::multi_pw_aff &mpa) const
8529{
8530 return isl::map(*this).lex_le_at(mpa);
8531}
8532
8533isl::map basic_map::lex_lt_at(const isl::multi_pw_aff &mpa) const
8534{
8535 return isl::map(*this).lex_lt_at(mpa);
8536}
8537
8538isl::map basic_map::lexmax() const
8539{
8540 auto res = isl_basic_map_lexmax(copy());
8541 return manage(res);
8542}
8543
8544isl::pw_multi_aff basic_map::lexmax_pw_multi_aff() const
8545{
8546 return isl::map(*this).lexmax_pw_multi_aff();
8547}
8548
8549isl::map basic_map::lexmin() const
8550{
8551 auto res = isl_basic_map_lexmin(copy());
8552 return manage(res);
8553}
8554
8555isl::pw_multi_aff basic_map::lexmin_pw_multi_aff() const
8556{
8557 return isl::map(*this).lexmin_pw_multi_aff();
8558}
8559
8560isl::map basic_map::lower_bound(const isl::multi_pw_aff &lower) const
8561{
8562 return isl::map(*this).lower_bound(lower);
8563}
8564
8565isl::map basic_map::lower_bound_si(isl::dim type, unsigned int pos, int value) const
8566{
8567 return isl::map(*this).lower_bound_si(type, pos, value);
8568}
8569
8571{
8572 return isl::map(*this).map_list();
8573}
8574
8576{
8577 return isl::map(*this).max_multi_pw_aff();
8578}
8579
8580isl::multi_pw_aff basic_map::min_multi_pw_aff() const
8581{
8582 return isl::map(*this).min_multi_pw_aff();
8583}
8584
8585isl::map basic_map::move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const
8586{
8587 return isl::map(*this).move_dims(dst_type, dst_pos, src_type, src_pos, n);
8588}
8589
8590class size basic_map::n_basic_map() const
8591{
8592 return isl::map(*this).n_basic_map();
8593}
8594
8595isl::map basic_map::order_lt(isl::dim type1, int pos1, isl::dim type2, int pos2) const
8596{
8597 return isl::map(*this).order_lt(type1, pos1, type2, pos2);
8598}
8599
8601{
8602 return isl::map(*this).params();
8603}
8604
8606{
8607 auto res = isl_basic_map_plain_get_val_if_fixed(get(), static_cast<enum isl_dim_type>(type), pos);
8608 return manage(res);
8609}
8610
8612{
8613 return isl::map(*this).polyhedral_hull();
8614}
8615
8617{
8618 return isl::map(*this).preimage_domain(ma);
8619}
8620
8621isl::map basic_map::preimage_domain(const isl::multi_pw_aff &mpa) const
8622{
8623 return isl::map(*this).preimage_domain(mpa);
8624}
8625
8626isl::map basic_map::preimage_domain(const isl::pw_multi_aff &pma) const
8627{
8628 return isl::map(*this).preimage_domain(pma);
8629}
8630
8631isl::union_map basic_map::preimage_domain(const isl::union_pw_multi_aff &upma) const
8632{
8633 return isl::map(*this).preimage_domain(upma);
8634}
8635
8636isl::map basic_map::preimage_range(const isl::multi_aff &ma) const
8637{
8638 return isl::map(*this).preimage_range(ma);
8639}
8640
8641isl::map basic_map::preimage_range(const isl::pw_multi_aff &pma) const
8642{
8643 return isl::map(*this).preimage_range(pma);
8644}
8645
8646isl::union_map basic_map::preimage_range(const isl::union_pw_multi_aff &upma) const
8647{
8648 return isl::map(*this).preimage_range(upma);
8649}
8650
8651isl::map basic_map::product(const isl::map &map2) const
8652{
8653 return isl::map(*this).product(map2);
8654}
8655
8656isl::union_map basic_map::product(const isl::union_map &umap2) const
8657{
8658 return isl::map(*this).product(umap2);
8659}
8660
8661isl::map basic_map::project_out(isl::dim type, unsigned int first, unsigned int n) const
8662{
8663 return isl::map(*this).project_out(type, first, n);
8664}
8665
8667{
8668 return isl::map(*this).project_out_all_params();
8669}
8670
8672{
8673 return isl::map(*this).range();
8674}
8675
8676isl::map basic_map::range_factor_domain() const
8677{
8678 return isl::map(*this).range_factor_domain();
8679}
8680
8681isl::map basic_map::range_factor_range() const
8682{
8683 return isl::map(*this).range_factor_range();
8684}
8685
8686isl::fixed_box basic_map::range_lattice_tile() const
8687{
8688 return isl::map(*this).range_lattice_tile();
8689}
8690
8691isl::map basic_map::range_map() const
8692{
8693 return isl::map(*this).range_map();
8694}
8695
8696isl::map basic_map::range_product(const isl::map &map2) const
8697{
8698 return isl::map(*this).range_product(map2);
8699}
8700
8701isl::union_map basic_map::range_product(const isl::union_map &umap2) const
8702{
8703 return isl::map(*this).range_product(umap2);
8704}
8705
8706isl::map basic_map::range_reverse() const
8707{
8708 return isl::map(*this).range_reverse();
8709}
8710
8711isl::fixed_box basic_map::range_simple_fixed_box_hull() const
8712{
8713 return isl::map(*this).range_simple_fixed_box_hull();
8714}
8715
8716class size basic_map::range_tuple_dim() const
8717{
8718 return isl::map(*this).range_tuple_dim();
8719}
8720
8721isl::id basic_map::range_tuple_id() const
8722{
8723 return isl::map(*this).range_tuple_id();
8724}
8725
8726isl::basic_map basic_map::reverse() const
8727{
8728 auto res = isl_basic_map_reverse(copy());
8729 return manage(res);
8730}
8731
8732isl::basic_map basic_map::sample() const
8733{
8734 auto res = isl_basic_map_sample(copy());
8735 return manage(res);
8736}
8737
8738isl::map basic_map::set_domain_tuple(const isl::id &id) const
8739{
8740 return isl::map(*this).set_domain_tuple(id);
8741}
8742
8743isl::map basic_map::set_domain_tuple(const std::string &id) const
8744{
8745 return this->set_domain_tuple(isl::id(ctx(), id));
8746}
8747
8748isl::map basic_map::set_range_tuple(const isl::id &id) const
8749{
8750 return isl::map(*this).set_range_tuple(id);
8751}
8752
8753isl::map basic_map::set_range_tuple(const std::string &id) const
8754{
8755 return this->set_range_tuple(isl::id(ctx(), id));
8756}
8757
8759{
8760 return isl::map(*this).set_tuple_id(type, id);
8761}
8762
8763isl::map basic_map::set_tuple_id(isl::dim type, const std::string &id) const
8764{
8765 return this->set_tuple_id(type, isl::id(ctx(), id));
8766}
8767
8769{
8770 return isl::map(*this).space();
8771}
8772
8774{
8775 return isl::map(*this).subtract(map2);
8776}
8777
8778isl::union_map basic_map::subtract(const isl::union_map &umap2) const
8779{
8780 return isl::map(*this).subtract(umap2);
8781}
8782
8783isl::union_map basic_map::subtract_domain(const isl::union_set &dom) const
8784{
8785 return isl::map(*this).subtract_domain(dom);
8786}
8787
8788isl::union_map basic_map::subtract_range(const isl::union_set &dom) const
8789{
8790 return isl::map(*this).subtract_range(dom);
8791}
8792
8794{
8795 return isl::map(*this).sum(map2);
8796}
8797
8799{
8800 auto res = isl_basic_map_to_list(copy());
8801 return manage(res);
8802}
8803
8805{
8806 return isl::map(*this).to_union_map();
8807}
8808
8810{
8811 return isl::map(*this).tuple_id(type);
8812}
8813
8815{
8816 return isl::map(*this).uncurry();
8817}
8818
8820{
8821 auto res = isl_basic_map_union(copy(), bmap2.release());
8822 return manage(res);
8823}
8824
8825isl::map basic_map::unite(const isl::map &map2) const
8826{
8827 return isl::map(*this).unite(map2);
8828}
8829
8830isl::union_map basic_map::unite(const isl::union_map &umap2) const
8831{
8832 return isl::map(*this).unite(umap2);
8833}
8834
8840
8842{
8843 return isl::map(*this).unshifted_simple_hull();
8844}
8845
8847{
8848 return isl::map(*this).upper_bound(upper);
8849}
8850
8851isl::map basic_map::upper_bound_si(isl::dim type, unsigned int pos, int value) const
8852{
8853 return isl::map(*this).upper_bound_si(type, pos, value);
8854}
8855
8857{
8858 return isl::map(*this).wrap();
8859}
8860
8862{
8863 return isl::map(*this).zip();
8864}
8865
8866inline std::ostream &operator<<(std::ostream &os, const basic_map &obj)
8867{
8868 char *str = isl_basic_map_to_str(obj.get());
8869 if (!str) {
8870 os.setstate(std::ios_base::badbit);
8871 return os;
8872 }
8873 os << str;
8874 free(str);
8875 return os;
8876}
8877
8878// implementations for isl::basic_map_list
8879basic_map_list manage(__isl_take isl_basic_map_list *ptr) {
8880 return basic_map_list(ptr);
8881}
8883 ptr = isl_basic_map_list_copy(ptr);
8884 return basic_map_list(ptr);
8885}
8886
8889
8891 : ptr(nullptr)
8892{
8893 ptr = obj.copy();
8894}
8895
8897 : ptr(ptr) {}
8898
8900{
8901 auto res = isl_basic_map_list_alloc(ctx.release(), n);
8902 ptr = res;
8903}
8904
8906{
8907 auto res = isl_basic_map_list_from_basic_map(el.release());
8908 ptr = res;
8909}
8910
8912 std::swap(this->ptr, obj.ptr);
8913 return *this;
8914}
8915
8917 if (ptr)
8918 isl_basic_map_list_free(ptr);
8919}
8920
8921__isl_give isl_basic_map_list *basic_map_list::copy() const & {
8922 return isl_basic_map_list_copy(ptr);
8923}
8924
8925__isl_keep isl_basic_map_list *basic_map_list::get() const {
8926 return ptr;
8927}
8928
8930 isl_basic_map_list *tmp = ptr;
8931 ptr = nullptr;
8932 return tmp;
8933}
8934
8936 return ptr == nullptr;
8937}
8938
8940 return isl::ctx(isl_basic_map_list_get_ctx(ptr));
8941}
8942
8944{
8945 auto res = isl_basic_map_list_add(copy(), el.release());
8946 return manage(res);
8947}
8948
8950{
8951 auto res = isl_basic_map_list_get_at(get(), index);
8952 return manage(res);
8953}
8954
8956{
8957 return at(index);
8958}
8959
8961{
8962 auto res = isl_basic_map_list_clear(copy());
8963 return manage(res);
8964}
8965
8967{
8968 auto res = isl_basic_map_list_concat(copy(), list2.release());
8969 return manage(res);
8970}
8971
8972isl::basic_map_list basic_map_list::drop(unsigned int first, unsigned int n) const
8973{
8974 auto res = isl_basic_map_list_drop(copy(), first, n);
8975 return manage(res);
8976}
8977
8979{
8980 struct fn_data {
8981 std::function<stat(isl::basic_map)> func;
8982 } fn_data = { fn };
8983 auto fn_lambda = [](isl_basic_map *arg_0, void *arg_1) -> isl_stat {
8984 auto *data = static_cast<struct fn_data *>(arg_1);
8985 auto ret = (data->func)(manage(arg_0));
8986 return ret.release();
8987 };
8988 auto res = isl_basic_map_list_foreach(get(), fn_lambda, &fn_data);
8989 return manage(res);
8990}
8991
8993{
8994 auto res = isl_basic_map_list_insert(copy(), pos, el.release());
8995 return manage(res);
8996}
8997
8999{
9000 auto res = isl_basic_map_list_size(get());
9001 return manage(res);
9002}
9003
9004inline std::ostream &operator<<(std::ostream &os, const basic_map_list &obj)
9005{
9006 char *str = isl_basic_map_list_to_str(obj.get());
9007 if (!str) {
9008 os.setstate(std::ios_base::badbit);
9009 return os;
9010 }
9011 os << str;
9012 free(str);
9013 return os;
9014}
9015
9016// implementations for isl::basic_set
9017basic_set manage(__isl_take isl_basic_set *ptr) {
9018 return basic_set(ptr);
9019}
9021 ptr = isl_basic_set_copy(ptr);
9022 return basic_set(ptr);
9023}
9024
9026 : ptr(nullptr) {}
9027
9028basic_set::basic_set(const basic_set &obj)
9029 : ptr(nullptr)
9030{
9031 ptr = obj.copy();
9032}
9033
9034basic_set::basic_set(__isl_take isl_basic_set *ptr)
9035 : ptr(ptr) {}
9036
9037basic_set::basic_set(isl::point pnt)
9038{
9039 auto res = isl_basic_set_from_point(pnt.release());
9040 ptr = res;
9041}
9042
9043basic_set::basic_set(isl::ctx ctx, const std::string &str)
9044{
9045 auto res = isl_basic_set_read_from_str(ctx.release(), str.c_str());
9046 ptr = res;
9047}
9048
9049basic_set &basic_set::operator=(basic_set obj) {
9050 std::swap(this->ptr, obj.ptr);
9051 return *this;
9052}
9053
9054basic_set::~basic_set() {
9055 if (ptr)
9056 isl_basic_set_free(ptr);
9057}
9058
9059__isl_give isl_basic_set *basic_set::copy() const & {
9060 return isl_basic_set_copy(ptr);
9061}
9062
9063__isl_keep isl_basic_set *basic_set::get() const {
9064 return ptr;
9065}
9066
9067__isl_give isl_basic_set *basic_set::release() {
9068 isl_basic_set *tmp = ptr;
9069 ptr = nullptr;
9070 return tmp;
9071}
9072
9073bool basic_set::is_null() const {
9074 return ptr == nullptr;
9075}
9076
9077isl::ctx basic_set::ctx() const {
9078 return isl::ctx(isl_basic_set_get_ctx(ptr));
9079}
9080
9082{
9083 return isl::set(*this).add_constraint(constraint);
9084}
9085
9087{
9088 return isl::set(*this).add_dims(type, n);
9089}
9090
9092{
9093 auto res = isl_basic_set_affine_hull(copy());
9094 return manage(res);
9095}
9096
9098{
9099 return isl::set(*this).align_params(model);
9100}
9101
9103{
9104 auto res = isl_basic_set_apply(copy(), bmap.release());
9105 return manage(res);
9106}
9107
9108isl::set basic_set::apply(const isl::map &map) const
9109{
9110 return isl::set(*this).apply(map);
9111}
9112
9113isl::union_set basic_set::apply(const isl::union_map &umap) const
9114{
9115 return isl::set(*this).apply(umap);
9116}
9117
9118isl::pw_multi_aff basic_set::as_pw_multi_aff() const
9119{
9120 return isl::set(*this).as_pw_multi_aff();
9121}
9122
9123isl::set basic_set::as_set() const
9124{
9125 return isl::set(*this).as_set();
9126}
9127
9129{
9130 return isl::set(*this).basic_set_list();
9131}
9132
9134{
9135 return isl::set(*this).bind(tuple);
9136}
9137
9138isl::set basic_set::coalesce() const
9139{
9140 return isl::set(*this).coalesce();
9141}
9142
9143isl::set basic_set::complement() const
9144{
9145 return isl::set(*this).complement();
9146}
9147
9148isl::union_set basic_set::compute_divs() const
9149{
9150 return isl::set(*this).compute_divs();
9151}
9152
9154{
9155 return isl::set(*this).contains(space);
9156}
9157
9159{
9160 return isl::set(*this).convex_hull();
9161}
9162
9164{
9165 auto res = isl_basic_set_detect_equalities(copy());
9166 return manage(res);
9167}
9168
9170{
9171 auto res = isl_basic_set_dim(get(), static_cast<enum isl_dim_type>(type));
9172 return manage(res);
9173}
9174
9176{
9177 return isl::set(*this).dim_has_any_lower_bound(type, pos);
9178}
9179
9181{
9182 return isl::set(*this).dim_id(type, pos);
9183}
9184
9186{
9187 return isl::set(*this).dim_max(pos);
9188}
9189
9191{
9192 auto res = isl_basic_set_dim_max_val(copy(), pos);
9193 return manage(res);
9194}
9195
9197{
9198 return isl::set(*this).dim_min(pos);
9199}
9200
9202{
9203 return isl::set(*this).dim_min_val(pos);
9204}
9205
9206std::string basic_set::dim_name(isl::dim type, unsigned int pos) const
9207{
9208 return isl::set(*this).dim_name(type, pos);
9209}
9210
9212{
9213 auto res = isl_basic_set_get_div(get(), pos);
9214 return manage(res);
9215}
9216
9218{
9219 return div(pos);
9220}
9221
9223{
9224 return isl::set(*this).drop_constraints_involving_dims(type, first, n);
9225}
9226
9227isl::set basic_set::eliminate(isl::dim type, unsigned int first, unsigned int n) const
9228{
9229 return isl::set(*this).eliminate(type, first, n);
9230}
9231
9232boolean basic_set::every_set(const std::function<boolean(isl::set)> &test) const
9233{
9234 return isl::set(*this).every_set(test);
9235}
9236
9238{
9239 return isl::set(*this).extract_set(space);
9240}
9241
9243{
9244 return isl::set(*this).find_dim_by_id(type, id);
9245}
9246
9247int basic_set::find_dim_by_id(isl::dim type, const std::string &id) const
9248{
9249 return this->find_dim_by_id(type, isl::id(ctx(), id));
9250}
9251
9252isl::basic_set basic_set::fix_si(isl::dim type, unsigned int pos, int value) const
9253{
9254 auto res = isl_basic_set_fix_si(copy(), static_cast<enum isl_dim_type>(type), pos, value);
9255 return manage(res);
9256}
9257
9259{
9260 auto res = isl_basic_set_fix_val(copy(), static_cast<enum isl_dim_type>(type), pos, v.release());
9261 return manage(res);
9262}
9263
9265{
9266 return this->fix_val(type, pos, isl::val(ctx(), v));
9267}
9268
9270{
9271 auto res = isl_basic_set_flatten(copy());
9272 return manage(res);
9273}
9274
9276{
9277 return isl::set(*this).foreach_basic_set(fn);
9278}
9279
9280stat basic_set::foreach_point(const std::function<stat(isl::point)> &fn) const
9281{
9282 return isl::set(*this).foreach_point(fn);
9283}
9284
9285stat basic_set::foreach_set(const std::function<stat(isl::set)> &fn) const
9286{
9287 return isl::set(*this).foreach_set(fn);
9288}
9289
9291{
9292 auto res = isl_basic_set_gist(copy(), context.release());
9293 return manage(res);
9294}
9295
9296isl::set basic_set::gist(const isl::set &context) const
9297{
9298 return isl::set(*this).gist(context);
9299}
9300
9301isl::union_set basic_set::gist(const isl::union_set &context) const
9302{
9303 return isl::set(*this).gist(context);
9304}
9305
9306isl::basic_set basic_set::gist(const isl::point &context) const
9307{
9308 return this->gist(isl::basic_set(context));
9309}
9310
9311isl::set basic_set::gist_params(const isl::set &context) const
9312{
9313 return isl::set(*this).gist_params(context);
9314}
9315
9317{
9318 return isl::set(*this).has_equal_space(set2);
9319}
9320
9322{
9323 return isl::set(*this).identity();
9324}
9325
9327{
9328 return isl::set(*this).identity_union_pw_multi_aff();
9329}
9330
9332{
9333 return isl::set(*this).indicator_function();
9334}
9335
9336isl::set basic_set::insert_dims(isl::dim type, unsigned int pos, unsigned int n) const
9337{
9338 return isl::set(*this).insert_dims(type, pos, n);
9339}
9340
9342{
9343 return isl::set(*this).insert_domain(domain);
9344}
9345
9346isl::basic_set basic_set::intersect(isl::basic_set bset2) const
9347{
9348 auto res = isl_basic_set_intersect(copy(), bset2.release());
9349 return manage(res);
9350}
9351
9352isl::set basic_set::intersect(const isl::set &set2) const
9353{
9354 return isl::set(*this).intersect(set2);
9355}
9356
9357isl::union_set basic_set::intersect(const isl::union_set &uset2) const
9358{
9359 return isl::set(*this).intersect(uset2);
9360}
9361
9362isl::basic_set basic_set::intersect(const isl::point &bset2) const
9363{
9364 return this->intersect(isl::basic_set(bset2));
9365}
9366
9367isl::basic_set basic_set::intersect_params(isl::basic_set bset2) const
9368{
9369 auto res = isl_basic_set_intersect_params(copy(), bset2.release());
9370 return manage(res);
9371}
9372
9373isl::set basic_set::intersect_params(const isl::set &params) const
9374{
9375 return isl::set(*this).intersect_params(params);
9376}
9377
9378isl::basic_set basic_set::intersect_params(const isl::point &bset2) const
9379{
9380 return this->intersect_params(isl::basic_set(bset2));
9381}
9382
9383boolean basic_set::involves_dims(isl::dim type, unsigned int first, unsigned int n) const
9384{
9385 return isl::set(*this).involves_dims(type, first, n);
9386}
9387
9388boolean basic_set::involves_locals() const
9389{
9390 return isl::set(*this).involves_locals();
9391}
9392
9394{
9396 return manage(res);
9397}
9398
9399boolean basic_set::is_disjoint(const isl::set &set2) const
9400{
9401 return isl::set(*this).is_disjoint(set2);
9402}
9403
9404boolean basic_set::is_disjoint(const isl::union_set &uset2) const
9405{
9406 return isl::set(*this).is_disjoint(uset2);
9407}
9408
9409boolean basic_set::is_empty() const
9410{
9411 auto res = isl_basic_set_is_empty(get());
9412 return manage(res);
9413}
9414
9415boolean basic_set::is_equal(const isl::basic_set &bset2) const
9416{
9417 auto res = isl_basic_set_is_equal(get(), bset2.get());
9418 return manage(res);
9419}
9420
9421boolean basic_set::is_equal(const isl::set &set2) const
9422{
9423 return isl::set(*this).is_equal(set2);
9424}
9425
9426boolean basic_set::is_equal(const isl::union_set &uset2) const
9427{
9428 return isl::set(*this).is_equal(uset2);
9429}
9430
9431boolean basic_set::is_equal(const isl::point &bset2) const
9432{
9433 return this->is_equal(isl::basic_set(bset2));
9434}
9435
9437{
9438 return isl::set(*this).is_params();
9439}
9440
9441boolean basic_set::is_singleton() const
9442{
9443 return isl::set(*this).is_singleton();
9444}
9445
9446boolean basic_set::is_strict_subset(const isl::set &set2) const
9447{
9448 return isl::set(*this).is_strict_subset(set2);
9449}
9450
9451boolean basic_set::is_strict_subset(const isl::union_set &uset2) const
9452{
9453 return isl::set(*this).is_strict_subset(uset2);
9454}
9455
9456boolean basic_set::is_subset(const isl::basic_set &bset2) const
9457{
9458 auto res = isl_basic_set_is_subset(get(), bset2.get());
9459 return manage(res);
9460}
9461
9462boolean basic_set::is_subset(const isl::set &set2) const
9463{
9464 return isl::set(*this).is_subset(set2);
9465}
9466
9467boolean basic_set::is_subset(const isl::union_set &uset2) const
9468{
9469 return isl::set(*this).is_subset(uset2);
9470}
9471
9472boolean basic_set::is_subset(const isl::point &bset2) const
9473{
9474 return this->is_subset(isl::basic_set(bset2));
9475}
9476
9477boolean basic_set::is_wrapping() const
9478{
9479 auto res = isl_basic_set_is_wrapping(get());
9480 return manage(res);
9481}
9482
9483boolean basic_set::isa_set() const
9484{
9485 return isl::set(*this).isa_set();
9486}
9487
9488isl::set basic_set::lexmax() const
9489{
9490 auto res = isl_basic_set_lexmax(copy());
9491 return manage(res);
9492}
9493
9494isl::pw_multi_aff basic_set::lexmax_pw_multi_aff() const
9495{
9496 return isl::set(*this).lexmax_pw_multi_aff();
9497}
9498
9499isl::set basic_set::lexmin() const
9500{
9501 auto res = isl_basic_set_lexmin(copy());
9502 return manage(res);
9503}
9504
9505isl::pw_multi_aff basic_set::lexmin_pw_multi_aff() const
9506{
9507 return isl::set(*this).lexmin_pw_multi_aff();
9508}
9509
9510isl::set basic_set::lower_bound(const isl::multi_pw_aff &lower) const
9511{
9512 return isl::set(*this).lower_bound(lower);
9513}
9514
9515isl::set basic_set::lower_bound(const isl::multi_val &lower) const
9516{
9517 return isl::set(*this).lower_bound(lower);
9518}
9519
9520isl::set basic_set::lower_bound_si(isl::dim type, unsigned int pos, int value) const
9521{
9522 return isl::set(*this).lower_bound_si(type, pos, value);
9523}
9524
9526{
9527 return isl::set(*this).lower_bound_val(type, pos, value);
9528}
9529
9530isl::set basic_set::lower_bound_val(isl::dim type, unsigned int pos, long value) const
9531{
9532 return this->lower_bound_val(type, pos, isl::val(ctx(), value));
9533}
9534
9536{
9537 return isl::set(*this).max_multi_pw_aff();
9538}
9539
9540isl::val basic_set::max_val(const isl::aff &obj) const
9541{
9542 return isl::set(*this).max_val(obj);
9543}
9544
9545isl::multi_pw_aff basic_set::min_multi_pw_aff() const
9546{
9547 return isl::set(*this).min_multi_pw_aff();
9548}
9549
9550isl::val basic_set::min_val(const isl::aff &obj) const
9551{
9552 return isl::set(*this).min_val(obj);
9553}
9554
9555class size basic_set::n_basic_set() const
9556{
9557 return isl::set(*this).n_basic_set();
9558}
9559
9560isl::basic_set basic_set::params() const
9561{
9562 auto res = isl_basic_set_params(copy());
9563 return manage(res);
9564}
9565
9567{
9568 return isl::set(*this).plain_get_val_if_fixed(type, pos);
9569}
9570
9572{
9573 return isl::set(*this).plain_multi_val_if_fixed();
9574}
9575
9576isl::basic_set basic_set::polyhedral_hull() const
9577{
9578 return isl::set(*this).polyhedral_hull();
9579}
9580
9581isl::set basic_set::preimage(const isl::multi_aff &ma) const
9582{
9583 return isl::set(*this).preimage(ma);
9584}
9585
9586isl::set basic_set::preimage(const isl::multi_pw_aff &mpa) const
9587{
9588 return isl::set(*this).preimage(mpa);
9589}
9590
9591isl::set basic_set::preimage(const isl::pw_multi_aff &pma) const
9592{
9593 return isl::set(*this).preimage(pma);
9594}
9595
9596isl::union_set basic_set::preimage(const isl::union_pw_multi_aff &upma) const
9597{
9598 return isl::set(*this).preimage(upma);
9599}
9600
9601isl::set basic_set::product(const isl::set &set2) const
9602{
9603 return isl::set(*this).product(set2);
9604}
9605
9606isl::basic_set basic_set::project_out(isl::dim type, unsigned int first, unsigned int n) const
9607{
9608 auto res = isl_basic_set_project_out(copy(), static_cast<enum isl_dim_type>(type), first, n);
9609 return manage(res);
9610}
9611
9613{
9614 return isl::set(*this).project_out_all_params();
9615}
9616
9617isl::set basic_set::project_out_param(const isl::id &id) const
9618{
9619 return isl::set(*this).project_out_param(id);
9620}
9621
9622isl::set basic_set::project_out_param(const std::string &id) const
9623{
9624 return this->project_out_param(isl::id(ctx(), id));
9625}
9626
9627isl::set basic_set::project_out_param(const isl::id_list &list) const
9628{
9629 return isl::set(*this).project_out_param(list);
9630}
9631
9632isl::pw_multi_aff basic_set::pw_multi_aff_on_domain(const isl::multi_val &mv) const
9633{
9634 return isl::set(*this).pw_multi_aff_on_domain(mv);
9635}
9636
9637isl::set basic_set::remove_dims(isl::dim type, unsigned int first, unsigned int n) const
9638{
9639 return isl::set(*this).remove_dims(type, first, n);
9640}
9641
9643{
9644 return isl::set(*this).remove_divs();
9645}
9646
9648{
9649 return isl::set(*this).remove_redundancies();
9650}
9651
9653{
9654 return isl::set(*this).reset_tuple_id();
9655}
9656
9658{
9659 auto res = isl_basic_set_sample(copy());
9660 return manage(res);
9661}
9662
9663isl::point basic_set::sample_point() const
9664{
9665 auto res = isl_basic_set_sample_point(copy());
9666 return manage(res);
9667}
9668
9670{
9671 return isl::set(*this).set_dim_id(type, pos, id);
9672}
9673
9674isl::set basic_set::set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const
9675{
9676 return this->set_dim_id(type, pos, isl::id(ctx(), id));
9677}
9678
9680{
9681 return isl::set(*this).set_list();
9682}
9683
9685{
9686 return isl::set(*this).set_tuple_id(id);
9687}
9688
9689isl::set basic_set::set_tuple_id(const std::string &id) const
9690{
9691 return this->set_tuple_id(isl::id(ctx(), id));
9692}
9693
9695{
9696 return isl::set(*this).simple_fixed_box_hull();
9697}
9698
9700{
9701 return isl::set(*this).simple_hull();
9702}
9703
9705{
9706 auto res = isl_basic_set_get_space(get());
9707 return manage(res);
9708}
9709
9711{
9712 return space();
9713}
9714
9716{
9717 return isl::set(*this).stride(pos);
9718}
9719
9720isl::set basic_set::subtract(const isl::set &set2) const
9721{
9722 return isl::set(*this).subtract(set2);
9723}
9724
9725isl::union_set basic_set::subtract(const isl::union_set &uset2) const
9726{
9727 return isl::set(*this).subtract(uset2);
9728}
9729
9730isl::basic_set_list basic_set::to_list() const
9731{
9732 auto res = isl_basic_set_to_list(copy());
9733 return manage(res);
9734}
9735
9736isl::set basic_set::to_set() const
9737{
9738 auto res = isl_basic_set_to_set(copy());
9739 return manage(res);
9740}
9741
9742isl::union_set basic_set::to_union_set() const
9743{
9744 return isl::set(*this).to_union_set();
9745}
9746
9747isl::map basic_set::translation() const
9748{
9749 return isl::set(*this).translation();
9750}
9751
9752class size basic_set::tuple_dim() const
9753{
9754 return isl::set(*this).tuple_dim();
9755}
9756
9758{
9759 return isl::set(*this).tuple_id();
9760}
9761
9762std::string basic_set::tuple_name() const
9763{
9764 return isl::set(*this).tuple_name();
9765}
9766
9768{
9769 return isl::set(*this).unbind_params(tuple);
9770}
9771
9772isl::map basic_set::unbind_params_insert_domain(const isl::multi_id &domain) const
9773{
9774 return isl::set(*this).unbind_params_insert_domain(domain);
9775}
9776
9777isl::set basic_set::unite(isl::basic_set bset2) const
9778{
9779 auto res = isl_basic_set_union(copy(), bset2.release());
9780 return manage(res);
9781}
9782
9783isl::set basic_set::unite(const isl::set &set2) const
9784{
9785 return isl::set(*this).unite(set2);
9786}
9787
9788isl::union_set basic_set::unite(const isl::union_set &uset2) const
9789{
9790 return isl::set(*this).unite(uset2);
9791}
9792
9793isl::set basic_set::unite(const isl::point &bset2) const
9794{
9795 return this->unite(isl::basic_set(bset2));
9796}
9797
9803
9805{
9806 return isl::set(*this).unshifted_simple_hull();
9807}
9808
9809isl::map basic_set::unwrap() const
9810{
9811 return isl::set(*this).unwrap();
9812}
9813
9814isl::set basic_set::upper_bound(const isl::multi_pw_aff &upper) const
9815{
9816 return isl::set(*this).upper_bound(upper);
9817}
9818
9819isl::set basic_set::upper_bound(const isl::multi_val &upper) const
9820{
9821 return isl::set(*this).upper_bound(upper);
9822}
9823
9825{
9826 return isl::set(*this).upper_bound_val(type, pos, value);
9827}
9828
9829isl::set basic_set::upper_bound_val(isl::dim type, unsigned int pos, long value) const
9830{
9831 return this->upper_bound_val(type, pos, isl::val(ctx(), value));
9832}
9833
9834inline std::ostream &operator<<(std::ostream &os, const basic_set &obj)
9835{
9836 char *str = isl_basic_set_to_str(obj.get());
9837 if (!str) {
9838 os.setstate(std::ios_base::badbit);
9839 return os;
9840 }
9841 os << str;
9842 free(str);
9843 return os;
9844}
9845
9846// implementations for isl::basic_set_list
9851 ptr = isl_basic_set_list_copy(ptr);
9852 return basic_set_list(ptr);
9853}
9854
9857
9859 : ptr(nullptr)
9860{
9861 ptr = obj.copy();
9862}
9863
9866
9868{
9869 auto res = isl_basic_set_list_alloc(ctx.release(), n);
9870 ptr = res;
9871}
9872
9874{
9875 auto res = isl_basic_set_list_from_basic_set(el.release());
9876 ptr = res;
9877}
9878
9880 std::swap(this->ptr, obj.ptr);
9881 return *this;
9882}
9883
9885 if (ptr)
9886 isl_basic_set_list_free(ptr);
9887}
9888
9890 return isl_basic_set_list_copy(ptr);
9891}
9892
9896
9898 isl_basic_set_list *tmp = ptr;
9899 ptr = nullptr;
9900 return tmp;
9901}
9902
9904 return ptr == nullptr;
9905}
9906
9908 return isl::ctx(isl_basic_set_list_get_ctx(ptr));
9909}
9910
9912{
9913 auto res = isl_basic_set_list_add(copy(), el.release());
9914 return manage(res);
9915}
9916
9918{
9919 auto res = isl_basic_set_list_get_at(get(), index);
9920 return manage(res);
9921}
9922
9924{
9925 return at(index);
9926}
9927
9929{
9930 auto res = isl_basic_set_list_clear(copy());
9931 return manage(res);
9932}
9933
9935{
9936 auto res = isl_basic_set_list_concat(copy(), list2.release());
9937 return manage(res);
9938}
9939
9940isl::basic_set_list basic_set_list::drop(unsigned int first, unsigned int n) const
9941{
9942 auto res = isl_basic_set_list_drop(copy(), first, n);
9943 return manage(res);
9944}
9945
9947{
9948 struct fn_data {
9949 std::function<stat(isl::basic_set)> func;
9950 } fn_data = { fn };
9951 auto fn_lambda = [](isl_basic_set *arg_0, void *arg_1) -> isl_stat {
9952 auto *data = static_cast<struct fn_data *>(arg_1);
9953 auto ret = (data->func)(manage(arg_0));
9954 return ret.release();
9955 };
9956 auto res = isl_basic_set_list_foreach(get(), fn_lambda, &fn_data);
9957 return manage(res);
9958}
9959
9961{
9962 auto res = isl_basic_set_list_insert(copy(), pos, el.release());
9963 return manage(res);
9964}
9965
9967{
9968 auto res = isl_basic_set_list_size(get());
9969 return manage(res);
9970}
9971
9972inline std::ostream &operator<<(std::ostream &os, const basic_set_list &obj)
9973{
9974 char *str = isl_basic_set_list_to_str(obj.get());
9975 if (!str) {
9976 os.setstate(std::ios_base::badbit);
9977 return os;
9978 }
9979 os << str;
9980 free(str);
9981 return os;
9982}
9983
9984// implementations for isl::constraint
9992
9994 : ptr(nullptr) {}
9995
9997 : ptr(nullptr)
9998{
9999 ptr = obj.copy();
10000}
10001
10004
10006 std::swap(this->ptr, obj.ptr);
10007 return *this;
10008}
10009
10014
10018
10020 return ptr;
10021}
10022
10024 isl_constraint *tmp = ptr;
10025 ptr = nullptr;
10026 return tmp;
10027}
10028
10030 return ptr == nullptr;
10031}
10032
10036
10042
10048
10050{
10051 auto res = isl_constraint_set_coefficient_si(copy(), static_cast<enum isl_dim_type>(type), pos, v);
10052 return manage(res);
10053}
10054
10056{
10058 return manage(res);
10059}
10060
10066
10068{
10069 return this->set_constant_val(isl::val(ctx(), v));
10070}
10071
10072// implementations for isl::fixed_box
10074 return fixed_box(ptr);
10075}
10076fixed_box manage_copy(__isl_keep isl_fixed_box *ptr) {
10077 ptr = isl_fixed_box_copy(ptr);
10078 return fixed_box(ptr);
10079}
10080
10082 : ptr(nullptr) {}
10083
10085 : ptr(nullptr)
10086{
10087 ptr = obj.copy();
10088}
10089
10091 : ptr(ptr) {}
10092
10094 std::swap(this->ptr, obj.ptr);
10095 return *this;
10096}
10097
10099 if (ptr)
10101}
10102
10104 return isl_fixed_box_copy(ptr);
10105}
10106
10108 return ptr;
10109}
10110
10112 isl_fixed_box *tmp = ptr;
10113 ptr = nullptr;
10114 return tmp;
10115}
10116
10117bool fixed_box::is_null() const {
10118 return ptr == nullptr;
10119}
10120
10121isl::ctx fixed_box::ctx() const {
10122 return isl::ctx(isl_fixed_box_get_ctx(ptr));
10123}
10124
10125boolean fixed_box::is_valid() const
10126{
10127 auto res = isl_fixed_box_is_valid(get());
10128 return manage(res);
10129}
10130
10131isl::multi_aff fixed_box::offset() const
10132{
10134 return manage(res);
10135}
10136
10137isl::multi_aff fixed_box::get_offset() const
10138{
10139 return offset();
10140}
10141
10142isl::multi_val fixed_box::size() const
10143{
10144 auto res = isl_fixed_box_get_size(get());
10145 return manage(res);
10146}
10147
10148isl::multi_val fixed_box::get_size() const
10149{
10150 return size();
10151}
10152
10153isl::space fixed_box::space() const
10154{
10156 return manage(res);
10157}
10158
10159isl::space fixed_box::get_space() const
10160{
10161 return space();
10162}
10163
10164inline std::ostream &operator<<(std::ostream &os, const fixed_box &obj)
10165{
10166 char *str = isl_fixed_box_to_str(obj.get());
10167 if (!str) {
10168 os.setstate(std::ios_base::badbit);
10169 return os;
10170 }
10171 os << str;
10172 free(str);
10173 return os;
10174}
10175
10176// implementations for isl::id
10177id manage(__isl_take isl_id *ptr) {
10178 return id(ptr);
10179}
10180id manage_copy(__isl_keep isl_id *ptr) {
10181 ptr = isl_id_copy(ptr);
10182 return id(ptr);
10183}
10184
10185id::id()
10186 : ptr(nullptr) {}
10187
10188id::id(const id &obj)
10189 : ptr(nullptr)
10190{
10191 ptr = obj.copy();
10192}
10193
10195 : ptr(ptr) {}
10196
10197id::id(isl::ctx ctx, const std::string &str)
10198{
10199 auto res = isl_id_read_from_str(ctx.release(), str.c_str());
10200 ptr = res;
10201}
10202
10203id &id::operator=(id obj) {
10204 std::swap(this->ptr, obj.ptr);
10205 return *this;
10206}
10207
10208id::~id() {
10209 if (ptr)
10211}
10212
10213__isl_give isl_id *id::copy() const & {
10214 return isl_id_copy(ptr);
10215}
10216
10217__isl_keep isl_id *id::get() const {
10218 return ptr;
10219}
10220
10222 isl_id *tmp = ptr;
10223 ptr = nullptr;
10224 return tmp;
10225}
10226
10227bool id::is_null() const {
10228 return ptr == nullptr;
10229}
10230
10231isl::ctx id::ctx() const {
10232 return isl::ctx(isl_id_get_ctx(ptr));
10233}
10234
10235isl::id id::alloc(isl::ctx ctx, const std::string &name, void * user)
10236{
10237 auto res = isl_id_alloc(ctx.release(), name.c_str(), user);
10238 return manage(res);
10239}
10240
10241std::string id::name() const
10242{
10243 auto res = isl_id_get_name(get());
10244 std::string tmp(res);
10245 return tmp;
10246}
10247
10248std::string id::get_name() const
10249{
10250 return name();
10251}
10252
10253isl::id_list id::to_list() const
10254{
10255 auto res = isl_id_to_list(copy());
10256 return manage(res);
10257}
10258
10259void * id::user() const
10260{
10261 auto res = isl_id_get_user(get());
10262 return res;
10263}
10264
10265void * id::get_user() const
10266{
10267 return user();
10268}
10269
10270inline std::ostream &operator<<(std::ostream &os, const id &obj)
10271{
10272 char *str = isl_id_to_str(obj.get());
10273 if (!str) {
10274 os.setstate(std::ios_base::badbit);
10275 return os;
10276 }
10277 os << str;
10278 free(str);
10279 return os;
10280}
10281
10282// implementations for isl::id_list
10283id_list manage(__isl_take isl_id_list *ptr) {
10284 return id_list(ptr);
10285}
10286id_list manage_copy(__isl_keep isl_id_list *ptr) {
10287 ptr = isl_id_list_copy(ptr);
10288 return id_list(ptr);
10289}
10290
10292 : ptr(nullptr) {}
10293
10295 : ptr(nullptr)
10296{
10297 ptr = obj.copy();
10298}
10299
10300id_list::id_list(__isl_take isl_id_list *ptr)
10301 : ptr(ptr) {}
10302
10303id_list::id_list(isl::ctx ctx, int n)
10304{
10305 auto res = isl_id_list_alloc(ctx.release(), n);
10306 ptr = res;
10307}
10308
10309id_list::id_list(isl::id el)
10310{
10311 auto res = isl_id_list_from_id(el.release());
10312 ptr = res;
10313}
10314
10315id_list::id_list(isl::ctx ctx, const std::string &str)
10316{
10317 auto res = isl_id_list_read_from_str(ctx.release(), str.c_str());
10318 ptr = res;
10319}
10320
10322 std::swap(this->ptr, obj.ptr);
10323 return *this;
10324}
10325
10327 if (ptr)
10328 isl_id_list_free(ptr);
10329}
10330
10331__isl_give isl_id_list *id_list::copy() const & {
10332 return isl_id_list_copy(ptr);
10333}
10334
10335__isl_keep isl_id_list *id_list::get() const {
10336 return ptr;
10337}
10338
10339__isl_give isl_id_list *id_list::release() {
10340 isl_id_list *tmp = ptr;
10341 ptr = nullptr;
10342 return tmp;
10343}
10344
10345bool id_list::is_null() const {
10346 return ptr == nullptr;
10347}
10348
10349isl::ctx id_list::ctx() const {
10350 return isl::ctx(isl_id_list_get_ctx(ptr));
10351}
10352
10353isl::id_list id_list::add(isl::id el) const
10354{
10355 auto res = isl_id_list_add(copy(), el.release());
10356 return manage(res);
10357}
10358
10359isl::id_list id_list::add(const std::string &el) const
10360{
10361 return this->add(isl::id(ctx(), el));
10362}
10363
10364isl::id id_list::at(int index) const
10365{
10366 auto res = isl_id_list_get_at(get(), index);
10367 return manage(res);
10368}
10369
10370isl::id id_list::get_at(int index) const
10371{
10372 return at(index);
10373}
10374
10375isl::id_list id_list::clear() const
10376{
10377 auto res = isl_id_list_clear(copy());
10378 return manage(res);
10379}
10380
10381isl::id_list id_list::concat(isl::id_list list2) const
10382{
10383 auto res = isl_id_list_concat(copy(), list2.release());
10384 return manage(res);
10385}
10386
10387isl::id_list id_list::drop(unsigned int first, unsigned int n) const
10388{
10389 auto res = isl_id_list_drop(copy(), first, n);
10390 return manage(res);
10391}
10392
10393stat id_list::foreach(const std::function<stat(isl::id)> &fn) const
10394{
10395 struct fn_data {
10396 std::function<stat(isl::id)> func;
10397 } fn_data = { fn };
10398 auto fn_lambda = [](isl_id *arg_0, void *arg_1) -> isl_stat {
10399 auto *data = static_cast<struct fn_data *>(arg_1);
10400 auto ret = (data->func)(manage(arg_0));
10401 return ret.release();
10402 };
10403 auto res = isl_id_list_foreach(get(), fn_lambda, &fn_data);
10404 return manage(res);
10405}
10406
10407isl::id_list id_list::insert(unsigned int pos, isl::id el) const
10408{
10409 auto res = isl_id_list_insert(copy(), pos, el.release());
10410 return manage(res);
10411}
10412
10413isl::id_list id_list::insert(unsigned int pos, const std::string &el) const
10414{
10415 return this->insert(pos, isl::id(ctx(), el));
10416}
10417
10418class size id_list::size() const
10419{
10420 auto res = isl_id_list_size(get());
10421 return manage(res);
10422}
10423
10424inline std::ostream &operator<<(std::ostream &os, const id_list &obj)
10425{
10426 char *str = isl_id_list_to_str(obj.get());
10427 if (!str) {
10428 os.setstate(std::ios_base::badbit);
10429 return os;
10430 }
10431 os << str;
10432 free(str);
10433 return os;
10434}
10435
10436// implementations for isl::id_to_ast_expr
10437id_to_ast_expr manage(__isl_take isl_id_to_ast_expr *ptr) {
10438 return id_to_ast_expr(ptr);
10439}
10440id_to_ast_expr manage_copy(__isl_keep isl_id_to_ast_expr *ptr) {
10441 ptr = isl_id_to_ast_expr_copy(ptr);
10442 return id_to_ast_expr(ptr);
10443}
10444
10446 : ptr(nullptr) {}
10447
10449 : ptr(nullptr)
10450{
10451 ptr = obj.copy();
10452}
10453
10454id_to_ast_expr::id_to_ast_expr(__isl_take isl_id_to_ast_expr *ptr)
10455 : ptr(ptr) {}
10456
10458 std::swap(this->ptr, obj.ptr);
10459 return *this;
10460}
10461
10463 if (ptr)
10464 isl_id_to_ast_expr_free(ptr);
10465}
10466
10467__isl_give isl_id_to_ast_expr *id_to_ast_expr::copy() const & {
10468 return isl_id_to_ast_expr_copy(ptr);
10469}
10470
10471__isl_keep isl_id_to_ast_expr *id_to_ast_expr::get() const {
10472 return ptr;
10473}
10474
10475__isl_give isl_id_to_ast_expr *id_to_ast_expr::release() {
10476 isl_id_to_ast_expr *tmp = ptr;
10477 ptr = nullptr;
10478 return tmp;
10479}
10480
10481bool id_to_ast_expr::is_null() const {
10482 return ptr == nullptr;
10483}
10484
10485isl::ctx id_to_ast_expr::ctx() const {
10486 return isl::ctx(isl_id_to_ast_expr_get_ctx(ptr));
10487}
10488
10490{
10491 auto res = isl_id_to_ast_expr_alloc(ctx.release(), min_size);
10492 return manage(res);
10493}
10494
10496{
10497 auto res = isl_id_to_ast_expr_set(copy(), key.release(), val.release());
10498 return manage(res);
10499}
10500
10501isl::id_to_ast_expr id_to_ast_expr::set(const std::string &key, const isl::ast_expr &val) const
10502{
10503 return this->set(isl::id(ctx(), key), val);
10504}
10505
10506// implementations for isl::local_space
10514
10516 : ptr(nullptr) {}
10517
10519 : ptr(nullptr)
10520{
10521 ptr = obj.copy();
10522}
10523
10526
10532
10534 std::swap(this->ptr, obj.ptr);
10535 return *this;
10536}
10537
10542
10546
10548 return ptr;
10549}
10550
10552 isl_local_space *tmp = ptr;
10553 ptr = nullptr;
10554 return tmp;
10555}
10556
10558 return ptr == nullptr;
10559}
10560
10564
10565// implementations for isl::map
10567 return map(ptr);
10568}
10570 ptr = isl_map_copy(ptr);
10571 return map(ptr);
10572}
10573
10574map::map()
10575 : ptr(nullptr) {}
10576
10577map::map(const map &obj)
10578 : ptr(nullptr)
10579{
10580 ptr = obj.copy();
10581}
10582
10584 : ptr(ptr) {}
10585
10586map::map(isl::basic_map bmap)
10587{
10588 auto res = isl_map_from_basic_map(bmap.release());
10589 ptr = res;
10590}
10591
10592map::map(isl::ctx ctx, const std::string &str)
10593{
10594 auto res = isl_map_read_from_str(ctx.release(), str.c_str());
10595 ptr = res;
10596}
10597
10599 std::swap(this->ptr, obj.ptr);
10600 return *this;
10601}
10602
10603map::~map() {
10604 if (ptr)
10606}
10607
10608__isl_give isl_map *map::copy() const & {
10609 return isl_map_copy(ptr);
10610}
10611
10612__isl_keep isl_map *map::get() const {
10613 return ptr;
10614}
10615
10617 isl_map *tmp = ptr;
10618 ptr = nullptr;
10619 return tmp;
10620}
10621
10622bool map::is_null() const {
10623 return ptr == nullptr;
10624}
10625
10626isl::ctx map::ctx() const {
10627 return isl::ctx(isl_map_get_ctx(ptr));
10628}
10629
10635
10637{
10638 auto res = isl_map_add_dims(copy(), static_cast<enum isl_dim_type>(type), n);
10639 return manage(res);
10640}
10641
10643{
10644 auto res = isl_map_affine_hull(copy());
10645 return manage(res);
10646}
10647
10649{
10650 auto res = isl_map_align_params(copy(), model.release());
10651 return manage(res);
10652}
10653
10655{
10656 auto res = isl_map_apply_domain(copy(), map2.release());
10657 return manage(res);
10658}
10659
10661{
10662 return isl::union_map(*this).apply_domain(umap2);
10663}
10664
10665isl::map map::apply_domain(const isl::basic_map &map2) const
10666{
10667 return this->apply_domain(isl::map(map2));
10668}
10669
10670isl::map map::apply_range(isl::map map2) const
10671{
10672 auto res = isl_map_apply_range(copy(), map2.release());
10673 return manage(res);
10674}
10675
10676isl::union_map map::apply_range(const isl::union_map &umap2) const
10677{
10678 return isl::union_map(*this).apply_range(umap2);
10679}
10680
10681isl::map map::apply_range(const isl::basic_map &map2) const
10682{
10683 return this->apply_range(isl::map(map2));
10684}
10685
10686isl::map map::as_map() const
10687{
10688 return isl::union_map(*this).as_map();
10689}
10690
10691isl::multi_union_pw_aff map::as_multi_union_pw_aff() const
10692{
10693 return isl::union_map(*this).as_multi_union_pw_aff();
10694}
10695
10696isl::pw_multi_aff map::as_pw_multi_aff() const
10697{
10699 return manage(res);
10700}
10701
10702isl::union_pw_multi_aff map::as_union_pw_multi_aff() const
10703{
10704 return isl::union_map(*this).as_union_pw_multi_aff();
10705}
10706
10708{
10710 return manage(res);
10711}
10712
10714{
10715 return basic_map_list();
10716}
10717
10719{
10720 auto res = isl_map_bind_domain(copy(), tuple.release());
10721 return manage(res);
10722}
10723
10725{
10726 auto res = isl_map_bind_range(copy(), tuple.release());
10727 return manage(res);
10728}
10729
10730boolean map::can_curry() const
10731{
10732 auto res = isl_map_can_curry(get());
10733 return manage(res);
10734}
10735
10736isl::map map::coalesce() const
10737{
10738 auto res = isl_map_coalesce(copy());
10739 return manage(res);
10740}
10741
10743{
10744 auto res = isl_map_complement(copy());
10745 return manage(res);
10746}
10747
10748isl::union_map map::compute_divs() const
10749{
10750 return isl::union_map(*this).compute_divs();
10751}
10752
10753isl::map map::curry() const
10754{
10755 auto res = isl_map_curry(copy());
10756 return manage(res);
10757}
10758
10759isl::set map::deltas() const
10760{
10761 auto res = isl_map_deltas(copy());
10762 return manage(res);
10763}
10764
10765isl::map map::detect_equalities() const
10766{
10768 return manage(res);
10769}
10770
10772{
10773 auto res = isl_map_dim(get(), static_cast<enum isl_dim_type>(type));
10774 return manage(res);
10775}
10776
10778{
10779 auto res = isl_map_dim_max(copy(), pos);
10780 return manage(res);
10781}
10782
10784{
10785 auto res = isl_map_dim_min(copy(), pos);
10786 return manage(res);
10787}
10788
10789isl::set map::domain() const
10790{
10791 auto res = isl_map_domain(copy());
10792 return manage(res);
10793}
10794
10796{
10798 return manage(res);
10799}
10800
10801isl::map map::domain_factor_range() const
10802{
10804 return manage(res);
10805}
10806
10807isl::map map::domain_map() const
10808{
10809 auto res = isl_map_domain_map(copy());
10810 return manage(res);
10811}
10812
10813isl::union_pw_multi_aff map::domain_map_union_pw_multi_aff() const
10814{
10815 return isl::union_map(*this).domain_map_union_pw_multi_aff();
10816}
10817
10818isl::map map::domain_product(isl::map map2) const
10819{
10820 auto res = isl_map_domain_product(copy(), map2.release());
10821 return manage(res);
10822}
10823
10824isl::union_map map::domain_product(const isl::union_map &umap2) const
10825{
10826 return isl::union_map(*this).domain_product(umap2);
10827}
10828
10829isl::map map::domain_product(const isl::basic_map &map2) const
10830{
10831 return this->domain_product(isl::map(map2));
10832}
10833
10834class size map::domain_tuple_dim() const
10835{
10837 return manage(res);
10838}
10839
10840isl::id map::domain_tuple_id() const
10841{
10843 return manage(res);
10844}
10845
10846isl::id map::get_domain_tuple_id() const
10847{
10848 return domain_tuple_id();
10849}
10850
10851isl::map map::empty(isl::space space)
10852{
10853 auto res = isl_map_empty(space.release());
10854 return manage(res);
10855}
10856
10857isl::map map::eq_at(isl::multi_pw_aff mpa) const
10858{
10859 auto res = isl_map_eq_at_multi_pw_aff(copy(), mpa.release());
10860 return manage(res);
10861}
10862
10863isl::union_map map::eq_at(const isl::multi_union_pw_aff &mupa) const
10864{
10865 return isl::union_map(*this).eq_at(mupa);
10866}
10867
10868isl::map map::eq_at(const isl::aff &mpa) const
10869{
10870 return this->eq_at(isl::multi_pw_aff(mpa));
10871}
10872
10873isl::map map::eq_at(const isl::multi_aff &mpa) const
10874{
10875 return this->eq_at(isl::multi_pw_aff(mpa));
10876}
10877
10878isl::map map::eq_at(const isl::pw_aff &mpa) const
10879{
10880 return this->eq_at(isl::multi_pw_aff(mpa));
10881}
10882
10883isl::map map::eq_at(const isl::pw_multi_aff &mpa) const
10884{
10885 return this->eq_at(isl::multi_pw_aff(mpa));
10886}
10887
10888isl::map map::equate(isl::dim type1, int pos1, isl::dim type2, int pos2) const
10889{
10890 auto res = isl_map_equate(copy(), static_cast<enum isl_dim_type>(type1), pos1, static_cast<enum isl_dim_type>(type2), pos2);
10891 return manage(res);
10892}
10893
10894boolean map::every_map(const std::function<boolean(isl::map)> &test) const
10895{
10896 return isl::union_map(*this).every_map(test);
10897}
10898
10900{
10901 return isl::union_map(*this).extract_map(space);
10902}
10903
10905{
10906 auto res = isl_map_factor_domain(copy());
10907 return manage(res);
10908}
10909
10910isl::map map::factor_range() const
10911{
10912 auto res = isl_map_factor_range(copy());
10913 return manage(res);
10914}
10915
10916isl::map map::fix_si(isl::dim type, unsigned int pos, int value) const
10917{
10918 auto res = isl_map_fix_si(copy(), static_cast<enum isl_dim_type>(type), pos, value);
10919 return manage(res);
10920}
10921
10923{
10924 return isl::union_map(*this).fixed_power(exp);
10925}
10926
10927isl::union_map map::fixed_power(long exp) const
10928{
10929 return this->fixed_power(isl::val(ctx(), exp));
10930}
10931
10933{
10934 auto res = isl_map_flat_range_product(copy(), map2.release());
10935 return manage(res);
10936}
10937
10939{
10940 return isl::union_map(*this).flat_range_product(umap2);
10941}
10942
10944{
10945 return this->flat_range_product(isl::map(map2));
10946}
10947
10948isl::map map::flatten() const
10949{
10950 auto res = isl_map_flatten(copy());
10951 return manage(res);
10952}
10953
10955{
10957 return manage(res);
10958}
10959
10960isl::map map::flatten_range() const
10961{
10962 auto res = isl_map_flatten_range(copy());
10963 return manage(res);
10964}
10965
10967{
10968 auto res = isl_map_floordiv_val(copy(), d.release());
10969 return manage(res);
10970}
10971
10973{
10974 return this->floordiv_val(isl::val(ctx(), d));
10975}
10976
10977stat map::foreach_basic_map(const std::function<stat(isl::basic_map)> &fn) const
10978{
10979 struct fn_data {
10980 std::function<stat(isl::basic_map)> func;
10981 } fn_data = { fn };
10982 auto fn_lambda = [](isl_basic_map *arg_0, void *arg_1) -> isl_stat {
10983 auto *data = static_cast<struct fn_data *>(arg_1);
10984 auto ret = (data->func)(manage(arg_0));
10985 return ret.release();
10986 };
10987 auto res = isl_map_foreach_basic_map(get(), fn_lambda, &fn_data);
10988 return manage(res);
10989}
10990
10991stat map::foreach_map(const std::function<stat(isl::map)> &fn) const
10992{
10993 return isl::union_map(*this).foreach_map(fn);
10994}
10995
10997{
10998 auto res = isl_map_from_aff(aff.release());
10999 return manage(res);
11000}
11001
11003{
11005 return manage(res);
11006}
11007
11009{
11010 auto res = isl_map_from_domain_and_range(domain.release(), range.release());
11011 return manage(res);
11012}
11013
11015{
11016 auto res = isl_map_from_multi_aff(maff.release());
11017 return manage(res);
11018}
11019
11021{
11022 auto res = isl_map_from_pw_aff(pwaff.release());
11023 return manage(res);
11024}
11025
11027{
11029 return manage(res);
11030}
11031
11033{
11034 auto res = isl_map_from_union_map(umap.release());
11035 return manage(res);
11036}
11037
11039{
11040 auto res = isl_map_gist(copy(), context.release());
11041 return manage(res);
11042}
11043
11045{
11046 return isl::union_map(*this).gist(context);
11047}
11048
11049isl::map map::gist(const isl::basic_map &context) const
11050{
11051 return this->gist(isl::map(context));
11052}
11053
11054isl::map map::gist_domain(isl::set context) const
11055{
11056 auto res = isl_map_gist_domain(copy(), context.release());
11057 return manage(res);
11058}
11059
11060isl::union_map map::gist_domain(const isl::union_set &uset) const
11061{
11062 return isl::union_map(*this).gist_domain(uset);
11063}
11064
11065isl::map map::gist_domain(const isl::basic_set &context) const
11066{
11067 return this->gist_domain(isl::set(context));
11068}
11069
11070isl::map map::gist_domain(const isl::point &context) const
11071{
11072 return this->gist_domain(isl::set(context));
11073}
11074
11075isl::map map::gist_params(isl::set context) const
11076{
11077 auto res = isl_map_gist_params(copy(), context.release());
11078 return manage(res);
11079}
11080
11081isl::union_map map::gist_range(const isl::union_set &uset) const
11082{
11083 return isl::union_map(*this).gist_range(uset);
11084}
11085
11086boolean map::has_domain_tuple_id() const
11087{
11089 return manage(res);
11090}
11091
11093{
11094 auto res = isl_map_has_equal_space(get(), map2.get());
11095 return manage(res);
11096}
11097
11098boolean map::has_range_tuple_id() const
11099{
11101 return manage(res);
11102}
11103
11105{
11106 auto res = isl_map_has_tuple_id(get(), static_cast<enum isl_dim_type>(type));
11107 return manage(res);
11108}
11109
11111{
11112 auto res = isl_map_has_tuple_name(get(), static_cast<enum isl_dim_type>(type));
11113 return manage(res);
11114}
11115
11117{
11118 auto res = isl_map_identity(space.release());
11119 return manage(res);
11120}
11121
11123{
11124 auto res = isl_map_intersect(copy(), map2.release());
11125 return manage(res);
11126}
11127
11129{
11130 return isl::union_map(*this).intersect(umap2);
11131}
11132
11133isl::map map::intersect(const isl::basic_map &map2) const
11134{
11135 return this->intersect(isl::map(map2));
11136}
11137
11138isl::map map::intersect_domain(isl::set set) const
11139{
11140 auto res = isl_map_intersect_domain(copy(), set.release());
11141 return manage(res);
11142}
11143
11144isl::union_map map::intersect_domain(const isl::space &space) const
11145{
11146 return isl::union_map(*this).intersect_domain(space);
11147}
11148
11149isl::union_map map::intersect_domain(const isl::union_set &uset) const
11150{
11151 return isl::union_map(*this).intersect_domain(uset);
11152}
11153
11154isl::map map::intersect_domain(const isl::basic_set &set) const
11155{
11156 return this->intersect_domain(isl::set(set));
11157}
11158
11159isl::map map::intersect_domain(const isl::point &set) const
11160{
11161 return this->intersect_domain(isl::set(set));
11162}
11163
11164isl::map map::intersect_domain_factor_domain(isl::map factor) const
11165{
11167 return manage(res);
11168}
11169
11170isl::union_map map::intersect_domain_factor_domain(const isl::union_map &factor) const
11171{
11172 return isl::union_map(*this).intersect_domain_factor_domain(factor);
11173}
11174
11175isl::map map::intersect_domain_factor_domain(const isl::basic_map &factor) const
11176{
11177 return this->intersect_domain_factor_domain(isl::map(factor));
11178}
11179
11180isl::map map::intersect_domain_factor_range(isl::map factor) const
11181{
11183 return manage(res);
11184}
11185
11186isl::union_map map::intersect_domain_factor_range(const isl::union_map &factor) const
11187{
11188 return isl::union_map(*this).intersect_domain_factor_range(factor);
11189}
11190
11191isl::map map::intersect_domain_factor_range(const isl::basic_map &factor) const
11192{
11193 return this->intersect_domain_factor_range(isl::map(factor));
11194}
11195
11197{
11198 auto res = isl_map_intersect_params(copy(), params.release());
11199 return manage(res);
11200}
11201
11202isl::map map::intersect_range(isl::set set) const
11203{
11204 auto res = isl_map_intersect_range(copy(), set.release());
11205 return manage(res);
11206}
11207
11208isl::union_map map::intersect_range(const isl::space &space) const
11209{
11210 return isl::union_map(*this).intersect_range(space);
11211}
11212
11213isl::union_map map::intersect_range(const isl::union_set &uset) const
11214{
11215 return isl::union_map(*this).intersect_range(uset);
11216}
11217
11218isl::map map::intersect_range(const isl::basic_set &set) const
11219{
11220 return this->intersect_range(isl::set(set));
11221}
11222
11223isl::map map::intersect_range(const isl::point &set) const
11224{
11225 return this->intersect_range(isl::set(set));
11226}
11227
11228isl::map map::intersect_range_factor_domain(isl::map factor) const
11229{
11231 return manage(res);
11232}
11233
11234isl::union_map map::intersect_range_factor_domain(const isl::union_map &factor) const
11235{
11236 return isl::union_map(*this).intersect_range_factor_domain(factor);
11237}
11238
11239isl::map map::intersect_range_factor_domain(const isl::basic_map &factor) const
11240{
11241 return this->intersect_range_factor_domain(isl::map(factor));
11242}
11243
11244isl::map map::intersect_range_factor_range(isl::map factor) const
11245{
11247 return manage(res);
11248}
11249
11250isl::union_map map::intersect_range_factor_range(const isl::union_map &factor) const
11251{
11252 return isl::union_map(*this).intersect_range_factor_range(factor);
11253}
11254
11255isl::map map::intersect_range_factor_range(const isl::basic_map &factor) const
11256{
11257 return this->intersect_range_factor_range(isl::map(factor));
11258}
11259
11260boolean map::involves_dims(isl::dim type, unsigned int first, unsigned int n) const
11261{
11262 auto res = isl_map_involves_dims(get(), static_cast<enum isl_dim_type>(type), first, n);
11263 return manage(res);
11264}
11265
11266boolean map::is_bijective() const
11267{
11268 auto res = isl_map_is_bijective(get());
11269 return manage(res);
11270}
11271
11272boolean map::is_disjoint(const isl::map &map2) const
11273{
11274 auto res = isl_map_is_disjoint(get(), map2.get());
11275 return manage(res);
11276}
11277
11278boolean map::is_disjoint(const isl::union_map &umap2) const
11279{
11280 return isl::union_map(*this).is_disjoint(umap2);
11281}
11282
11283boolean map::is_disjoint(const isl::basic_map &map2) const
11284{
11285 return this->is_disjoint(isl::map(map2));
11286}
11287
11288boolean map::is_empty() const
11289{
11290 auto res = isl_map_is_empty(get());
11291 return manage(res);
11292}
11293
11294boolean map::is_equal(const isl::map &map2) const
11295{
11296 auto res = isl_map_is_equal(get(), map2.get());
11297 return manage(res);
11298}
11299
11300boolean map::is_equal(const isl::union_map &umap2) const
11301{
11302 return isl::union_map(*this).is_equal(umap2);
11303}
11304
11305boolean map::is_equal(const isl::basic_map &map2) const
11306{
11307 return this->is_equal(isl::map(map2));
11308}
11309
11310boolean map::is_injective() const
11311{
11312 auto res = isl_map_is_injective(get());
11313 return manage(res);
11314}
11315
11316boolean map::is_single_valued() const
11317{
11319 return manage(res);
11320}
11321
11322boolean map::is_strict_subset(const isl::map &map2) const
11323{
11324 auto res = isl_map_is_strict_subset(get(), map2.get());
11325 return manage(res);
11326}
11327
11328boolean map::is_strict_subset(const isl::union_map &umap2) const
11329{
11330 return isl::union_map(*this).is_strict_subset(umap2);
11331}
11332
11333boolean map::is_strict_subset(const isl::basic_map &map2) const
11334{
11335 return this->is_strict_subset(isl::map(map2));
11336}
11337
11338boolean map::is_subset(const isl::map &map2) const
11339{
11340 auto res = isl_map_is_subset(get(), map2.get());
11341 return manage(res);
11342}
11343
11344boolean map::is_subset(const isl::union_map &umap2) const
11345{
11346 return isl::union_map(*this).is_subset(umap2);
11347}
11348
11349boolean map::is_subset(const isl::basic_map &map2) const
11350{
11351 return this->is_subset(isl::map(map2));
11352}
11353
11354boolean map::isa_map() const
11355{
11356 return isl::union_map(*this).isa_map();
11357}
11358
11360{
11361 auto res = isl_map_lex_ge(set_space.release());
11362 return manage(res);
11363}
11364
11366{
11368 return manage(res);
11369}
11370
11372{
11373 auto res = isl_map_lex_gt(set_space.release());
11374 return manage(res);
11375}
11376
11378{
11380 return manage(res);
11381}
11382
11384{
11385 auto res = isl_map_lex_le(set_space.release());
11386 return manage(res);
11387}
11388
11390{
11392 return manage(res);
11393}
11394
11396{
11397 auto res = isl_map_lex_lt(set_space.release());
11398 return manage(res);
11399}
11400
11402{
11404 return manage(res);
11405}
11406
11407isl::map map::lexmax() const
11408{
11409 auto res = isl_map_lexmax(copy());
11410 return manage(res);
11411}
11412
11413isl::pw_multi_aff map::lexmax_pw_multi_aff() const
11414{
11416 return manage(res);
11417}
11418
11419isl::map map::lexmin() const
11420{
11421 auto res = isl_map_lexmin(copy());
11422 return manage(res);
11423}
11424
11425isl::pw_multi_aff map::lexmin_pw_multi_aff() const
11426{
11428 return manage(res);
11429}
11430
11431isl::map map::lower_bound(isl::multi_pw_aff lower) const
11432{
11434 return manage(res);
11435}
11436
11437isl::map map::lower_bound_si(isl::dim type, unsigned int pos, int value) const
11438{
11439 auto res = isl_map_lower_bound_si(copy(), static_cast<enum isl_dim_type>(type), pos, value);
11440 return manage(res);
11441}
11442
11444{
11445 return isl::union_map(*this).map_list();
11446}
11447
11449{
11451 return manage(res);
11452}
11453
11454isl::multi_pw_aff map::min_multi_pw_aff() const
11455{
11457 return manage(res);
11458}
11459
11460isl::map map::move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const
11461{
11462 auto res = isl_map_move_dims(copy(), static_cast<enum isl_dim_type>(dst_type), dst_pos, static_cast<enum isl_dim_type>(src_type), src_pos, n);
11463 return manage(res);
11464}
11465
11466class size map::n_basic_map() const
11467{
11468 auto res = isl_map_n_basic_map(get());
11469 return manage(res);
11470}
11471
11472isl::map map::order_lt(isl::dim type1, int pos1, isl::dim type2, int pos2) const
11473{
11474 auto res = isl_map_order_lt(copy(), static_cast<enum isl_dim_type>(type1), pos1, static_cast<enum isl_dim_type>(type2), pos2);
11475 return manage(res);
11476}
11477
11478isl::set map::params() const
11479{
11480 return isl::union_map(*this).params();
11481}
11482
11484{
11486 return manage(res);
11487}
11488
11489isl::map map::preimage_domain(isl::multi_aff ma) const
11490{
11491 auto res = isl_map_preimage_domain_multi_aff(copy(), ma.release());
11492 return manage(res);
11493}
11494
11495isl::map map::preimage_domain(isl::multi_pw_aff mpa) const
11496{
11498 return manage(res);
11499}
11500
11501isl::map map::preimage_domain(isl::pw_multi_aff pma) const
11502{
11503 auto res = isl_map_preimage_domain_pw_multi_aff(copy(), pma.release());
11504 return manage(res);
11505}
11506
11507isl::union_map map::preimage_domain(const isl::union_pw_multi_aff &upma) const
11508{
11509 return isl::union_map(*this).preimage_domain(upma);
11510}
11511
11512isl::map map::preimage_range(isl::multi_aff ma) const
11513{
11514 auto res = isl_map_preimage_range_multi_aff(copy(), ma.release());
11515 return manage(res);
11516}
11517
11518isl::map map::preimage_range(isl::pw_multi_aff pma) const
11519{
11520 auto res = isl_map_preimage_range_pw_multi_aff(copy(), pma.release());
11521 return manage(res);
11522}
11523
11524isl::union_map map::preimage_range(const isl::union_pw_multi_aff &upma) const
11525{
11526 return isl::union_map(*this).preimage_range(upma);
11527}
11528
11529isl::map map::product(isl::map map2) const
11530{
11531 auto res = isl_map_product(copy(), map2.release());
11532 return manage(res);
11533}
11534
11535isl::union_map map::product(const isl::union_map &umap2) const
11536{
11537 return isl::union_map(*this).product(umap2);
11538}
11539
11540isl::map map::product(const isl::basic_map &map2) const
11541{
11542 return this->product(isl::map(map2));
11543}
11544
11545isl::map map::project_out(isl::dim type, unsigned int first, unsigned int n) const
11546{
11547 auto res = isl_map_project_out(copy(), static_cast<enum isl_dim_type>(type), first, n);
11548 return manage(res);
11549}
11550
11552{
11554 return manage(res);
11555}
11556
11557isl::set map::range() const
11558{
11559 auto res = isl_map_range(copy());
11560 return manage(res);
11561}
11562
11563isl::map map::range_factor_domain() const
11564{
11566 return manage(res);
11567}
11568
11569isl::map map::range_factor_range() const
11570{
11572 return manage(res);
11573}
11574
11575isl::fixed_box map::range_lattice_tile() const
11576{
11578 return manage(res);
11579}
11580
11581isl::fixed_box map::get_range_lattice_tile() const
11582{
11583 return range_lattice_tile();
11584}
11585
11586isl::map map::range_map() const
11587{
11588 auto res = isl_map_range_map(copy());
11589 return manage(res);
11590}
11591
11592isl::map map::range_product(isl::map map2) const
11593{
11594 auto res = isl_map_range_product(copy(), map2.release());
11595 return manage(res);
11596}
11597
11598isl::union_map map::range_product(const isl::union_map &umap2) const
11599{
11600 return isl::union_map(*this).range_product(umap2);
11601}
11602
11603isl::map map::range_product(const isl::basic_map &map2) const
11604{
11605 return this->range_product(isl::map(map2));
11606}
11607
11608isl::map map::range_reverse() const
11609{
11610 auto res = isl_map_range_reverse(copy());
11611 return manage(res);
11612}
11613
11614isl::fixed_box map::range_simple_fixed_box_hull() const
11615{
11617 return manage(res);
11618}
11619
11620isl::fixed_box map::get_range_simple_fixed_box_hull() const
11621{
11623}
11624
11625class size map::range_tuple_dim() const
11626{
11628 return manage(res);
11629}
11630
11631isl::id map::range_tuple_id() const
11632{
11634 return manage(res);
11635}
11636
11637isl::id map::get_range_tuple_id() const
11638{
11639 return range_tuple_id();
11640}
11641
11642isl::map map::reverse() const
11643{
11644 auto res = isl_map_reverse(copy());
11645 return manage(res);
11646}
11647
11648isl::basic_map map::sample() const
11649{
11650 auto res = isl_map_sample(copy());
11651 return manage(res);
11652}
11653
11654isl::map map::set_domain_tuple(isl::id id) const
11655{
11657 return manage(res);
11658}
11659
11660isl::map map::set_domain_tuple(const std::string &id) const
11661{
11662 return this->set_domain_tuple(isl::id(ctx(), id));
11663}
11664
11665isl::map map::set_range_tuple(isl::id id) const
11666{
11668 return manage(res);
11669}
11670
11671isl::map map::set_range_tuple(const std::string &id) const
11672{
11673 return this->set_range_tuple(isl::id(ctx(), id));
11674}
11675
11677{
11678 auto res = isl_map_set_tuple_id(copy(), static_cast<enum isl_dim_type>(type), id.release());
11679 return manage(res);
11680}
11681
11682isl::map map::set_tuple_id(isl::dim type, const std::string &id) const
11683{
11684 return this->set_tuple_id(type, isl::id(ctx(), id));
11685}
11686
11687isl::space map::space() const
11688{
11689 auto res = isl_map_get_space(get());
11690 return manage(res);
11691}
11692
11694{
11695 return space();
11696}
11697
11698isl::map map::subtract(isl::map map2) const
11699{
11700 auto res = isl_map_subtract(copy(), map2.release());
11701 return manage(res);
11702}
11703
11704isl::union_map map::subtract(const isl::union_map &umap2) const
11705{
11706 return isl::union_map(*this).subtract(umap2);
11707}
11708
11709isl::map map::subtract(const isl::basic_map &map2) const
11710{
11711 return this->subtract(isl::map(map2));
11712}
11713
11714isl::union_map map::subtract_domain(const isl::union_set &dom) const
11715{
11716 return isl::union_map(*this).subtract_domain(dom);
11717}
11718
11719isl::union_map map::subtract_range(const isl::union_set &dom) const
11720{
11721 return isl::union_map(*this).subtract_range(dom);
11722}
11723
11725{
11726 auto res = isl_map_sum(copy(), map2.release());
11727 return manage(res);
11728}
11729
11731{
11732 auto res = isl_map_to_list(copy());
11733 return manage(res);
11734}
11735
11737{
11738 auto res = isl_map_to_union_map(copy());
11739 return manage(res);
11740}
11741
11743{
11744 auto res = isl_map_get_tuple_id(get(), static_cast<enum isl_dim_type>(type));
11745 return manage(res);
11746}
11747
11749{
11750 return tuple_id(type);
11751}
11752
11753isl::map map::uncurry() const
11754{
11755 auto res = isl_map_uncurry(copy());
11756 return manage(res);
11757}
11758
11760{
11761 auto res = isl_map_union(copy(), map2.release());
11762 return manage(res);
11763}
11764
11765isl::union_map map::unite(const isl::union_map &umap2) const
11766{
11767 return isl::union_map(*this).unite(umap2);
11768}
11769
11770isl::map map::unite(const isl::basic_map &map2) const
11771{
11772 return this->unite(isl::map(map2));
11773}
11774
11775isl::map map::universe(isl::space space)
11776{
11777 auto res = isl_map_universe(space.release());
11778 return manage(res);
11779}
11780
11781isl::basic_map map::unshifted_simple_hull() const
11782{
11784 return manage(res);
11785}
11786
11787isl::map map::upper_bound(isl::multi_pw_aff upper) const
11788{
11790 return manage(res);
11791}
11792
11793isl::map map::upper_bound_si(isl::dim type, unsigned int pos, int value) const
11794{
11795 auto res = isl_map_upper_bound_si(copy(), static_cast<enum isl_dim_type>(type), pos, value);
11796 return manage(res);
11797}
11798
11799isl::set map::wrap() const
11800{
11801 auto res = isl_map_wrap(copy());
11802 return manage(res);
11803}
11804
11805isl::map map::zip() const
11806{
11807 auto res = isl_map_zip(copy());
11808 return manage(res);
11809}
11810
11811inline std::ostream &operator<<(std::ostream &os, const map &obj)
11812{
11813 char *str = isl_map_to_str(obj.get());
11814 if (!str) {
11815 os.setstate(std::ios_base::badbit);
11816 return os;
11817 }
11818 os << str;
11819 free(str);
11820 return os;
11821}
11822
11823// implementations for isl::map_list
11824map_list manage(__isl_take isl_map_list *ptr) {
11825 return map_list(ptr);
11826}
11827map_list manage_copy(__isl_keep isl_map_list *ptr) {
11828 ptr = isl_map_list_copy(ptr);
11829 return map_list(ptr);
11830}
11831
11833 : ptr(nullptr) {}
11834
11836 : ptr(nullptr)
11837{
11838 ptr = obj.copy();
11839}
11840
11841map_list::map_list(__isl_take isl_map_list *ptr)
11842 : ptr(ptr) {}
11843
11844map_list::map_list(isl::ctx ctx, int n)
11845{
11846 auto res = isl_map_list_alloc(ctx.release(), n);
11847 ptr = res;
11848}
11849
11850map_list::map_list(isl::map el)
11851{
11852 auto res = isl_map_list_from_map(el.release());
11853 ptr = res;
11854}
11855
11856map_list::map_list(isl::ctx ctx, const std::string &str)
11857{
11858 auto res = isl_map_list_read_from_str(ctx.release(), str.c_str());
11859 ptr = res;
11860}
11861
11863 std::swap(this->ptr, obj.ptr);
11864 return *this;
11865}
11866
11868 if (ptr)
11869 isl_map_list_free(ptr);
11870}
11871
11872__isl_give isl_map_list *map_list::copy() const & {
11873 return isl_map_list_copy(ptr);
11874}
11875
11876__isl_keep isl_map_list *map_list::get() const {
11877 return ptr;
11878}
11879
11880__isl_give isl_map_list *map_list::release() {
11881 isl_map_list *tmp = ptr;
11882 ptr = nullptr;
11883 return tmp;
11884}
11885
11886bool map_list::is_null() const {
11887 return ptr == nullptr;
11888}
11889
11890isl::ctx map_list::ctx() const {
11891 return isl::ctx(isl_map_list_get_ctx(ptr));
11892}
11893
11894isl::map_list map_list::add(isl::map el) const
11895{
11896 auto res = isl_map_list_add(copy(), el.release());
11897 return manage(res);
11898}
11899
11900isl::map map_list::at(int index) const
11901{
11902 auto res = isl_map_list_get_at(get(), index);
11903 return manage(res);
11904}
11905
11906isl::map map_list::get_at(int index) const
11907{
11908 return at(index);
11909}
11910
11911isl::map_list map_list::clear() const
11912{
11913 auto res = isl_map_list_clear(copy());
11914 return manage(res);
11915}
11916
11917isl::map_list map_list::concat(isl::map_list list2) const
11918{
11919 auto res = isl_map_list_concat(copy(), list2.release());
11920 return manage(res);
11921}
11922
11923isl::map_list map_list::drop(unsigned int first, unsigned int n) const
11924{
11925 auto res = isl_map_list_drop(copy(), first, n);
11926 return manage(res);
11927}
11928
11929stat map_list::foreach(const std::function<stat(isl::map)> &fn) const
11930{
11931 struct fn_data {
11932 std::function<stat(isl::map)> func;
11933 } fn_data = { fn };
11934 auto fn_lambda = [](isl_map *arg_0, void *arg_1) -> isl_stat {
11935 auto *data = static_cast<struct fn_data *>(arg_1);
11936 auto ret = (data->func)(manage(arg_0));
11937 return ret.release();
11938 };
11939 auto res = isl_map_list_foreach(get(), fn_lambda, &fn_data);
11940 return manage(res);
11941}
11942
11943isl::map_list map_list::insert(unsigned int pos, isl::map el) const
11944{
11945 auto res = isl_map_list_insert(copy(), pos, el.release());
11946 return manage(res);
11947}
11948
11949class size map_list::size() const
11950{
11951 auto res = isl_map_list_size(get());
11952 return manage(res);
11953}
11954
11955inline std::ostream &operator<<(std::ostream &os, const map_list &obj)
11956{
11957 char *str = isl_map_list_to_str(obj.get());
11958 if (!str) {
11959 os.setstate(std::ios_base::badbit);
11960 return os;
11961 }
11962 os << str;
11963 free(str);
11964 return os;
11965}
11966
11967// implementations for isl::multi_aff
11969 return multi_aff(ptr);
11970}
11972 ptr = isl_multi_aff_copy(ptr);
11973 return multi_aff(ptr);
11974}
11975
11977 : ptr(nullptr) {}
11978
11980 : ptr(nullptr)
11981{
11982 ptr = obj.copy();
11983}
11984
11986 : ptr(ptr) {}
11987
11988multi_aff::multi_aff(isl::aff aff)
11989{
11990 auto res = isl_multi_aff_from_aff(aff.release());
11991 ptr = res;
11992}
11993
11994multi_aff::multi_aff(isl::space space, isl::aff_list list)
11995{
11996 auto res = isl_multi_aff_from_aff_list(space.release(), list.release());
11997 ptr = res;
11998}
11999
12000multi_aff::multi_aff(isl::ctx ctx, const std::string &str)
12001{
12002 auto res = isl_multi_aff_read_from_str(ctx.release(), str.c_str());
12003 ptr = res;
12004}
12005
12007 std::swap(this->ptr, obj.ptr);
12008 return *this;
12009}
12010
12012 if (ptr)
12013 isl_multi_aff_free(ptr);
12014}
12015
12017 return isl_multi_aff_copy(ptr);
12018}
12019
12021 return ptr;
12022}
12023
12025 isl_multi_aff *tmp = ptr;
12026 ptr = nullptr;
12027 return tmp;
12028}
12029
12030bool multi_aff::is_null() const {
12031 return ptr == nullptr;
12032}
12033
12034isl::ctx multi_aff::ctx() const {
12035 return isl::ctx(isl_multi_aff_get_ctx(ptr));
12036}
12037
12038isl::multi_aff multi_aff::add(isl::multi_aff multi2) const
12039{
12040 auto res = isl_multi_aff_add(copy(), multi2.release());
12041 return manage(res);
12042}
12043
12044isl::multi_pw_aff multi_aff::add(const isl::multi_pw_aff &multi2) const
12045{
12046 return isl::pw_multi_aff(*this).add(multi2);
12047}
12048
12049isl::multi_union_pw_aff multi_aff::add(const isl::multi_union_pw_aff &multi2) const
12050{
12051 return isl::pw_multi_aff(*this).add(multi2);
12052}
12053
12054isl::pw_multi_aff multi_aff::add(const isl::pw_multi_aff &pma2) const
12055{
12056 return isl::pw_multi_aff(*this).add(pma2);
12057}
12058
12059isl::union_pw_multi_aff multi_aff::add(const isl::union_pw_multi_aff &upma2) const
12060{
12061 return isl::pw_multi_aff(*this).add(upma2);
12062}
12063
12064isl::multi_aff multi_aff::add(const isl::aff &multi2) const
12065{
12066 return this->add(isl::multi_aff(multi2));
12067}
12068
12069isl::multi_aff multi_aff::add_constant(isl::multi_val mv) const
12070{
12071 auto res = isl_multi_aff_add_constant_multi_val(copy(), mv.release());
12072 return manage(res);
12073}
12074
12075isl::multi_aff multi_aff::add_constant(isl::val v) const
12076{
12077 auto res = isl_multi_aff_add_constant_val(copy(), v.release());
12078 return manage(res);
12079}
12080
12081isl::multi_aff multi_aff::add_constant(long v) const
12082{
12083 return this->add_constant(isl::val(ctx(), v));
12084}
12085
12087{
12088 return isl::pw_multi_aff(*this).add_pw_multi_aff(pma);
12089}
12090
12092{
12093 return isl::pw_multi_aff(*this).apply(upma2);
12094}
12095
12097{
12098 auto res = isl_multi_aff_as_map(copy());
12099 return manage(res);
12100}
12101
12102isl::multi_aff multi_aff::as_multi_aff() const
12103{
12104 return isl::pw_multi_aff(*this).as_multi_aff();
12105}
12106
12107isl::multi_union_pw_aff multi_aff::as_multi_union_pw_aff() const
12108{
12109 return isl::pw_multi_aff(*this).as_multi_union_pw_aff();
12110}
12111
12112isl::pw_multi_aff multi_aff::as_pw_multi_aff() const
12113{
12114 return isl::pw_multi_aff(*this).as_pw_multi_aff();
12115}
12116
12118{
12119 auto res = isl_multi_aff_as_set(copy());
12120 return manage(res);
12121}
12122
12123isl::union_map multi_aff::as_union_map() const
12124{
12125 return isl::pw_multi_aff(*this).as_union_map();
12126}
12127
12128isl::aff multi_aff::at(int pos) const
12129{
12130 auto res = isl_multi_aff_get_at(get(), pos);
12131 return manage(res);
12132}
12133
12134isl::aff multi_aff::get_at(int pos) const
12135{
12136 return at(pos);
12137}
12138
12139isl::basic_set multi_aff::bind(isl::multi_id tuple) const
12140{
12141 auto res = isl_multi_aff_bind(copy(), tuple.release());
12142 return manage(res);
12143}
12144
12145isl::multi_aff multi_aff::bind_domain(isl::multi_id tuple) const
12146{
12147 auto res = isl_multi_aff_bind_domain(copy(), tuple.release());
12148 return manage(res);
12149}
12150
12151isl::multi_aff multi_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const
12152{
12153 auto res = isl_multi_aff_bind_domain_wrapped_domain(copy(), tuple.release());
12154 return manage(res);
12155}
12156
12157isl::pw_multi_aff multi_aff::coalesce() const
12158{
12159 return isl::pw_multi_aff(*this).coalesce();
12160}
12161
12162isl::multi_val multi_aff::constant_multi_val() const
12163{
12165 return manage(res);
12166}
12167
12168isl::multi_val multi_aff::get_constant_multi_val() const
12169{
12170 return constant_multi_val();
12171}
12172
12174{
12175 auto res = isl_multi_aff_dim(get(), static_cast<enum isl_dim_type>(type));
12176 return manage(res);
12177}
12178
12180{
12181 return isl::pw_multi_aff(*this).domain();
12182}
12183
12185{
12187 return manage(res);
12188}
12189
12190isl::pw_multi_aff multi_aff::drop_dims(isl::dim type, unsigned int first, unsigned int n) const
12191{
12192 return isl::pw_multi_aff(*this).drop_dims(type, first, n);
12193}
12194
12196{
12198}
12199
12201{
12202 auto res = isl_multi_aff_flat_range_product(copy(), multi2.release());
12203 return manage(res);
12204}
12205
12206isl::multi_pw_aff multi_aff::flat_range_product(const isl::multi_pw_aff &multi2) const
12207{
12208 return isl::pw_multi_aff(*this).flat_range_product(multi2);
12209}
12210
12211isl::multi_union_pw_aff multi_aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const
12212{
12213 return isl::pw_multi_aff(*this).flat_range_product(multi2);
12214}
12215
12216isl::pw_multi_aff multi_aff::flat_range_product(const isl::pw_multi_aff &pma2) const
12217{
12218 return isl::pw_multi_aff(*this).flat_range_product(pma2);
12219}
12220
12221isl::union_pw_multi_aff multi_aff::flat_range_product(const isl::union_pw_multi_aff &upma2) const
12222{
12223 return isl::pw_multi_aff(*this).flat_range_product(upma2);
12224}
12225
12226isl::multi_aff multi_aff::flat_range_product(const isl::aff &multi2) const
12227{
12228 return this->flat_range_product(isl::multi_aff(multi2));
12229}
12230
12231isl::multi_aff multi_aff::floor() const
12232{
12233 auto res = isl_multi_aff_floor(copy());
12234 return manage(res);
12235}
12236
12238{
12239 return isl::pw_multi_aff(*this).foreach_piece(fn);
12240}
12241
12243{
12244 auto res = isl_multi_aff_gist(copy(), context.release());
12245 return manage(res);
12246}
12247
12249{
12250 return isl::pw_multi_aff(*this).gist(context);
12251}
12252
12253isl::multi_aff multi_aff::gist(const isl::basic_set &context) const
12254{
12255 return this->gist(isl::set(context));
12256}
12257
12258isl::multi_aff multi_aff::gist(const isl::point &context) const
12259{
12260 return this->gist(isl::set(context));
12261}
12262
12263boolean multi_aff::has_range_tuple_id() const
12264{
12265 auto res = isl_multi_aff_has_range_tuple_id(get());
12266 return manage(res);
12267}
12268
12270{
12271 auto res = isl_multi_aff_identity(space.release());
12272 return manage(res);
12273}
12274
12276{
12277 auto res = isl_multi_aff_identity_multi_aff(copy());
12278 return manage(res);
12279}
12280
12282{
12283 auto res = isl_multi_aff_identity_on_domain_space(space.release());
12284 return manage(res);
12285}
12286
12287isl::multi_aff multi_aff::insert_domain(isl::space domain) const
12288{
12289 auto res = isl_multi_aff_insert_domain(copy(), domain.release());
12290 return manage(res);
12291}
12292
12293isl::pw_multi_aff multi_aff::intersect_domain(const isl::set &set) const
12294{
12295 return isl::pw_multi_aff(*this).intersect_domain(set);
12296}
12297
12298isl::union_pw_multi_aff multi_aff::intersect_domain(const isl::space &space) const
12299{
12300 return isl::pw_multi_aff(*this).intersect_domain(space);
12301}
12302
12303isl::union_pw_multi_aff multi_aff::intersect_domain(const isl::union_set &uset) const
12304{
12305 return isl::pw_multi_aff(*this).intersect_domain(uset);
12306}
12307
12308isl::union_pw_multi_aff multi_aff::intersect_domain_wrapped_domain(const isl::union_set &uset) const
12309{
12310 return isl::pw_multi_aff(*this).intersect_domain_wrapped_domain(uset);
12311}
12312
12313isl::union_pw_multi_aff multi_aff::intersect_domain_wrapped_range(const isl::union_set &uset) const
12314{
12315 return isl::pw_multi_aff(*this).intersect_domain_wrapped_range(uset);
12316}
12317
12318isl::pw_multi_aff multi_aff::intersect_params(const isl::set &set) const
12319{
12320 return isl::pw_multi_aff(*this).intersect_params(set);
12321}
12322
12323boolean multi_aff::involves_locals() const
12324{
12325 auto res = isl_multi_aff_involves_locals(get());
12326 return manage(res);
12327}
12328
12329boolean multi_aff::involves_nan() const
12330{
12331 auto res = isl_multi_aff_involves_nan(get());
12332 return manage(res);
12333}
12334
12335boolean multi_aff::involves_param(const isl::id &id) const
12336{
12337 return isl::pw_multi_aff(*this).involves_param(id);
12338}
12339
12340boolean multi_aff::involves_param(const std::string &id) const
12341{
12342 return this->involves_param(isl::id(ctx(), id));
12343}
12344
12345boolean multi_aff::involves_param(const isl::id_list &list) const
12346{
12347 return isl::pw_multi_aff(*this).involves_param(list);
12348}
12349
12350boolean multi_aff::isa_multi_aff() const
12351{
12352 return isl::pw_multi_aff(*this).isa_multi_aff();
12353}
12354
12355boolean multi_aff::isa_pw_multi_aff() const
12356{
12357 return isl::pw_multi_aff(*this).isa_pw_multi_aff();
12358}
12359
12360isl::aff_list multi_aff::list() const
12361{
12362 auto res = isl_multi_aff_get_list(get());
12363 return manage(res);
12364}
12365
12366isl::aff_list multi_aff::get_list() const
12367{
12368 return list();
12369}
12370
12371isl::multi_pw_aff multi_aff::max(const isl::multi_pw_aff &multi2) const
12372{
12373 return isl::pw_multi_aff(*this).max(multi2);
12374}
12375
12376isl::multi_val multi_aff::max_multi_val() const
12377{
12378 return isl::pw_multi_aff(*this).max_multi_val();
12379}
12380
12381isl::multi_pw_aff multi_aff::min(const isl::multi_pw_aff &multi2) const
12382{
12383 return isl::pw_multi_aff(*this).min(multi2);
12384}
12385
12386isl::multi_val multi_aff::min_multi_val() const
12387{
12388 return isl::pw_multi_aff(*this).min_multi_val();
12389}
12390
12391isl::multi_aff multi_aff::multi_val_on_domain(isl::space space, isl::multi_val mv)
12392{
12394 return manage(res);
12395}
12396
12397class size multi_aff::n_piece() const
12398{
12399 return isl::pw_multi_aff(*this).n_piece();
12400}
12401
12402isl::multi_aff multi_aff::neg() const
12403{
12404 auto res = isl_multi_aff_neg(copy());
12405 return manage(res);
12406}
12407
12408boolean multi_aff::plain_is_empty() const
12409{
12410 return isl::pw_multi_aff(*this).plain_is_empty();
12411}
12412
12413boolean multi_aff::plain_is_equal(const isl::multi_aff &multi2) const
12414{
12415 auto res = isl_multi_aff_plain_is_equal(get(), multi2.get());
12416 return manage(res);
12417}
12418
12419boolean multi_aff::plain_is_equal(const isl::multi_pw_aff &multi2) const
12420{
12421 return isl::pw_multi_aff(*this).plain_is_equal(multi2);
12422}
12423
12424boolean multi_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
12425{
12426 return isl::pw_multi_aff(*this).plain_is_equal(multi2);
12427}
12428
12429boolean multi_aff::plain_is_equal(const isl::aff &multi2) const
12430{
12431 return this->plain_is_equal(isl::multi_aff(multi2));
12432}
12433
12434isl::pw_multi_aff multi_aff::preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const
12435{
12436 return isl::pw_multi_aff(*this).preimage_domain_wrapped_domain(pma2);
12437}
12438
12439isl::union_pw_multi_aff multi_aff::preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const
12440{
12441 return isl::pw_multi_aff(*this).preimage_domain_wrapped_domain(upma2);
12442}
12443
12444isl::multi_aff multi_aff::product(isl::multi_aff multi2) const
12445{
12446 auto res = isl_multi_aff_product(copy(), multi2.release());
12447 return manage(res);
12448}
12449
12450isl::multi_pw_aff multi_aff::product(const isl::multi_pw_aff &multi2) const
12451{
12452 return isl::pw_multi_aff(*this).product(multi2);
12453}
12454
12455isl::pw_multi_aff multi_aff::product(const isl::pw_multi_aff &pma2) const
12456{
12457 return isl::pw_multi_aff(*this).product(pma2);
12458}
12459
12460isl::multi_aff multi_aff::product(const isl::aff &multi2) const
12461{
12462 return this->product(isl::multi_aff(multi2));
12463}
12464
12465isl::multi_aff multi_aff::pullback(isl::multi_aff ma2) const
12466{
12468 return manage(res);
12469}
12470
12471isl::multi_pw_aff multi_aff::pullback(const isl::multi_pw_aff &mpa2) const
12472{
12473 return isl::pw_multi_aff(*this).pullback(mpa2);
12474}
12475
12476isl::pw_multi_aff multi_aff::pullback(const isl::pw_multi_aff &pma2) const
12477{
12478 return isl::pw_multi_aff(*this).pullback(pma2);
12479}
12480
12481isl::union_pw_multi_aff multi_aff::pullback(const isl::union_pw_multi_aff &upma2) const
12482{
12483 return isl::pw_multi_aff(*this).pullback(upma2);
12484}
12485
12486isl::multi_aff multi_aff::pullback(const isl::aff &ma2) const
12487{
12488 return this->pullback(isl::multi_aff(ma2));
12489}
12490
12491isl::pw_multi_aff_list multi_aff::pw_multi_aff_list() const
12492{
12493 return isl::pw_multi_aff(*this).pw_multi_aff_list();
12494}
12495
12496isl::pw_multi_aff multi_aff::range_factor_domain() const
12497{
12498 return isl::pw_multi_aff(*this).range_factor_domain();
12499}
12500
12501isl::pw_multi_aff multi_aff::range_factor_range() const
12502{
12503 return isl::pw_multi_aff(*this).range_factor_range();
12504}
12505
12506isl::multi_aff multi_aff::range_map(isl::space space)
12507{
12508 auto res = isl_multi_aff_range_map(space.release());
12509 return manage(res);
12510}
12511
12512isl::multi_aff multi_aff::range_product(isl::multi_aff multi2) const
12513{
12514 auto res = isl_multi_aff_range_product(copy(), multi2.release());
12515 return manage(res);
12516}
12517
12518isl::multi_pw_aff multi_aff::range_product(const isl::multi_pw_aff &multi2) const
12519{
12520 return isl::pw_multi_aff(*this).range_product(multi2);
12521}
12522
12523isl::multi_union_pw_aff multi_aff::range_product(const isl::multi_union_pw_aff &multi2) const
12524{
12525 return isl::pw_multi_aff(*this).range_product(multi2);
12526}
12527
12528isl::pw_multi_aff multi_aff::range_product(const isl::pw_multi_aff &pma2) const
12529{
12530 return isl::pw_multi_aff(*this).range_product(pma2);
12531}
12532
12533isl::union_pw_multi_aff multi_aff::range_product(const isl::union_pw_multi_aff &upma2) const
12534{
12535 return isl::pw_multi_aff(*this).range_product(upma2);
12536}
12537
12538isl::multi_aff multi_aff::range_product(const isl::aff &multi2) const
12539{
12540 return this->range_product(isl::multi_aff(multi2));
12541}
12542
12543isl::id multi_aff::range_tuple_id() const
12544{
12545 auto res = isl_multi_aff_get_range_tuple_id(get());
12546 return manage(res);
12547}
12548
12549isl::id multi_aff::get_range_tuple_id() const
12550{
12551 return range_tuple_id();
12552}
12553
12554isl::multi_aff multi_aff::reset_range_tuple_id() const
12555{
12556 auto res = isl_multi_aff_reset_range_tuple_id(copy());
12557 return manage(res);
12558}
12559
12561{
12562 auto res = isl_multi_aff_reset_tuple_id(copy(), static_cast<enum isl_dim_type>(type));
12563 return manage(res);
12564}
12565
12567{
12568 auto res = isl_multi_aff_scale_multi_val(copy(), mv.release());
12569 return manage(res);
12570}
12571
12573{
12574 auto res = isl_multi_aff_scale_val(copy(), v.release());
12575 return manage(res);
12576}
12577
12578isl::multi_aff multi_aff::scale(long v) const
12579{
12580 return this->scale(isl::val(ctx(), v));
12581}
12582
12583isl::multi_aff multi_aff::scale_down(isl::multi_val mv) const
12584{
12585 auto res = isl_multi_aff_scale_down_multi_val(copy(), mv.release());
12586 return manage(res);
12587}
12588
12589isl::multi_aff multi_aff::scale_down(isl::val v) const
12590{
12591 auto res = isl_multi_aff_scale_down_val(copy(), v.release());
12592 return manage(res);
12593}
12594
12595isl::multi_aff multi_aff::scale_down(long v) const
12596{
12597 return this->scale_down(isl::val(ctx(), v));
12598}
12599
12601{
12602 auto res = isl_multi_aff_set_aff(copy(), pos, el.release());
12603 return manage(res);
12604}
12605
12607{
12608 auto res = isl_multi_aff_set_at(copy(), pos, el.release());
12609 return manage(res);
12610}
12611
12613{
12614 return isl::pw_multi_aff(*this).set_at(pos, el);
12615}
12616
12617isl::multi_union_pw_aff multi_aff::set_at(int pos, const isl::union_pw_aff &el) const
12618{
12619 return isl::pw_multi_aff(*this).set_at(pos, el);
12620}
12621
12623{
12624 return isl::pw_multi_aff(*this).set_pw_aff(pos, el);
12625}
12626
12628{
12629 return isl::pw_multi_aff(*this).set_pw_aff(pos, pa);
12630}
12631
12633{
12634 auto res = isl_multi_aff_set_range_tuple_id(copy(), id.release());
12635 return manage(res);
12636}
12637
12638isl::multi_aff multi_aff::set_range_tuple(const std::string &id) const
12639{
12640 return this->set_range_tuple(isl::id(ctx(), id));
12641}
12642
12644{
12645 return isl::pw_multi_aff(*this).set_union_pw_aff(pos, el);
12646}
12647
12648class size multi_aff::size() const
12649{
12650 auto res = isl_multi_aff_size(get());
12651 return manage(res);
12652}
12653
12655{
12656 auto res = isl_multi_aff_get_space(get());
12657 return manage(res);
12658}
12659
12660isl::space multi_aff::get_space() const
12661{
12662 return space();
12663}
12664
12665isl::multi_aff multi_aff::sub(isl::multi_aff multi2) const
12666{
12667 auto res = isl_multi_aff_sub(copy(), multi2.release());
12668 return manage(res);
12669}
12670
12671isl::multi_pw_aff multi_aff::sub(const isl::multi_pw_aff &multi2) const
12672{
12673 return isl::pw_multi_aff(*this).sub(multi2);
12674}
12675
12676isl::multi_union_pw_aff multi_aff::sub(const isl::multi_union_pw_aff &multi2) const
12677{
12678 return isl::pw_multi_aff(*this).sub(multi2);
12679}
12680
12681isl::pw_multi_aff multi_aff::sub(const isl::pw_multi_aff &pma2) const
12682{
12683 return isl::pw_multi_aff(*this).sub(pma2);
12684}
12685
12686isl::union_pw_multi_aff multi_aff::sub(const isl::union_pw_multi_aff &upma2) const
12687{
12688 return isl::pw_multi_aff(*this).sub(upma2);
12689}
12690
12691isl::multi_aff multi_aff::sub(const isl::aff &multi2) const
12692{
12693 return this->sub(isl::multi_aff(multi2));
12694}
12695
12696isl::pw_multi_aff multi_aff::subtract_domain(const isl::set &set) const
12697{
12698 return isl::pw_multi_aff(*this).subtract_domain(set);
12699}
12700
12701isl::union_pw_multi_aff multi_aff::subtract_domain(const isl::space &space) const
12702{
12703 return isl::pw_multi_aff(*this).subtract_domain(space);
12704}
12705
12706isl::union_pw_multi_aff multi_aff::subtract_domain(const isl::union_set &uset) const
12707{
12708 return isl::pw_multi_aff(*this).subtract_domain(uset);
12709}
12710
12711isl::pw_multi_aff_list multi_aff::to_list() const
12712{
12713 return isl::pw_multi_aff(*this).to_list();
12714}
12715
12716isl::multi_pw_aff multi_aff::to_multi_pw_aff() const
12717{
12719 return manage(res);
12720}
12721
12722isl::multi_union_pw_aff multi_aff::to_multi_union_pw_aff() const
12723{
12725 return manage(res);
12726}
12727
12728isl::pw_multi_aff multi_aff::to_pw_multi_aff() const
12729{
12731 return manage(res);
12732}
12733
12734isl::union_pw_multi_aff multi_aff::to_union_pw_multi_aff() const
12735{
12736 return isl::pw_multi_aff(*this).to_union_pw_multi_aff();
12737}
12738
12740{
12741 return isl::pw_multi_aff(*this).tuple_id(type);
12742}
12743
12745{
12746 auto res = isl_multi_aff_unbind_params_insert_domain(copy(), domain.release());
12747 return manage(res);
12748}
12749
12751{
12752 return isl::pw_multi_aff(*this).union_add(mpa2);
12753}
12754
12755isl::multi_union_pw_aff multi_aff::union_add(const isl::multi_union_pw_aff &mupa2) const
12756{
12757 return isl::pw_multi_aff(*this).union_add(mupa2);
12758}
12759
12760isl::pw_multi_aff multi_aff::union_add(const isl::pw_multi_aff &pma2) const
12761{
12762 return isl::pw_multi_aff(*this).union_add(pma2);
12763}
12764
12765isl::union_pw_multi_aff multi_aff::union_add(const isl::union_pw_multi_aff &upma2) const
12766{
12767 return isl::pw_multi_aff(*this).union_add(upma2);
12768}
12769
12770isl::multi_aff multi_aff::zero(isl::space space)
12771{
12772 auto res = isl_multi_aff_zero(space.release());
12773 return manage(res);
12774}
12775
12776inline std::ostream &operator<<(std::ostream &os, const multi_aff &obj)
12777{
12778 char *str = isl_multi_aff_to_str(obj.get());
12779 if (!str) {
12780 os.setstate(std::ios_base::badbit);
12781 return os;
12782 }
12783 os << str;
12784 free(str);
12785 return os;
12786}
12787
12788// implementations for isl::multi_id
12790 return multi_id(ptr);
12791}
12793 ptr = isl_multi_id_copy(ptr);
12794 return multi_id(ptr);
12795}
12796
12798 : ptr(nullptr) {}
12799
12801 : ptr(nullptr)
12802{
12803 ptr = obj.copy();
12804}
12805
12807 : ptr(ptr) {}
12808
12809multi_id::multi_id(isl::space space, isl::id_list list)
12810{
12811 auto res = isl_multi_id_from_id_list(space.release(), list.release());
12812 ptr = res;
12813}
12814
12815multi_id::multi_id(isl::ctx ctx, const std::string &str)
12816{
12817 auto res = isl_multi_id_read_from_str(ctx.release(), str.c_str());
12818 ptr = res;
12819}
12820
12822 std::swap(this->ptr, obj.ptr);
12823 return *this;
12824}
12825
12827 if (ptr)
12828 isl_multi_id_free(ptr);
12829}
12830
12832 return isl_multi_id_copy(ptr);
12833}
12834
12836 return ptr;
12837}
12838
12840 isl_multi_id *tmp = ptr;
12841 ptr = nullptr;
12842 return tmp;
12843}
12844
12845bool multi_id::is_null() const {
12846 return ptr == nullptr;
12847}
12848
12849isl::ctx multi_id::ctx() const {
12850 return isl::ctx(isl_multi_id_get_ctx(ptr));
12851}
12852
12853isl::id multi_id::at(int pos) const
12854{
12855 auto res = isl_multi_id_get_at(get(), pos);
12856 return manage(res);
12857}
12858
12859isl::id multi_id::get_at(int pos) const
12860{
12861 return at(pos);
12862}
12863
12864isl::multi_id multi_id::flat_range_product(isl::multi_id multi2) const
12865{
12866 auto res = isl_multi_id_flat_range_product(copy(), multi2.release());
12867 return manage(res);
12868}
12869
12870isl::id_list multi_id::list() const
12871{
12872 auto res = isl_multi_id_get_list(get());
12873 return manage(res);
12874}
12875
12876isl::id_list multi_id::get_list() const
12877{
12878 return list();
12879}
12880
12881boolean multi_id::plain_is_equal(const isl::multi_id &multi2) const
12882{
12883 auto res = isl_multi_id_plain_is_equal(get(), multi2.get());
12884 return manage(res);
12885}
12886
12887isl::multi_id multi_id::range_product(isl::multi_id multi2) const
12888{
12889 auto res = isl_multi_id_range_product(copy(), multi2.release());
12890 return manage(res);
12891}
12892
12893isl::multi_id multi_id::set_at(int pos, isl::id el) const
12894{
12895 auto res = isl_multi_id_set_at(copy(), pos, el.release());
12896 return manage(res);
12897}
12898
12899isl::multi_id multi_id::set_at(int pos, const std::string &el) const
12900{
12901 return this->set_at(pos, isl::id(ctx(), el));
12902}
12903
12905{
12906 auto res = isl_multi_id_set_id(copy(), pos, el.release());
12907 return manage(res);
12908}
12909
12910isl::multi_id multi_id::set_id(int pos, const std::string &el) const
12911{
12912 return this->set_id(pos, isl::id(ctx(), el));
12913}
12914
12915class size multi_id::size() const
12916{
12917 auto res = isl_multi_id_size(get());
12918 return manage(res);
12919}
12920
12922{
12923 auto res = isl_multi_id_get_space(get());
12924 return manage(res);
12925}
12926
12927isl::space multi_id::get_space() const
12928{
12929 return space();
12930}
12931
12932inline std::ostream &operator<<(std::ostream &os, const multi_id &obj)
12933{
12934 char *str = isl_multi_id_to_str(obj.get());
12935 if (!str) {
12936 os.setstate(std::ios_base::badbit);
12937 return os;
12938 }
12939 os << str;
12940 free(str);
12941 return os;
12942}
12943
12944// implementations for isl::multi_pw_aff
12946 return multi_pw_aff(ptr);
12947}
12949 ptr = isl_multi_pw_aff_copy(ptr);
12950 return multi_pw_aff(ptr);
12951}
12952
12954 : ptr(nullptr) {}
12955
12957 : ptr(nullptr)
12958{
12959 ptr = obj.copy();
12960}
12961
12963 : ptr(ptr) {}
12964
12966{
12967 auto res = isl_multi_pw_aff_from_aff(aff.release());
12968 ptr = res;
12969}
12970
12971multi_pw_aff::multi_pw_aff(isl::multi_aff ma)
12972{
12973 auto res = isl_multi_pw_aff_from_multi_aff(ma.release());
12974 ptr = res;
12975}
12976
12977multi_pw_aff::multi_pw_aff(isl::pw_aff pa)
12978{
12979 auto res = isl_multi_pw_aff_from_pw_aff(pa.release());
12980 ptr = res;
12981}
12982
12983multi_pw_aff::multi_pw_aff(isl::space space, isl::pw_aff_list list)
12984{
12985 auto res = isl_multi_pw_aff_from_pw_aff_list(space.release(), list.release());
12986 ptr = res;
12987}
12988
12989multi_pw_aff::multi_pw_aff(isl::pw_multi_aff pma)
12990{
12991 auto res = isl_multi_pw_aff_from_pw_multi_aff(pma.release());
12992 ptr = res;
12993}
12994
12995multi_pw_aff::multi_pw_aff(isl::ctx ctx, const std::string &str)
12996{
12997 auto res = isl_multi_pw_aff_read_from_str(ctx.release(), str.c_str());
12998 ptr = res;
12999}
13000
13002 std::swap(this->ptr, obj.ptr);
13003 return *this;
13004}
13005
13007 if (ptr)
13008 isl_multi_pw_aff_free(ptr);
13009}
13010
13012 return isl_multi_pw_aff_copy(ptr);
13013}
13014
13016 return ptr;
13017}
13018
13020 isl_multi_pw_aff *tmp = ptr;
13021 ptr = nullptr;
13022 return tmp;
13023}
13024
13025bool multi_pw_aff::is_null() const {
13026 return ptr == nullptr;
13027}
13028
13029isl::ctx multi_pw_aff::ctx() const {
13030 return isl::ctx(isl_multi_pw_aff_get_ctx(ptr));
13031}
13032
13033isl::multi_pw_aff multi_pw_aff::add(isl::multi_pw_aff multi2) const
13034{
13035 auto res = isl_multi_pw_aff_add(copy(), multi2.release());
13036 return manage(res);
13037}
13038
13039isl::multi_union_pw_aff multi_pw_aff::add(const isl::multi_union_pw_aff &multi2) const
13040{
13041 return isl::multi_union_pw_aff(*this).add(multi2);
13042}
13043
13044isl::multi_pw_aff multi_pw_aff::add(const isl::aff &multi2) const
13045{
13046 return this->add(isl::multi_pw_aff(multi2));
13047}
13048
13049isl::multi_pw_aff multi_pw_aff::add(const isl::multi_aff &multi2) const
13050{
13051 return this->add(isl::multi_pw_aff(multi2));
13052}
13053
13054isl::multi_pw_aff multi_pw_aff::add(const isl::pw_aff &multi2) const
13055{
13056 return this->add(isl::multi_pw_aff(multi2));
13057}
13058
13059isl::multi_pw_aff multi_pw_aff::add(const isl::pw_multi_aff &multi2) const
13060{
13061 return this->add(isl::multi_pw_aff(multi2));
13062}
13063
13064isl::multi_pw_aff multi_pw_aff::add_constant(isl::multi_val mv) const
13065{
13066 auto res = isl_multi_pw_aff_add_constant_multi_val(copy(), mv.release());
13067 return manage(res);
13068}
13069
13070isl::multi_pw_aff multi_pw_aff::add_constant(isl::val v) const
13071{
13072 auto res = isl_multi_pw_aff_add_constant_val(copy(), v.release());
13073 return manage(res);
13074}
13075
13076isl::multi_pw_aff multi_pw_aff::add_constant(long v) const
13077{
13078 return this->add_constant(isl::val(ctx(), v));
13079}
13080
13081isl::map multi_pw_aff::as_map() const
13082{
13084 return manage(res);
13085}
13086
13087isl::multi_aff multi_pw_aff::as_multi_aff() const
13088{
13090 return manage(res);
13091}
13092
13094{
13096 return manage(res);
13097}
13098
13099isl::pw_aff multi_pw_aff::at(int pos) const
13100{
13101 auto res = isl_multi_pw_aff_get_at(get(), pos);
13102 return manage(res);
13103}
13104
13105isl::pw_aff multi_pw_aff::get_at(int pos) const
13106{
13107 return at(pos);
13108}
13109
13110isl::set multi_pw_aff::bind(isl::multi_id tuple) const
13111{
13112 auto res = isl_multi_pw_aff_bind(copy(), tuple.release());
13113 return manage(res);
13114}
13115
13116isl::multi_pw_aff multi_pw_aff::bind_domain(isl::multi_id tuple) const
13117{
13118 auto res = isl_multi_pw_aff_bind_domain(copy(), tuple.release());
13119 return manage(res);
13120}
13121
13122isl::multi_pw_aff multi_pw_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const
13123{
13124 auto res = isl_multi_pw_aff_bind_domain_wrapped_domain(copy(), tuple.release());
13125 return manage(res);
13126}
13127
13128isl::multi_pw_aff multi_pw_aff::coalesce() const
13129{
13131 return manage(res);
13132}
13133
13135{
13136 auto res = isl_multi_pw_aff_dim(get(), static_cast<enum isl_dim_type>(type));
13137 return manage(res);
13138}
13139
13141{
13143 return manage(res);
13144}
13145
13147{
13148 auto res = isl_multi_pw_aff_flat_range_product(copy(), multi2.release());
13149 return manage(res);
13150}
13151
13152isl::multi_union_pw_aff multi_pw_aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const
13153{
13154 return isl::multi_union_pw_aff(*this).flat_range_product(multi2);
13155}
13156
13157isl::multi_pw_aff multi_pw_aff::flat_range_product(const isl::aff &multi2) const
13158{
13159 return this->flat_range_product(isl::multi_pw_aff(multi2));
13160}
13161
13162isl::multi_pw_aff multi_pw_aff::flat_range_product(const isl::multi_aff &multi2) const
13163{
13164 return this->flat_range_product(isl::multi_pw_aff(multi2));
13165}
13166
13167isl::multi_pw_aff multi_pw_aff::flat_range_product(const isl::pw_aff &multi2) const
13168{
13169 return this->flat_range_product(isl::multi_pw_aff(multi2));
13170}
13171
13172isl::multi_pw_aff multi_pw_aff::flat_range_product(const isl::pw_multi_aff &multi2) const
13173{
13174 return this->flat_range_product(isl::multi_pw_aff(multi2));
13175}
13176
13177isl::multi_pw_aff multi_pw_aff::gist(isl::set set) const
13178{
13179 auto res = isl_multi_pw_aff_gist(copy(), set.release());
13180 return manage(res);
13181}
13182
13183isl::multi_union_pw_aff multi_pw_aff::gist(const isl::union_set &context) const
13184{
13185 return isl::multi_union_pw_aff(*this).gist(context);
13186}
13187
13188isl::multi_pw_aff multi_pw_aff::gist(const isl::basic_set &set) const
13189{
13190 return this->gist(isl::set(set));
13191}
13192
13193isl::multi_pw_aff multi_pw_aff::gist(const isl::point &set) const
13194{
13195 return this->gist(isl::set(set));
13196}
13197
13199{
13200 auto res = isl_multi_pw_aff_has_range_tuple_id(get());
13201 return manage(res);
13202}
13203
13205{
13206 auto res = isl_multi_pw_aff_identity(space.release());
13207 return manage(res);
13208}
13209
13211{
13212 auto res = isl_multi_pw_aff_identity_multi_pw_aff(copy());
13213 return manage(res);
13214}
13215
13217{
13218 auto res = isl_multi_pw_aff_identity_on_domain_space(space.release());
13219 return manage(res);
13220}
13221
13222isl::multi_pw_aff multi_pw_aff::insert_domain(isl::space domain) const
13223{
13224 auto res = isl_multi_pw_aff_insert_domain(copy(), domain.release());
13225 return manage(res);
13226}
13227
13228isl::multi_pw_aff multi_pw_aff::intersect_domain(isl::set domain) const
13229{
13230 auto res = isl_multi_pw_aff_intersect_domain(copy(), domain.release());
13231 return manage(res);
13232}
13233
13234isl::multi_union_pw_aff multi_pw_aff::intersect_domain(const isl::union_set &uset) const
13235{
13236 return isl::multi_union_pw_aff(*this).intersect_domain(uset);
13237}
13238
13239isl::multi_pw_aff multi_pw_aff::intersect_domain(const isl::basic_set &domain) const
13240{
13241 return this->intersect_domain(isl::set(domain));
13242}
13243
13244isl::multi_pw_aff multi_pw_aff::intersect_domain(const isl::point &domain) const
13245{
13246 return this->intersect_domain(isl::set(domain));
13247}
13248
13249isl::multi_pw_aff multi_pw_aff::intersect_params(isl::set set) const
13250{
13251 auto res = isl_multi_pw_aff_intersect_params(copy(), set.release());
13252 return manage(res);
13253}
13254
13255boolean multi_pw_aff::involves_nan() const
13256{
13257 auto res = isl_multi_pw_aff_involves_nan(get());
13258 return manage(res);
13259}
13260
13261boolean multi_pw_aff::involves_param(const isl::id &id) const
13262{
13263 auto res = isl_multi_pw_aff_involves_param_id(get(), id.get());
13264 return manage(res);
13265}
13266
13267boolean multi_pw_aff::involves_param(const std::string &id) const
13268{
13269 return this->involves_param(isl::id(ctx(), id));
13270}
13271
13272boolean multi_pw_aff::involves_param(const isl::id_list &list) const
13273{
13274 auto res = isl_multi_pw_aff_involves_param_id_list(get(), list.get());
13275 return manage(res);
13276}
13277
13278boolean multi_pw_aff::isa_multi_aff() const
13279{
13281 return manage(res);
13282}
13283
13284isl::pw_aff_list multi_pw_aff::list() const
13285{
13286 auto res = isl_multi_pw_aff_get_list(get());
13287 return manage(res);
13288}
13289
13290isl::pw_aff_list multi_pw_aff::get_list() const
13291{
13292 return list();
13293}
13294
13295isl::multi_pw_aff multi_pw_aff::max(isl::multi_pw_aff multi2) const
13296{
13297 auto res = isl_multi_pw_aff_max(copy(), multi2.release());
13298 return manage(res);
13299}
13300
13301isl::multi_val multi_pw_aff::max_multi_val() const
13302{
13304 return manage(res);
13305}
13306
13307isl::multi_pw_aff multi_pw_aff::min(isl::multi_pw_aff multi2) const
13308{
13309 auto res = isl_multi_pw_aff_min(copy(), multi2.release());
13310 return manage(res);
13311}
13312
13313isl::multi_val multi_pw_aff::min_multi_val() const
13314{
13316 return manage(res);
13317}
13318
13319isl::multi_pw_aff multi_pw_aff::neg() const
13320{
13321 auto res = isl_multi_pw_aff_neg(copy());
13322 return manage(res);
13323}
13324
13325boolean multi_pw_aff::plain_is_equal(const isl::multi_pw_aff &multi2) const
13326{
13327 auto res = isl_multi_pw_aff_plain_is_equal(get(), multi2.get());
13328 return manage(res);
13329}
13330
13331boolean multi_pw_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
13332{
13333 return isl::multi_union_pw_aff(*this).plain_is_equal(multi2);
13334}
13335
13336boolean multi_pw_aff::plain_is_equal(const isl::aff &multi2) const
13337{
13338 return this->plain_is_equal(isl::multi_pw_aff(multi2));
13339}
13340
13341boolean multi_pw_aff::plain_is_equal(const isl::multi_aff &multi2) const
13342{
13343 return this->plain_is_equal(isl::multi_pw_aff(multi2));
13344}
13345
13346boolean multi_pw_aff::plain_is_equal(const isl::pw_aff &multi2) const
13347{
13348 return this->plain_is_equal(isl::multi_pw_aff(multi2));
13349}
13350
13351boolean multi_pw_aff::plain_is_equal(const isl::pw_multi_aff &multi2) const
13352{
13353 return this->plain_is_equal(isl::multi_pw_aff(multi2));
13354}
13355
13356isl::multi_pw_aff multi_pw_aff::product(isl::multi_pw_aff multi2) const
13357{
13358 auto res = isl_multi_pw_aff_product(copy(), multi2.release());
13359 return manage(res);
13360}
13361
13362isl::multi_pw_aff multi_pw_aff::pullback(isl::multi_aff ma) const
13363{
13364 auto res = isl_multi_pw_aff_pullback_multi_aff(copy(), ma.release());
13365 return manage(res);
13366}
13367
13368isl::multi_pw_aff multi_pw_aff::pullback(isl::multi_pw_aff mpa2) const
13369{
13371 return manage(res);
13372}
13373
13374isl::multi_pw_aff multi_pw_aff::pullback(isl::pw_multi_aff pma) const
13375{
13377 return manage(res);
13378}
13379
13380isl::multi_union_pw_aff multi_pw_aff::pullback(const isl::union_pw_multi_aff &upma) const
13381{
13382 return isl::multi_union_pw_aff(*this).pullback(upma);
13383}
13384
13385isl::multi_pw_aff multi_pw_aff::range_product(isl::multi_pw_aff multi2) const
13386{
13387 auto res = isl_multi_pw_aff_range_product(copy(), multi2.release());
13388 return manage(res);
13389}
13390
13391isl::multi_union_pw_aff multi_pw_aff::range_product(const isl::multi_union_pw_aff &multi2) const
13392{
13393 return isl::multi_union_pw_aff(*this).range_product(multi2);
13394}
13395
13396isl::multi_pw_aff multi_pw_aff::range_product(const isl::aff &multi2) const
13397{
13398 return this->range_product(isl::multi_pw_aff(multi2));
13399}
13400
13401isl::multi_pw_aff multi_pw_aff::range_product(const isl::multi_aff &multi2) const
13402{
13403 return this->range_product(isl::multi_pw_aff(multi2));
13404}
13405
13406isl::multi_pw_aff multi_pw_aff::range_product(const isl::pw_aff &multi2) const
13407{
13408 return this->range_product(isl::multi_pw_aff(multi2));
13409}
13410
13411isl::multi_pw_aff multi_pw_aff::range_product(const isl::pw_multi_aff &multi2) const
13412{
13413 return this->range_product(isl::multi_pw_aff(multi2));
13414}
13415
13416isl::id multi_pw_aff::range_tuple_id() const
13417{
13418 auto res = isl_multi_pw_aff_get_range_tuple_id(get());
13419 return manage(res);
13420}
13421
13423{
13424 return range_tuple_id();
13425}
13426
13427isl::multi_pw_aff multi_pw_aff::reset_range_tuple_id() const
13428{
13429 auto res = isl_multi_pw_aff_reset_range_tuple_id(copy());
13430 return manage(res);
13431}
13432
13434{
13435 auto res = isl_multi_pw_aff_reset_tuple_id(copy(), static_cast<enum isl_dim_type>(type));
13436 return manage(res);
13437}
13438
13440{
13441 auto res = isl_multi_pw_aff_scale_multi_val(copy(), mv.release());
13442 return manage(res);
13443}
13444
13446{
13447 auto res = isl_multi_pw_aff_scale_val(copy(), v.release());
13448 return manage(res);
13449}
13450
13451isl::multi_pw_aff multi_pw_aff::scale(long v) const
13452{
13453 return this->scale(isl::val(ctx(), v));
13454}
13455
13456isl::multi_pw_aff multi_pw_aff::scale_down(isl::multi_val mv) const
13457{
13458 auto res = isl_multi_pw_aff_scale_down_multi_val(copy(), mv.release());
13459 return manage(res);
13460}
13461
13462isl::multi_pw_aff multi_pw_aff::scale_down(isl::val v) const
13463{
13464 auto res = isl_multi_pw_aff_scale_down_val(copy(), v.release());
13465 return manage(res);
13466}
13467
13468isl::multi_pw_aff multi_pw_aff::scale_down(long v) const
13469{
13470 return this->scale_down(isl::val(ctx(), v));
13471}
13472
13473isl::multi_pw_aff multi_pw_aff::set_at(int pos, isl::pw_aff el) const
13474{
13475 auto res = isl_multi_pw_aff_set_at(copy(), pos, el.release());
13476 return manage(res);
13477}
13478
13479isl::multi_union_pw_aff multi_pw_aff::set_at(int pos, const isl::union_pw_aff &el) const
13480{
13481 return isl::multi_union_pw_aff(*this).set_at(pos, el);
13482}
13483
13485{
13486 auto res = isl_multi_pw_aff_set_pw_aff(copy(), pos, el.release());
13487 return manage(res);
13488}
13489
13491{
13492 auto res = isl_multi_pw_aff_set_range_tuple_id(copy(), id.release());
13493 return manage(res);
13494}
13495
13496isl::multi_pw_aff multi_pw_aff::set_range_tuple(const std::string &id) const
13497{
13498 return this->set_range_tuple(isl::id(ctx(), id));
13499}
13500
13502{
13503 return isl::multi_union_pw_aff(*this).set_union_pw_aff(pos, el);
13504}
13505
13506class size multi_pw_aff::size() const
13507{
13508 auto res = isl_multi_pw_aff_size(get());
13509 return manage(res);
13510}
13511
13513{
13514 auto res = isl_multi_pw_aff_get_space(get());
13515 return manage(res);
13516}
13517
13518isl::space multi_pw_aff::get_space() const
13519{
13520 return space();
13521}
13522
13523isl::multi_pw_aff multi_pw_aff::sub(isl::multi_pw_aff multi2) const
13524{
13525 auto res = isl_multi_pw_aff_sub(copy(), multi2.release());
13526 return manage(res);
13527}
13528
13529isl::multi_union_pw_aff multi_pw_aff::sub(const isl::multi_union_pw_aff &multi2) const
13530{
13531 return isl::multi_union_pw_aff(*this).sub(multi2);
13532}
13533
13534isl::multi_pw_aff multi_pw_aff::sub(const isl::aff &multi2) const
13535{
13536 return this->sub(isl::multi_pw_aff(multi2));
13537}
13538
13539isl::multi_pw_aff multi_pw_aff::sub(const isl::multi_aff &multi2) const
13540{
13541 return this->sub(isl::multi_pw_aff(multi2));
13542}
13543
13544isl::multi_pw_aff multi_pw_aff::sub(const isl::pw_aff &multi2) const
13545{
13546 return this->sub(isl::multi_pw_aff(multi2));
13547}
13548
13549isl::multi_pw_aff multi_pw_aff::sub(const isl::pw_multi_aff &multi2) const
13550{
13551 return this->sub(isl::multi_pw_aff(multi2));
13552}
13553
13554isl::multi_pw_aff multi_pw_aff::unbind_params_insert_domain(isl::multi_id domain) const
13555{
13556 auto res = isl_multi_pw_aff_unbind_params_insert_domain(copy(), domain.release());
13557 return manage(res);
13558}
13559
13560isl::multi_pw_aff multi_pw_aff::union_add(isl::multi_pw_aff mpa2) const
13561{
13562 auto res = isl_multi_pw_aff_union_add(copy(), mpa2.release());
13563 return manage(res);
13564}
13565
13566isl::multi_union_pw_aff multi_pw_aff::union_add(const isl::multi_union_pw_aff &mupa2) const
13567{
13568 return isl::multi_union_pw_aff(*this).union_add(mupa2);
13569}
13570
13571isl::multi_pw_aff multi_pw_aff::union_add(const isl::aff &mpa2) const
13572{
13573 return this->union_add(isl::multi_pw_aff(mpa2));
13574}
13575
13576isl::multi_pw_aff multi_pw_aff::union_add(const isl::multi_aff &mpa2) const
13577{
13578 return this->union_add(isl::multi_pw_aff(mpa2));
13579}
13580
13581isl::multi_pw_aff multi_pw_aff::union_add(const isl::pw_aff &mpa2) const
13582{
13583 return this->union_add(isl::multi_pw_aff(mpa2));
13584}
13585
13586isl::multi_pw_aff multi_pw_aff::union_add(const isl::pw_multi_aff &mpa2) const
13587{
13588 return this->union_add(isl::multi_pw_aff(mpa2));
13589}
13590
13591isl::multi_pw_aff multi_pw_aff::zero(isl::space space)
13592{
13593 auto res = isl_multi_pw_aff_zero(space.release());
13594 return manage(res);
13595}
13596
13597inline std::ostream &operator<<(std::ostream &os, const multi_pw_aff &obj)
13598{
13599 char *str = isl_multi_pw_aff_to_str(obj.get());
13600 if (!str) {
13601 os.setstate(std::ios_base::badbit);
13602 return os;
13603 }
13604 os << str;
13605 free(str);
13606 return os;
13607}
13608
13609// implementations for isl::multi_union_pw_aff
13611 return multi_union_pw_aff(ptr);
13612}
13614 ptr = isl_multi_union_pw_aff_copy(ptr);
13615 return multi_union_pw_aff(ptr);
13616}
13617
13619 : ptr(nullptr) {}
13620
13622 : ptr(nullptr)
13623{
13624 ptr = obj.copy();
13625}
13626
13628 : ptr(ptr) {}
13629
13630multi_union_pw_aff::multi_union_pw_aff(isl::multi_pw_aff mpa)
13631{
13633 ptr = res;
13634}
13635
13636multi_union_pw_aff::multi_union_pw_aff(isl::union_pw_aff upa)
13637{
13639 ptr = res;
13640}
13641
13642multi_union_pw_aff::multi_union_pw_aff(isl::space space, isl::union_pw_aff_list list)
13643{
13644 auto res = isl_multi_union_pw_aff_from_union_pw_aff_list(space.release(), list.release());
13645 ptr = res;
13646}
13647
13653
13655{
13657 ptr = res;
13658}
13659
13660multi_union_pw_aff &multi_union_pw_aff::operator=(multi_union_pw_aff obj) {
13661 std::swap(this->ptr, obj.ptr);
13662 return *this;
13663}
13664
13666 if (ptr)
13667 isl_multi_union_pw_aff_free(ptr);
13668}
13669
13671 return isl_multi_union_pw_aff_copy(ptr);
13672}
13673
13675 return ptr;
13676}
13677
13680 ptr = nullptr;
13681 return tmp;
13682}
13683
13684bool multi_union_pw_aff::is_null() const {
13685 return ptr == nullptr;
13686}
13687
13688isl::ctx multi_union_pw_aff::ctx() const {
13689 return isl::ctx(isl_multi_union_pw_aff_get_ctx(ptr));
13690}
13691
13692isl::multi_union_pw_aff multi_union_pw_aff::add(isl::multi_union_pw_aff multi2) const
13693{
13694 auto res = isl_multi_union_pw_aff_add(copy(), multi2.release());
13695 return manage(res);
13696}
13697
13698isl::union_pw_aff multi_union_pw_aff::at(int pos) const
13699{
13700 auto res = isl_multi_union_pw_aff_get_at(get(), pos);
13701 return manage(res);
13702}
13703
13704isl::union_pw_aff multi_union_pw_aff::get_at(int pos) const
13705{
13706 return at(pos);
13707}
13708
13709isl::union_set multi_union_pw_aff::bind(isl::multi_id tuple) const
13710{
13711 auto res = isl_multi_union_pw_aff_bind(copy(), tuple.release());
13712 return manage(res);
13713}
13714
13715isl::multi_union_pw_aff multi_union_pw_aff::coalesce() const
13716{
13718 return manage(res);
13719}
13720
13722{
13723 auto res = isl_multi_union_pw_aff_dim(get(), static_cast<enum isl_dim_type>(type));
13724 return manage(res);
13725}
13726
13728{
13730 return manage(res);
13731}
13732
13734{
13735 auto res = isl_multi_union_pw_aff_flat_range_product(copy(), multi2.release());
13736 return manage(res);
13737}
13738
13744
13746{
13747 auto res = isl_multi_union_pw_aff_gist(copy(), context.release());
13748 return manage(res);
13749}
13750
13752{
13753 auto res = isl_multi_union_pw_aff_has_range_tuple_id(get());
13754 return manage(res);
13755}
13756
13757isl::multi_union_pw_aff multi_union_pw_aff::intersect_domain(isl::union_set uset) const
13758{
13760 return manage(res);
13761}
13762
13763isl::multi_union_pw_aff multi_union_pw_aff::intersect_params(isl::set params) const
13764{
13766 return manage(res);
13767}
13768
13770{
13771 auto res = isl_multi_union_pw_aff_involves_nan(get());
13772 return manage(res);
13773}
13774
13775isl::union_pw_aff_list multi_union_pw_aff::list() const
13776{
13777 auto res = isl_multi_union_pw_aff_get_list(get());
13778 return manage(res);
13779}
13780
13781isl::union_pw_aff_list multi_union_pw_aff::get_list() const
13782{
13783 return list();
13784}
13785
13786isl::multi_union_pw_aff multi_union_pw_aff::neg() const
13787{
13788 auto res = isl_multi_union_pw_aff_neg(copy());
13789 return manage(res);
13790}
13791
13792boolean multi_union_pw_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
13793{
13794 auto res = isl_multi_union_pw_aff_plain_is_equal(get(), multi2.get());
13795 return manage(res);
13796}
13797
13798isl::multi_union_pw_aff multi_union_pw_aff::pullback(isl::union_pw_multi_aff upma) const
13799{
13801 return manage(res);
13802}
13803
13804isl::multi_union_pw_aff multi_union_pw_aff::range_product(isl::multi_union_pw_aff multi2) const
13805{
13806 auto res = isl_multi_union_pw_aff_range_product(copy(), multi2.release());
13807 return manage(res);
13808}
13809
13811{
13812 auto res = isl_multi_union_pw_aff_get_range_tuple_id(get());
13813 return manage(res);
13814}
13815
13817{
13818 return range_tuple_id();
13819}
13820
13821isl::multi_union_pw_aff multi_union_pw_aff::reset_range_tuple_id() const
13822{
13823 auto res = isl_multi_union_pw_aff_reset_range_tuple_id(copy());
13824 return manage(res);
13825}
13826
13828{
13829 auto res = isl_multi_union_pw_aff_reset_tuple_id(copy(), static_cast<enum isl_dim_type>(type));
13830 return manage(res);
13831}
13832
13834{
13835 auto res = isl_multi_union_pw_aff_scale_multi_val(copy(), mv.release());
13836 return manage(res);
13837}
13838
13840{
13841 auto res = isl_multi_union_pw_aff_scale_val(copy(), v.release());
13842 return manage(res);
13843}
13844
13845isl::multi_union_pw_aff multi_union_pw_aff::scale(long v) const
13846{
13847 return this->scale(isl::val(ctx(), v));
13848}
13849
13850isl::multi_union_pw_aff multi_union_pw_aff::scale_down(isl::multi_val mv) const
13851{
13852 auto res = isl_multi_union_pw_aff_scale_down_multi_val(copy(), mv.release());
13853 return manage(res);
13854}
13855
13856isl::multi_union_pw_aff multi_union_pw_aff::scale_down(isl::val v) const
13857{
13858 auto res = isl_multi_union_pw_aff_scale_down_val(copy(), v.release());
13859 return manage(res);
13860}
13861
13862isl::multi_union_pw_aff multi_union_pw_aff::scale_down(long v) const
13863{
13864 return this->scale_down(isl::val(ctx(), v));
13865}
13866
13867isl::multi_union_pw_aff multi_union_pw_aff::set_at(int pos, isl::union_pw_aff el) const
13868{
13869 auto res = isl_multi_union_pw_aff_set_at(copy(), pos, el.release());
13870 return manage(res);
13871}
13872
13873isl::multi_union_pw_aff multi_union_pw_aff::set_range_tuple(isl::id id) const
13874{
13875 auto res = isl_multi_union_pw_aff_set_range_tuple_id(copy(), id.release());
13876 return manage(res);
13877}
13878
13879isl::multi_union_pw_aff multi_union_pw_aff::set_range_tuple(const std::string &id) const
13880{
13881 return this->set_range_tuple(isl::id(ctx(), id));
13882}
13883
13885{
13886 auto res = isl_multi_union_pw_aff_set_union_pw_aff(copy(), pos, el.release());
13887 return manage(res);
13888}
13889
13890class size multi_union_pw_aff::size() const
13891{
13892 auto res = isl_multi_union_pw_aff_size(get());
13893 return manage(res);
13894}
13895
13897{
13898 auto res = isl_multi_union_pw_aff_get_space(get());
13899 return manage(res);
13900}
13901
13902isl::space multi_union_pw_aff::get_space() const
13903{
13904 return space();
13905}
13906
13907isl::multi_union_pw_aff multi_union_pw_aff::sub(isl::multi_union_pw_aff multi2) const
13908{
13909 auto res = isl_multi_union_pw_aff_sub(copy(), multi2.release());
13910 return manage(res);
13911}
13912
13913isl::multi_union_pw_aff multi_union_pw_aff::union_add(isl::multi_union_pw_aff mupa2) const
13914{
13916 return manage(res);
13917}
13918
13919isl::multi_union_pw_aff multi_union_pw_aff::zero(isl::space space)
13920{
13921 auto res = isl_multi_union_pw_aff_zero(space.release());
13922 return manage(res);
13923}
13924
13925inline std::ostream &operator<<(std::ostream &os, const multi_union_pw_aff &obj)
13926{
13927 char *str = isl_multi_union_pw_aff_to_str(obj.get());
13928 if (!str) {
13929 os.setstate(std::ios_base::badbit);
13930 return os;
13931 }
13932 os << str;
13933 free(str);
13934 return os;
13935}
13936
13937// implementations for isl::multi_val
13939 return multi_val(ptr);
13940}
13942 ptr = isl_multi_val_copy(ptr);
13943 return multi_val(ptr);
13944}
13945
13947 : ptr(nullptr) {}
13948
13950 : ptr(nullptr)
13951{
13952 ptr = obj.copy();
13953}
13954
13956 : ptr(ptr) {}
13957
13958multi_val::multi_val(isl::space space, isl::val_list list)
13959{
13960 auto res = isl_multi_val_from_val_list(space.release(), list.release());
13961 ptr = res;
13962}
13963
13964multi_val::multi_val(isl::ctx ctx, const std::string &str)
13965{
13966 auto res = isl_multi_val_read_from_str(ctx.release(), str.c_str());
13967 ptr = res;
13968}
13969
13971 std::swap(this->ptr, obj.ptr);
13972 return *this;
13973}
13974
13976 if (ptr)
13977 isl_multi_val_free(ptr);
13978}
13979
13981 return isl_multi_val_copy(ptr);
13982}
13983
13985 return ptr;
13986}
13987
13989 isl_multi_val *tmp = ptr;
13990 ptr = nullptr;
13991 return tmp;
13992}
13993
13994bool multi_val::is_null() const {
13995 return ptr == nullptr;
13996}
13997
13998isl::ctx multi_val::ctx() const {
13999 return isl::ctx(isl_multi_val_get_ctx(ptr));
14000}
14001
14002isl::multi_val multi_val::add(isl::multi_val multi2) const
14003{
14004 auto res = isl_multi_val_add(copy(), multi2.release());
14005 return manage(res);
14006}
14007
14008isl::multi_val multi_val::add(isl::val v) const
14009{
14010 auto res = isl_multi_val_add_val(copy(), v.release());
14011 return manage(res);
14012}
14013
14014isl::multi_val multi_val::add(long v) const
14015{
14016 return this->add(isl::val(ctx(), v));
14017}
14018
14019isl::val multi_val::at(int pos) const
14020{
14021 auto res = isl_multi_val_get_at(get(), pos);
14022 return manage(res);
14023}
14024
14025isl::val multi_val::get_at(int pos) const
14026{
14027 return at(pos);
14028}
14029
14031{
14032 auto res = isl_multi_val_dim(get(), static_cast<enum isl_dim_type>(type));
14033 return manage(res);
14034}
14035
14037{
14038 auto res = isl_multi_val_flat_range_product(copy(), multi2.release());
14039 return manage(res);
14040}
14041
14042boolean multi_val::has_range_tuple_id() const
14043{
14044 auto res = isl_multi_val_has_range_tuple_id(get());
14045 return manage(res);
14046}
14047
14048boolean multi_val::involves_nan() const
14049{
14050 auto res = isl_multi_val_involves_nan(get());
14051 return manage(res);
14052}
14053
14054isl::val_list multi_val::list() const
14055{
14056 auto res = isl_multi_val_get_list(get());
14057 return manage(res);
14058}
14059
14060isl::val_list multi_val::get_list() const
14061{
14062 return list();
14063}
14064
14065isl::multi_val multi_val::max(isl::multi_val multi2) const
14066{
14067 auto res = isl_multi_val_max(copy(), multi2.release());
14068 return manage(res);
14069}
14070
14071isl::multi_val multi_val::min(isl::multi_val multi2) const
14072{
14073 auto res = isl_multi_val_min(copy(), multi2.release());
14074 return manage(res);
14075}
14076
14077isl::multi_val multi_val::neg() const
14078{
14079 auto res = isl_multi_val_neg(copy());
14080 return manage(res);
14081}
14082
14083boolean multi_val::plain_is_equal(const isl::multi_val &multi2) const
14084{
14085 auto res = isl_multi_val_plain_is_equal(get(), multi2.get());
14086 return manage(res);
14087}
14088
14089isl::multi_val multi_val::product(isl::multi_val multi2) const
14090{
14091 auto res = isl_multi_val_product(copy(), multi2.release());
14092 return manage(res);
14093}
14094
14095isl::multi_val multi_val::range_product(isl::multi_val multi2) const
14096{
14097 auto res = isl_multi_val_range_product(copy(), multi2.release());
14098 return manage(res);
14099}
14100
14101isl::id multi_val::range_tuple_id() const
14102{
14103 auto res = isl_multi_val_get_range_tuple_id(get());
14104 return manage(res);
14105}
14106
14107isl::id multi_val::get_range_tuple_id() const
14108{
14109 return range_tuple_id();
14110}
14111
14112isl::multi_val multi_val::reset_range_tuple_id() const
14113{
14114 auto res = isl_multi_val_reset_range_tuple_id(copy());
14115 return manage(res);
14116}
14117
14119{
14120 auto res = isl_multi_val_reset_tuple_id(copy(), static_cast<enum isl_dim_type>(type));
14121 return manage(res);
14122}
14123
14125{
14126 auto res = isl_multi_val_scale_multi_val(copy(), mv.release());
14127 return manage(res);
14128}
14129
14131{
14132 auto res = isl_multi_val_scale_val(copy(), v.release());
14133 return manage(res);
14134}
14135
14136isl::multi_val multi_val::scale(long v) const
14137{
14138 return this->scale(isl::val(ctx(), v));
14139}
14140
14141isl::multi_val multi_val::scale_down(isl::multi_val mv) const
14142{
14143 auto res = isl_multi_val_scale_down_multi_val(copy(), mv.release());
14144 return manage(res);
14145}
14146
14147isl::multi_val multi_val::scale_down(isl::val v) const
14148{
14149 auto res = isl_multi_val_scale_down_val(copy(), v.release());
14150 return manage(res);
14151}
14152
14153isl::multi_val multi_val::scale_down(long v) const
14154{
14155 return this->scale_down(isl::val(ctx(), v));
14156}
14157
14158isl::multi_val multi_val::set_at(int pos, isl::val el) const
14159{
14160 auto res = isl_multi_val_set_at(copy(), pos, el.release());
14161 return manage(res);
14162}
14163
14164isl::multi_val multi_val::set_at(int pos, long el) const
14165{
14166 return this->set_at(pos, isl::val(ctx(), el));
14167}
14168
14169isl::multi_val multi_val::set_range_tuple(isl::id id) const
14170{
14171 auto res = isl_multi_val_set_range_tuple_id(copy(), id.release());
14172 return manage(res);
14173}
14174
14175isl::multi_val multi_val::set_range_tuple(const std::string &id) const
14176{
14177 return this->set_range_tuple(isl::id(ctx(), id));
14178}
14179
14181{
14182 auto res = isl_multi_val_set_val(copy(), pos, el.release());
14183 return manage(res);
14184}
14185
14187{
14188 return this->set_val(pos, isl::val(ctx(), el));
14189}
14190
14191class size multi_val::size() const
14192{
14193 auto res = isl_multi_val_size(get());
14194 return manage(res);
14195}
14196
14198{
14199 auto res = isl_multi_val_get_space(get());
14200 return manage(res);
14201}
14202
14203isl::space multi_val::get_space() const
14204{
14205 return space();
14206}
14207
14208isl::multi_val multi_val::sub(isl::multi_val multi2) const
14209{
14210 auto res = isl_multi_val_sub(copy(), multi2.release());
14211 return manage(res);
14212}
14213
14214isl::multi_val multi_val::zero(isl::space space)
14215{
14216 auto res = isl_multi_val_zero(space.release());
14217 return manage(res);
14218}
14219
14220inline std::ostream &operator<<(std::ostream &os, const multi_val &obj)
14221{
14222 char *str = isl_multi_val_to_str(obj.get());
14223 if (!str) {
14224 os.setstate(std::ios_base::badbit);
14225 return os;
14226 }
14227 os << str;
14228 free(str);
14229 return os;
14230}
14231
14232// implementations for isl::point
14234 return point(ptr);
14235}
14237 ptr = isl_point_copy(ptr);
14238 return point(ptr);
14239}
14240
14242 : ptr(nullptr) {}
14243
14244point::point(const point &obj)
14245 : ptr(nullptr)
14246{
14247 ptr = obj.copy();
14248}
14249
14251 : ptr(ptr) {}
14252
14254{
14255 auto res = isl_point_zero(space.release());
14256 ptr = res;
14257}
14258
14260 std::swap(this->ptr, obj.ptr);
14261 return *this;
14262}
14263
14264point::~point() {
14265 if (ptr)
14267}
14268
14269__isl_give isl_point *point::copy() const & {
14270 return isl_point_copy(ptr);
14271}
14272
14274 return ptr;
14275}
14276
14278 isl_point *tmp = ptr;
14279 ptr = nullptr;
14280 return tmp;
14281}
14282
14283bool point::is_null() const {
14284 return ptr == nullptr;
14285}
14286
14287isl::ctx point::ctx() const {
14288 return isl::ctx(isl_point_get_ctx(ptr));
14289}
14290
14292{
14293 return isl::basic_set(*this).add_constraint(constraint);
14294}
14295
14297{
14298 return isl::basic_set(*this).add_dims(type, n);
14299}
14300
14302{
14303 return isl::basic_set(*this).affine_hull();
14304}
14305
14307{
14308 return isl::basic_set(*this).align_params(model);
14309}
14310
14312{
14313 return isl::basic_set(*this).apply(bmap);
14314}
14315
14316isl::set point::apply(const isl::map &map) const
14317{
14318 return isl::basic_set(*this).apply(map);
14319}
14320
14321isl::union_set point::apply(const isl::union_map &umap) const
14322{
14323 return isl::basic_set(*this).apply(umap);
14324}
14325
14326isl::pw_multi_aff point::as_pw_multi_aff() const
14327{
14328 return isl::basic_set(*this).as_pw_multi_aff();
14329}
14330
14331isl::set point::as_set() const
14332{
14333 return isl::basic_set(*this).as_set();
14334}
14335
14337{
14338 return isl::basic_set(*this).basic_set_list();
14339}
14340
14342{
14343 return isl::basic_set(*this).bind(tuple);
14344}
14345
14347{
14348 return isl::basic_set(*this).coalesce();
14349}
14350
14352{
14353 return isl::basic_set(*this).complement();
14354}
14355
14356isl::union_set point::compute_divs() const
14357{
14358 return isl::basic_set(*this).compute_divs();
14359}
14360
14361boolean point::contains(const isl::space &space) const
14362{
14363 return isl::basic_set(*this).contains(space);
14364}
14365
14367{
14368 return isl::basic_set(*this).convex_hull();
14369}
14370
14372{
14373 auto res = isl_point_get_coordinate_val(get(), static_cast<enum isl_dim_type>(type), pos);
14374 return manage(res);
14375}
14376
14378{
14379 return coordinate_val(type, pos);
14380}
14381
14383{
14384 return isl::basic_set(*this).detect_equalities();
14385}
14386
14388{
14389 return isl::basic_set(*this).dim(type);
14390}
14391
14393{
14394 return isl::basic_set(*this).dim_has_any_lower_bound(type, pos);
14395}
14396
14398{
14399 return isl::basic_set(*this).dim_id(type, pos);
14400}
14401
14403{
14404 return isl::basic_set(*this).dim_max(pos);
14405}
14406
14408{
14409 return isl::basic_set(*this).dim_max_val(pos);
14410}
14411
14413{
14414 return isl::basic_set(*this).dim_min(pos);
14415}
14416
14418{
14419 return isl::basic_set(*this).dim_min_val(pos);
14420}
14421
14422std::string point::dim_name(isl::dim type, unsigned int pos) const
14423{
14424 return isl::basic_set(*this).dim_name(type, pos);
14425}
14426
14428{
14429 return isl::basic_set(*this).div(pos);
14430}
14431
14432isl::set point::drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const
14433{
14434 return isl::basic_set(*this).drop_constraints_involving_dims(type, first, n);
14435}
14436
14437isl::set point::eliminate(isl::dim type, unsigned int first, unsigned int n) const
14438{
14439 return isl::basic_set(*this).eliminate(type, first, n);
14440}
14441
14442boolean point::every_set(const std::function<boolean(isl::set)> &test) const
14443{
14444 return isl::basic_set(*this).every_set(test);
14445}
14446
14448{
14449 return isl::basic_set(*this).extract_set(space);
14450}
14451
14453{
14454 return isl::basic_set(*this).find_dim_by_id(type, id);
14455}
14456
14457int point::find_dim_by_id(isl::dim type, const std::string &id) const
14458{
14459 return this->find_dim_by_id(type, isl::id(ctx(), id));
14460}
14461
14462isl::basic_set point::fix_si(isl::dim type, unsigned int pos, int value) const
14463{
14464 return isl::basic_set(*this).fix_si(type, pos, value);
14465}
14466
14468{
14469 return isl::basic_set(*this).fix_val(type, pos, v);
14470}
14471
14472isl::basic_set point::fix_val(isl::dim type, unsigned int pos, long v) const
14473{
14474 return this->fix_val(type, pos, isl::val(ctx(), v));
14475}
14476
14478{
14479 return isl::basic_set(*this).flatten();
14480}
14481
14483{
14484 return isl::basic_set(*this).foreach_basic_set(fn);
14485}
14486
14487stat point::foreach_point(const std::function<stat(isl::point)> &fn) const
14488{
14489 return isl::basic_set(*this).foreach_point(fn);
14490}
14491
14492stat point::foreach_set(const std::function<stat(isl::set)> &fn) const
14493{
14494 return isl::basic_set(*this).foreach_set(fn);
14495}
14496
14498{
14499 return isl::basic_set(*this).gist(context);
14500}
14501
14503{
14504 return isl::basic_set(*this).gist(context);
14505}
14506
14507isl::union_set point::gist(const isl::union_set &context) const
14508{
14509 return isl::basic_set(*this).gist(context);
14510}
14511
14513{
14514 return isl::basic_set(*this).gist_params(context);
14515}
14516
14518{
14519 return isl::basic_set(*this).has_equal_space(set2);
14520}
14521
14523{
14524 return isl::basic_set(*this).identity();
14525}
14526
14528{
14529 return isl::basic_set(*this).identity_union_pw_multi_aff();
14530}
14531
14533{
14534 return isl::basic_set(*this).indicator_function();
14535}
14536
14537isl::set point::insert_dims(isl::dim type, unsigned int pos, unsigned int n) const
14538{
14539 return isl::basic_set(*this).insert_dims(type, pos, n);
14540}
14541
14543{
14544 return isl::basic_set(*this).insert_domain(domain);
14545}
14546
14548{
14549 return isl::basic_set(*this).intersect(bset2);
14550}
14551
14553{
14554 return isl::basic_set(*this).intersect(set2);
14555}
14556
14557isl::union_set point::intersect(const isl::union_set &uset2) const
14558{
14559 return isl::basic_set(*this).intersect(uset2);
14560}
14561
14562isl::basic_set point::intersect_params(const isl::basic_set &bset2) const
14563{
14564 return isl::basic_set(*this).intersect_params(bset2);
14565}
14566
14568{
14569 return isl::basic_set(*this).intersect_params(params);
14570}
14571
14572boolean point::involves_dims(isl::dim type, unsigned int first, unsigned int n) const
14573{
14574 return isl::basic_set(*this).involves_dims(type, first, n);
14575}
14576
14577boolean point::involves_locals() const
14578{
14579 return isl::basic_set(*this).involves_locals();
14580}
14581
14582boolean point::is_bounded() const
14583{
14584 return isl::basic_set(*this).is_bounded();
14585}
14586
14587boolean point::is_disjoint(const isl::set &set2) const
14588{
14589 return isl::basic_set(*this).is_disjoint(set2);
14590}
14591
14592boolean point::is_disjoint(const isl::union_set &uset2) const
14593{
14594 return isl::basic_set(*this).is_disjoint(uset2);
14595}
14596
14597boolean point::is_empty() const
14598{
14599 return isl::basic_set(*this).is_empty();
14600}
14601
14602boolean point::is_equal(const isl::basic_set &bset2) const
14603{
14604 return isl::basic_set(*this).is_equal(bset2);
14605}
14606
14607boolean point::is_equal(const isl::set &set2) const
14608{
14609 return isl::basic_set(*this).is_equal(set2);
14610}
14611
14612boolean point::is_equal(const isl::union_set &uset2) const
14613{
14614 return isl::basic_set(*this).is_equal(uset2);
14615}
14616
14617boolean point::is_params() const
14618{
14619 return isl::basic_set(*this).is_params();
14620}
14621
14622boolean point::is_singleton() const
14623{
14624 return isl::basic_set(*this).is_singleton();
14625}
14626
14627boolean point::is_strict_subset(const isl::set &set2) const
14628{
14629 return isl::basic_set(*this).is_strict_subset(set2);
14630}
14631
14632boolean point::is_strict_subset(const isl::union_set &uset2) const
14633{
14634 return isl::basic_set(*this).is_strict_subset(uset2);
14635}
14636
14637boolean point::is_subset(const isl::basic_set &bset2) const
14638{
14639 return isl::basic_set(*this).is_subset(bset2);
14640}
14641
14642boolean point::is_subset(const isl::set &set2) const
14643{
14644 return isl::basic_set(*this).is_subset(set2);
14645}
14646
14647boolean point::is_subset(const isl::union_set &uset2) const
14648{
14649 return isl::basic_set(*this).is_subset(uset2);
14650}
14651
14652boolean point::is_wrapping() const
14653{
14654 return isl::basic_set(*this).is_wrapping();
14655}
14656
14657boolean point::isa_set() const
14658{
14659 return isl::basic_set(*this).isa_set();
14660}
14661
14662isl::set point::lexmax() const
14663{
14664 return isl::basic_set(*this).lexmax();
14665}
14666
14667isl::pw_multi_aff point::lexmax_pw_multi_aff() const
14668{
14669 return isl::basic_set(*this).lexmax_pw_multi_aff();
14670}
14671
14672isl::set point::lexmin() const
14673{
14674 return isl::basic_set(*this).lexmin();
14675}
14676
14677isl::pw_multi_aff point::lexmin_pw_multi_aff() const
14678{
14679 return isl::basic_set(*this).lexmin_pw_multi_aff();
14680}
14681
14682isl::set point::lower_bound(const isl::multi_pw_aff &lower) const
14683{
14684 return isl::basic_set(*this).lower_bound(lower);
14685}
14686
14687isl::set point::lower_bound(const isl::multi_val &lower) const
14688{
14689 return isl::basic_set(*this).lower_bound(lower);
14690}
14691
14692isl::set point::lower_bound_si(isl::dim type, unsigned int pos, int value) const
14693{
14694 return isl::basic_set(*this).lower_bound_si(type, pos, value);
14695}
14696
14697isl::set point::lower_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const
14698{
14699 return isl::basic_set(*this).lower_bound_val(type, pos, value);
14700}
14701
14702isl::set point::lower_bound_val(isl::dim type, unsigned int pos, long value) const
14703{
14704 return this->lower_bound_val(type, pos, isl::val(ctx(), value));
14705}
14706
14708{
14709 return isl::basic_set(*this).max_multi_pw_aff();
14710}
14711
14712isl::val point::max_val(const isl::aff &obj) const
14713{
14714 return isl::basic_set(*this).max_val(obj);
14715}
14716
14717isl::multi_pw_aff point::min_multi_pw_aff() const
14718{
14719 return isl::basic_set(*this).min_multi_pw_aff();
14720}
14721
14722isl::val point::min_val(const isl::aff &obj) const
14723{
14724 return isl::basic_set(*this).min_val(obj);
14725}
14726
14727isl::multi_val point::multi_val() const
14728{
14730 return manage(res);
14731}
14732
14733isl::multi_val point::get_multi_val() const
14734{
14735 return multi_val();
14736}
14737
14738class size point::n_basic_set() const
14739{
14740 return isl::basic_set(*this).n_basic_set();
14741}
14742
14743isl::basic_set point::params() const
14744{
14745 return isl::basic_set(*this).params();
14746}
14747
14749{
14750 return isl::basic_set(*this).plain_get_val_if_fixed(type, pos);
14751}
14752
14754{
14756}
14757
14759{
14760 return isl::basic_set(*this).polyhedral_hull();
14761}
14762
14763isl::set point::preimage(const isl::multi_aff &ma) const
14764{
14765 return isl::basic_set(*this).preimage(ma);
14766}
14767
14768isl::set point::preimage(const isl::multi_pw_aff &mpa) const
14769{
14770 return isl::basic_set(*this).preimage(mpa);
14771}
14772
14773isl::set point::preimage(const isl::pw_multi_aff &pma) const
14774{
14775 return isl::basic_set(*this).preimage(pma);
14776}
14777
14778isl::union_set point::preimage(const isl::union_pw_multi_aff &upma) const
14779{
14780 return isl::basic_set(*this).preimage(upma);
14781}
14782
14784{
14785 return isl::basic_set(*this).product(set2);
14786}
14787
14788isl::basic_set point::project_out(isl::dim type, unsigned int first, unsigned int n) const
14789{
14790 return isl::basic_set(*this).project_out(type, first, n);
14791}
14792
14794{
14795 return isl::basic_set(*this).project_out_all_params();
14796}
14797
14799{
14800 return isl::basic_set(*this).project_out_param(id);
14801}
14802
14803isl::set point::project_out_param(const std::string &id) const
14804{
14805 return this->project_out_param(isl::id(ctx(), id));
14806}
14807
14808isl::set point::project_out_param(const isl::id_list &list) const
14809{
14810 return isl::basic_set(*this).project_out_param(list);
14811}
14812
14813isl::pw_multi_aff point::pw_multi_aff_on_domain(const isl::multi_val &mv) const
14814{
14815 return isl::basic_set(*this).pw_multi_aff_on_domain(mv);
14816}
14817
14818isl::set point::remove_dims(isl::dim type, unsigned int first, unsigned int n) const
14819{
14820 return isl::basic_set(*this).remove_dims(type, first, n);
14821}
14822
14824{
14825 return isl::basic_set(*this).remove_divs();
14826}
14827
14829{
14830 return isl::basic_set(*this).remove_redundancies();
14831}
14832
14834{
14835 return isl::basic_set(*this).reset_tuple_id();
14836}
14837
14839{
14840 return isl::basic_set(*this).sample();
14841}
14842
14844{
14845 return isl::basic_set(*this).sample_point();
14846}
14847
14848isl::set point::set_dim_id(isl::dim type, unsigned int pos, const isl::id &id) const
14849{
14850 return isl::basic_set(*this).set_dim_id(type, pos, id);
14851}
14852
14853isl::set point::set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const
14854{
14855 return this->set_dim_id(type, pos, isl::id(ctx(), id));
14856}
14857
14859{
14860 return isl::basic_set(*this).set_list();
14861}
14862
14864{
14865 return isl::basic_set(*this).set_tuple_id(id);
14866}
14867
14868isl::set point::set_tuple_id(const std::string &id) const
14869{
14870 return this->set_tuple_id(isl::id(ctx(), id));
14871}
14872
14874{
14875 return isl::basic_set(*this).simple_fixed_box_hull();
14876}
14877
14879{
14880 return isl::basic_set(*this).simple_hull();
14881}
14882
14884{
14885 return isl::basic_set(*this).space();
14886}
14887
14888isl::val point::stride(int pos) const
14889{
14890 return isl::basic_set(*this).stride(pos);
14891}
14892
14894{
14895 return isl::basic_set(*this).subtract(set2);
14896}
14897
14898isl::union_set point::subtract(const isl::union_set &uset2) const
14899{
14900 return isl::basic_set(*this).subtract(uset2);
14901}
14902
14903isl::basic_set_list point::to_list() const
14904{
14905 return isl::basic_set(*this).to_list();
14906}
14907
14908isl::set point::to_set() const
14909{
14910 auto res = isl_point_to_set(copy());
14911 return manage(res);
14912}
14913
14914isl::union_set point::to_union_set() const
14915{
14916 return isl::basic_set(*this).to_union_set();
14917}
14918
14919isl::map point::translation() const
14920{
14921 return isl::basic_set(*this).translation();
14922}
14923
14924class size point::tuple_dim() const
14925{
14926 return isl::basic_set(*this).tuple_dim();
14927}
14928
14930{
14931 return isl::basic_set(*this).tuple_id();
14932}
14933
14934std::string point::tuple_name() const
14935{
14936 return isl::basic_set(*this).tuple_name();
14937}
14938
14940{
14941 return isl::basic_set(*this).unbind_params(tuple);
14942}
14943
14945{
14947}
14948
14949isl::set point::unite(const isl::basic_set &bset2) const
14950{
14951 return isl::basic_set(*this).unite(bset2);
14952}
14953
14954isl::set point::unite(const isl::set &set2) const
14955{
14956 return isl::basic_set(*this).unite(set2);
14957}
14958
14959isl::union_set point::unite(const isl::union_set &uset2) const
14960{
14961 return isl::basic_set(*this).unite(uset2);
14962}
14963
14964isl::basic_set point::unshifted_simple_hull() const
14965{
14966 return isl::basic_set(*this).unshifted_simple_hull();
14967}
14968
14969isl::map point::unwrap() const
14970{
14971 return isl::basic_set(*this).unwrap();
14972}
14973
14974isl::set point::upper_bound(const isl::multi_pw_aff &upper) const
14975{
14976 return isl::basic_set(*this).upper_bound(upper);
14977}
14978
14979isl::set point::upper_bound(const isl::multi_val &upper) const
14980{
14981 return isl::basic_set(*this).upper_bound(upper);
14982}
14983
14984isl::set point::upper_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const
14985{
14986 return isl::basic_set(*this).upper_bound_val(type, pos, value);
14987}
14988
14989isl::set point::upper_bound_val(isl::dim type, unsigned int pos, long value) const
14990{
14991 return this->upper_bound_val(type, pos, isl::val(ctx(), value));
14992}
14993
14994inline std::ostream &operator<<(std::ostream &os, const point &obj)
14995{
14996 char *str = isl_point_to_str(obj.get());
14997 if (!str) {
14998 os.setstate(std::ios_base::badbit);
14999 return os;
15000 }
15001 os << str;
15002 free(str);
15003 return os;
15004}
15005
15006// implementations for isl::pw_aff
15008 return pw_aff(ptr);
15009}
15011 ptr = isl_pw_aff_copy(ptr);
15012 return pw_aff(ptr);
15013}
15014
15016 : ptr(nullptr) {}
15017
15019 : ptr(nullptr)
15020{
15021 ptr = obj.copy();
15022}
15023
15025 : ptr(ptr) {}
15026
15027pw_aff::pw_aff(isl::aff aff)
15028{
15029 auto res = isl_pw_aff_from_aff(aff.release());
15030 ptr = res;
15031}
15032
15033pw_aff::pw_aff(isl::ctx ctx, const std::string &str)
15034{
15035 auto res = isl_pw_aff_read_from_str(ctx.release(), str.c_str());
15036 ptr = res;
15037}
15038
15040{
15041 auto res = isl_pw_aff_val_on_domain(domain.release(), v.release());
15042 ptr = res;
15043}
15044
15046{
15048 ptr = res;
15049}
15050
15052 std::swap(this->ptr, obj.ptr);
15053 return *this;
15054}
15055
15057 if (ptr)
15059}
15060
15062 return isl_pw_aff_copy(ptr);
15063}
15064
15066 return ptr;
15067}
15068
15070 isl_pw_aff *tmp = ptr;
15071 ptr = nullptr;
15072 return tmp;
15073}
15074
15075bool pw_aff::is_null() const {
15076 return ptr == nullptr;
15077}
15078
15079isl::ctx pw_aff::ctx() const {
15080 return isl::ctx(isl_pw_aff_get_ctx(ptr));
15081}
15082
15083isl::multi_pw_aff pw_aff::add(const isl::multi_pw_aff &multi2) const
15084{
15085 return isl::pw_multi_aff(*this).add(multi2);
15086}
15087
15088isl::multi_union_pw_aff pw_aff::add(const isl::multi_union_pw_aff &multi2) const
15089{
15090 return isl::union_pw_aff(*this).add(multi2);
15091}
15092
15093isl::pw_aff pw_aff::add(isl::pw_aff pwaff2) const
15094{
15095 auto res = isl_pw_aff_add(copy(), pwaff2.release());
15096 return manage(res);
15097}
15098
15099isl::pw_multi_aff pw_aff::add(const isl::pw_multi_aff &pma2) const
15100{
15101 return isl::pw_multi_aff(*this).add(pma2);
15102}
15103
15104isl::union_pw_aff pw_aff::add(const isl::union_pw_aff &upa2) const
15105{
15106 return isl::union_pw_aff(*this).add(upa2);
15107}
15108
15109isl::union_pw_multi_aff pw_aff::add(const isl::union_pw_multi_aff &upma2) const
15110{
15111 return isl::union_pw_aff(*this).add(upma2);
15112}
15113
15114isl::pw_aff pw_aff::add(const isl::aff &pwaff2) const
15115{
15116 return this->add(isl::pw_aff(pwaff2));
15117}
15118
15119isl::pw_aff pw_aff::add_constant(isl::val v) const
15120{
15122 return manage(res);
15123}
15124
15125isl::pw_aff pw_aff::add_constant(long v) const
15126{
15127 return this->add_constant(isl::val(ctx(), v));
15128}
15129
15130isl::pw_multi_aff pw_aff::add_constant(const isl::multi_val &mv) const
15131{
15132 return isl::pw_multi_aff(*this).add_constant(mv);
15133}
15134
15136{
15137 auto res = isl_pw_aff_add_dims(copy(), static_cast<enum isl_dim_type>(type), n);
15138 return manage(res);
15139}
15140
15142{
15143 return isl::union_pw_aff(*this).add_pw_multi_aff(pma);
15144}
15145
15147{
15148 return isl::union_pw_aff(*this).apply(upma2);
15149}
15150
15152{
15153 auto res = isl_pw_aff_as_aff(copy());
15154 return manage(res);
15155}
15156
15157isl::map pw_aff::as_map() const
15158{
15159 auto res = isl_pw_aff_as_map(copy());
15160 return manage(res);
15161}
15162
15163isl::multi_aff pw_aff::as_multi_aff() const
15164{
15165 return isl::pw_multi_aff(*this).as_multi_aff();
15166}
15167
15168isl::multi_union_pw_aff pw_aff::as_multi_union_pw_aff() const
15169{
15170 return isl::union_pw_aff(*this).as_multi_union_pw_aff();
15171}
15172
15173isl::pw_multi_aff pw_aff::as_pw_multi_aff() const
15174{
15175 return isl::union_pw_aff(*this).as_pw_multi_aff();
15176}
15177
15179{
15180 return isl::pw_multi_aff(*this).as_set();
15181}
15182
15183isl::union_map pw_aff::as_union_map() const
15184{
15185 return isl::union_pw_aff(*this).as_union_map();
15186}
15187
15188isl::pw_aff pw_aff::at(int pos) const
15189{
15190 return isl::pw_multi_aff(*this).at(pos);
15191}
15192
15193isl::set pw_aff::bind(const isl::multi_id &tuple) const
15194{
15195 return isl::multi_pw_aff(*this).bind(tuple);
15196}
15197
15198isl::set pw_aff::bind(isl::id id) const
15199{
15200 auto res = isl_pw_aff_bind_id(copy(), id.release());
15201 return manage(res);
15202}
15203
15204isl::set pw_aff::bind(const std::string &id) const
15205{
15206 return this->bind(isl::id(ctx(), id));
15207}
15208
15209isl::pw_aff pw_aff::bind_domain(isl::multi_id tuple) const
15210{
15211 auto res = isl_pw_aff_bind_domain(copy(), tuple.release());
15212 return manage(res);
15213}
15214
15215isl::pw_aff pw_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const
15216{
15218 return manage(res);
15219}
15220
15221isl::pw_aff pw_aff::ceil() const
15222{
15223 auto res = isl_pw_aff_ceil(copy());
15224 return manage(res);
15225}
15226
15227isl::pw_aff pw_aff::coalesce() const
15228{
15229 auto res = isl_pw_aff_coalesce(copy());
15230 return manage(res);
15231}
15232
15233isl::pw_aff pw_aff::cond(isl::pw_aff pwaff_true, isl::pw_aff pwaff_false) const
15234{
15235 auto res = isl_pw_aff_cond(copy(), pwaff_true.release(), pwaff_false.release());
15236 return manage(res);
15237}
15238
15240{
15241 return isl::pw_multi_aff(*this).dim(type);
15242}
15243
15245{
15246 auto res = isl_pw_aff_get_dim_id(get(), static_cast<enum isl_dim_type>(type), pos);
15247 return manage(res);
15248}
15249
15251{
15252 return dim_id(type, pos);
15253}
15254
15256{
15257 auto res = isl_pw_aff_div(copy(), pa2.release());
15258 return manage(res);
15259}
15260
15262{
15263 auto res = isl_pw_aff_domain(copy());
15264 return manage(res);
15265}
15266
15268{
15270 return manage(res);
15271}
15272
15274{
15275 return domain_space();
15276}
15277
15278isl::pw_multi_aff pw_aff::drop_dims(isl::dim type, unsigned int first, unsigned int n) const
15279{
15280 return isl::pw_multi_aff(*this).drop_dims(type, first, n);
15281}
15282
15284{
15285 auto res = isl_pw_aff_eq_set(copy(), pwaff2.release());
15286 return manage(res);
15287}
15288
15290{
15291 auto res = isl_pw_aff_eval(copy(), pnt.release());
15292 return manage(res);
15293}
15294
15295isl::pw_multi_aff pw_aff::extract_pw_multi_aff(const isl::space &space) const
15296{
15297 return isl::union_pw_aff(*this).extract_pw_multi_aff(space);
15298}
15299
15300isl::multi_pw_aff pw_aff::flat_range_product(const isl::multi_pw_aff &multi2) const
15301{
15302 return isl::pw_multi_aff(*this).flat_range_product(multi2);
15303}
15304
15305isl::multi_union_pw_aff pw_aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const
15306{
15307 return isl::union_pw_aff(*this).flat_range_product(multi2);
15308}
15309
15310isl::pw_multi_aff pw_aff::flat_range_product(const isl::pw_multi_aff &pma2) const
15311{
15312 return isl::pw_multi_aff(*this).flat_range_product(pma2);
15313}
15314
15315isl::union_pw_multi_aff pw_aff::flat_range_product(const isl::union_pw_multi_aff &upma2) const
15316{
15317 return isl::union_pw_aff(*this).flat_range_product(upma2);
15318}
15319
15320isl::pw_aff pw_aff::floor() const
15321{
15322 auto res = isl_pw_aff_floor(copy());
15323 return manage(res);
15324}
15325
15326stat pw_aff::foreach_piece(const std::function<stat(isl::set, isl::aff)> &fn) const
15327{
15328 struct fn_data {
15329 std::function<stat(isl::set, isl::aff)> func;
15330 } fn_data = { fn };
15331 auto fn_lambda = [](isl_set *arg_0, isl_aff *arg_1, void *arg_2) -> isl_stat {
15332 auto *data = static_cast<struct fn_data *>(arg_2);
15333 auto ret = (data->func)(manage(arg_0), manage(arg_1));
15334 return ret.release();
15335 };
15336 auto res = isl_pw_aff_foreach_piece(get(), fn_lambda, &fn_data);
15337 return manage(res);
15338}
15339
15341{
15342 return isl::pw_multi_aff(*this).foreach_piece(fn);
15343}
15344
15345stat pw_aff::foreach_pw_aff(const std::function<stat(isl::pw_aff)> &fn) const
15346{
15347 return isl::union_pw_aff(*this).foreach_pw_aff(fn);
15348}
15349
15351{
15352 auto res = isl_pw_aff_ge_set(copy(), pwaff2.release());
15353 return manage(res);
15354}
15355
15357{
15358 auto res = isl_pw_aff_gist(copy(), context.release());
15359 return manage(res);
15360}
15361
15362isl::union_pw_aff pw_aff::gist(const isl::union_set &context) const
15363{
15364 return isl::union_pw_aff(*this).gist(context);
15365}
15366
15367isl::pw_aff pw_aff::gist(const isl::basic_set &context) const
15368{
15369 return this->gist(isl::set(context));
15370}
15371
15372isl::pw_aff pw_aff::gist(const isl::point &context) const
15373{
15374 return this->gist(isl::set(context));
15375}
15376
15377isl::set pw_aff::gt_set(isl::pw_aff pwaff2) const
15378{
15379 auto res = isl_pw_aff_gt_set(copy(), pwaff2.release());
15380 return manage(res);
15381}
15382
15383boolean pw_aff::has_range_tuple_id() const
15384{
15385 return isl::pw_multi_aff(*this).has_range_tuple_id();
15386}
15387
15388isl::multi_pw_aff pw_aff::identity() const
15389{
15390 return isl::pw_multi_aff(*this).identity();
15391}
15392
15393isl::pw_aff pw_aff::insert_domain(isl::space domain) const
15394{
15395 auto res = isl_pw_aff_insert_domain(copy(), domain.release());
15396 return manage(res);
15397}
15398
15399isl::pw_aff pw_aff::intersect_domain(isl::set set) const
15400{
15401 auto res = isl_pw_aff_intersect_domain(copy(), set.release());
15402 return manage(res);
15403}
15404
15405isl::union_pw_aff pw_aff::intersect_domain(const isl::space &space) const
15406{
15407 return isl::union_pw_aff(*this).intersect_domain(space);
15408}
15409
15410isl::union_pw_aff pw_aff::intersect_domain(const isl::union_set &uset) const
15411{
15412 return isl::union_pw_aff(*this).intersect_domain(uset);
15413}
15414
15415isl::pw_aff pw_aff::intersect_domain(const isl::basic_set &set) const
15416{
15417 return this->intersect_domain(isl::set(set));
15418}
15419
15420isl::pw_aff pw_aff::intersect_domain(const isl::point &set) const
15421{
15422 return this->intersect_domain(isl::set(set));
15423}
15424
15425isl::union_pw_aff pw_aff::intersect_domain_wrapped_domain(const isl::union_set &uset) const
15426{
15427 return isl::union_pw_aff(*this).intersect_domain_wrapped_domain(uset);
15428}
15429
15430isl::union_pw_aff pw_aff::intersect_domain_wrapped_range(const isl::union_set &uset) const
15431{
15432 return isl::union_pw_aff(*this).intersect_domain_wrapped_range(uset);
15433}
15434
15435isl::pw_aff pw_aff::intersect_params(isl::set set) const
15436{
15437 auto res = isl_pw_aff_intersect_params(copy(), set.release());
15438 return manage(res);
15439}
15440
15441boolean pw_aff::involves_locals() const
15442{
15443 return isl::pw_multi_aff(*this).involves_locals();
15444}
15445
15446boolean pw_aff::involves_nan() const
15447{
15448 return isl::multi_pw_aff(*this).involves_nan();
15449}
15450
15451boolean pw_aff::involves_param(const isl::id &id) const
15452{
15453 return isl::pw_multi_aff(*this).involves_param(id);
15454}
15455
15456boolean pw_aff::involves_param(const std::string &id) const
15457{
15458 return this->involves_param(isl::id(ctx(), id));
15459}
15460
15461boolean pw_aff::involves_param(const isl::id_list &list) const
15462{
15463 return isl::pw_multi_aff(*this).involves_param(list);
15464}
15465
15466boolean pw_aff::is_cst() const
15467{
15468 auto res = isl_pw_aff_is_cst(get());
15469 return manage(res);
15470}
15471
15472boolean pw_aff::is_equal(const isl::pw_aff &pa2) const
15473{
15474 auto res = isl_pw_aff_is_equal(get(), pa2.get());
15475 return manage(res);
15476}
15477
15478boolean pw_aff::isa_aff() const
15479{
15480 auto res = isl_pw_aff_isa_aff(get());
15481 return manage(res);
15482}
15483
15484boolean pw_aff::isa_multi_aff() const
15485{
15486 return isl::pw_multi_aff(*this).isa_multi_aff();
15487}
15488
15489boolean pw_aff::isa_pw_multi_aff() const
15490{
15491 return isl::union_pw_aff(*this).isa_pw_multi_aff();
15492}
15493
15494isl::set pw_aff::le_set(isl::pw_aff pwaff2) const
15495{
15496 auto res = isl_pw_aff_le_set(copy(), pwaff2.release());
15497 return manage(res);
15498}
15499
15500isl::pw_aff_list pw_aff::list() const
15501{
15502 return isl::multi_pw_aff(*this).list();
15503}
15504
15505isl::set pw_aff::lt_set(isl::pw_aff pwaff2) const
15506{
15507 auto res = isl_pw_aff_lt_set(copy(), pwaff2.release());
15508 return manage(res);
15509}
15510
15511isl::multi_pw_aff pw_aff::max(const isl::multi_pw_aff &multi2) const
15512{
15513 return isl::pw_multi_aff(*this).max(multi2);
15514}
15515
15516isl::pw_aff pw_aff::max(isl::pw_aff pwaff2) const
15517{
15518 auto res = isl_pw_aff_max(copy(), pwaff2.release());
15519 return manage(res);
15520}
15521
15522isl::pw_aff pw_aff::max(const isl::aff &pwaff2) const
15523{
15524 return this->max(isl::pw_aff(pwaff2));
15525}
15526
15527isl::multi_val pw_aff::max_multi_val() const
15528{
15529 return isl::pw_multi_aff(*this).max_multi_val();
15530}
15531
15532isl::multi_pw_aff pw_aff::min(const isl::multi_pw_aff &multi2) const
15533{
15534 return isl::pw_multi_aff(*this).min(multi2);
15535}
15536
15537isl::pw_aff pw_aff::min(isl::pw_aff pwaff2) const
15538{
15539 auto res = isl_pw_aff_min(copy(), pwaff2.release());
15540 return manage(res);
15541}
15542
15543isl::pw_aff pw_aff::min(const isl::aff &pwaff2) const
15544{
15545 return this->min(isl::pw_aff(pwaff2));
15546}
15547
15548isl::multi_val pw_aff::min_multi_val() const
15549{
15550 return isl::pw_multi_aff(*this).min_multi_val();
15551}
15552
15553isl::pw_aff pw_aff::mod(isl::val mod) const
15554{
15555 auto res = isl_pw_aff_mod_val(copy(), mod.release());
15556 return manage(res);
15557}
15558
15559isl::pw_aff pw_aff::mod(long mod) const
15560{
15561 return this->mod(isl::val(ctx(), mod));
15562}
15563
15564isl::pw_aff pw_aff::mul(isl::pw_aff pwaff2) const
15565{
15566 auto res = isl_pw_aff_mul(copy(), pwaff2.release());
15567 return manage(res);
15568}
15569
15570class size pw_aff::n_piece() const
15571{
15572 return isl::pw_multi_aff(*this).n_piece();
15573}
15574
15575isl::set pw_aff::ne_set(isl::pw_aff pwaff2) const
15576{
15577 auto res = isl_pw_aff_ne_set(copy(), pwaff2.release());
15578 return manage(res);
15579}
15580
15581isl::pw_aff pw_aff::neg() const
15582{
15583 auto res = isl_pw_aff_neg(copy());
15584 return manage(res);
15585}
15586
15587isl::pw_aff pw_aff::param_on_domain(isl::set domain, isl::id id)
15588{
15589 auto res = isl_pw_aff_param_on_domain_id(domain.release(), id.release());
15590 return manage(res);
15591}
15592
15593boolean pw_aff::plain_is_empty() const
15594{
15595 return isl::union_pw_aff(*this).plain_is_empty();
15596}
15597
15598boolean pw_aff::plain_is_equal(const isl::multi_pw_aff &multi2) const
15599{
15600 return isl::pw_multi_aff(*this).plain_is_equal(multi2);
15601}
15602
15603boolean pw_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
15604{
15605 return isl::union_pw_aff(*this).plain_is_equal(multi2);
15606}
15607
15608isl::pw_multi_aff pw_aff::preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const
15609{
15610 return isl::pw_multi_aff(*this).preimage_domain_wrapped_domain(pma2);
15611}
15612
15613isl::union_pw_multi_aff pw_aff::preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const
15614{
15615 return isl::union_pw_aff(*this).preimage_domain_wrapped_domain(upma2);
15616}
15617
15618isl::multi_pw_aff pw_aff::product(const isl::multi_pw_aff &multi2) const
15619{
15620 return isl::pw_multi_aff(*this).product(multi2);
15621}
15622
15623isl::pw_multi_aff pw_aff::product(const isl::pw_multi_aff &pma2) const
15624{
15625 return isl::pw_multi_aff(*this).product(pma2);
15626}
15627
15628isl::pw_aff pw_aff::pullback(isl::multi_aff ma) const
15629{
15630 auto res = isl_pw_aff_pullback_multi_aff(copy(), ma.release());
15631 return manage(res);
15632}
15633
15634isl::pw_aff pw_aff::pullback(isl::multi_pw_aff mpa) const
15635{
15637 return manage(res);
15638}
15639
15640isl::pw_aff pw_aff::pullback(isl::pw_multi_aff pma) const
15641{
15642 auto res = isl_pw_aff_pullback_pw_multi_aff(copy(), pma.release());
15643 return manage(res);
15644}
15645
15646isl::union_pw_aff pw_aff::pullback(const isl::union_pw_multi_aff &upma) const
15647{
15648 return isl::union_pw_aff(*this).pullback(upma);
15649}
15650
15651isl::pw_multi_aff_list pw_aff::pw_multi_aff_list() const
15652{
15653 return isl::union_pw_aff(*this).pw_multi_aff_list();
15654}
15655
15656isl::pw_multi_aff pw_aff::range_factor_domain() const
15657{
15658 return isl::pw_multi_aff(*this).range_factor_domain();
15659}
15660
15661isl::pw_multi_aff pw_aff::range_factor_range() const
15662{
15663 return isl::pw_multi_aff(*this).range_factor_range();
15664}
15665
15666isl::multi_pw_aff pw_aff::range_product(const isl::multi_pw_aff &multi2) const
15667{
15668 return isl::pw_multi_aff(*this).range_product(multi2);
15669}
15670
15671isl::multi_union_pw_aff pw_aff::range_product(const isl::multi_union_pw_aff &multi2) const
15672{
15673 return isl::union_pw_aff(*this).range_product(multi2);
15674}
15675
15676isl::pw_multi_aff pw_aff::range_product(const isl::pw_multi_aff &pma2) const
15677{
15678 return isl::pw_multi_aff(*this).range_product(pma2);
15679}
15680
15681isl::union_pw_multi_aff pw_aff::range_product(const isl::union_pw_multi_aff &upma2) const
15682{
15683 return isl::union_pw_aff(*this).range_product(upma2);
15684}
15685
15686isl::id pw_aff::range_tuple_id() const
15687{
15688 return isl::pw_multi_aff(*this).range_tuple_id();
15689}
15690
15691isl::multi_pw_aff pw_aff::reset_range_tuple_id() const
15692{
15693 return isl::multi_pw_aff(*this).reset_range_tuple_id();
15694}
15695
15697{
15698 return isl::multi_pw_aff(*this).reset_tuple_id(type);
15699}
15700
15702{
15703 return isl::multi_pw_aff(*this).scale(mv);
15704}
15705
15707{
15708 auto res = isl_pw_aff_scale_val(copy(), v.release());
15709 return manage(res);
15710}
15711
15712isl::pw_aff pw_aff::scale(long v) const
15713{
15714 return this->scale(isl::val(ctx(), v));
15715}
15716
15717isl::multi_pw_aff pw_aff::scale_down(const isl::multi_val &mv) const
15718{
15719 return isl::multi_pw_aff(*this).scale_down(mv);
15720}
15721
15722isl::pw_aff pw_aff::scale_down(isl::val f) const
15723{
15724 auto res = isl_pw_aff_scale_down_val(copy(), f.release());
15725 return manage(res);
15726}
15727
15728isl::pw_aff pw_aff::scale_down(long f) const
15729{
15730 return this->scale_down(isl::val(ctx(), f));
15731}
15732
15733isl::multi_pw_aff pw_aff::set_at(int pos, const isl::pw_aff &el) const
15734{
15735 return isl::pw_multi_aff(*this).set_at(pos, el);
15736}
15737
15738isl::multi_union_pw_aff pw_aff::set_at(int pos, const isl::union_pw_aff &el) const
15739{
15740 return isl::union_pw_aff(*this).set_at(pos, el);
15741}
15742
15744{
15745 return isl::pw_multi_aff(*this).set_pw_aff(pos, el);
15746}
15747
15749{
15750 return isl::pw_multi_aff(*this).set_pw_aff(pos, pa);
15751}
15752
15754{
15755 return isl::pw_multi_aff(*this).set_range_tuple(id);
15756}
15757
15758isl::pw_multi_aff pw_aff::set_range_tuple(const std::string &id) const
15759{
15760 return this->set_range_tuple(isl::id(ctx(), id));
15761}
15762
15764{
15765 auto res = isl_pw_aff_set_tuple_id(copy(), static_cast<enum isl_dim_type>(type), id.release());
15766 return manage(res);
15767}
15768
15769isl::pw_aff pw_aff::set_tuple_id(isl::dim type, const std::string &id) const
15770{
15771 return this->set_tuple_id(type, isl::id(ctx(), id));
15772}
15773
15775{
15776 return isl::union_pw_aff(*this).set_union_pw_aff(pos, el);
15777}
15778
15779class size pw_aff::size() const
15780{
15781 return isl::multi_pw_aff(*this).size();
15782}
15783
15785{
15786 auto res = isl_pw_aff_get_space(get());
15787 return manage(res);
15788}
15789
15790isl::space pw_aff::get_space() const
15791{
15792 return space();
15793}
15794
15795isl::multi_pw_aff pw_aff::sub(const isl::multi_pw_aff &multi2) const
15796{
15797 return isl::pw_multi_aff(*this).sub(multi2);
15798}
15799
15800isl::multi_union_pw_aff pw_aff::sub(const isl::multi_union_pw_aff &multi2) const
15801{
15802 return isl::union_pw_aff(*this).sub(multi2);
15803}
15804
15805isl::pw_aff pw_aff::sub(isl::pw_aff pwaff2) const
15806{
15807 auto res = isl_pw_aff_sub(copy(), pwaff2.release());
15808 return manage(res);
15809}
15810
15811isl::pw_multi_aff pw_aff::sub(const isl::pw_multi_aff &pma2) const
15812{
15813 return isl::pw_multi_aff(*this).sub(pma2);
15814}
15815
15816isl::union_pw_aff pw_aff::sub(const isl::union_pw_aff &upa2) const
15817{
15818 return isl::union_pw_aff(*this).sub(upa2);
15819}
15820
15821isl::union_pw_multi_aff pw_aff::sub(const isl::union_pw_multi_aff &upma2) const
15822{
15823 return isl::union_pw_aff(*this).sub(upma2);
15824}
15825
15826isl::pw_aff pw_aff::sub(const isl::aff &pwaff2) const
15827{
15828 return this->sub(isl::pw_aff(pwaff2));
15829}
15830
15831isl::pw_aff pw_aff::subtract_domain(isl::set set) const
15832{
15833 auto res = isl_pw_aff_subtract_domain(copy(), set.release());
15834 return manage(res);
15835}
15836
15837isl::union_pw_aff pw_aff::subtract_domain(const isl::space &space) const
15838{
15839 return isl::union_pw_aff(*this).subtract_domain(space);
15840}
15841
15842isl::union_pw_aff pw_aff::subtract_domain(const isl::union_set &uset) const
15843{
15844 return isl::union_pw_aff(*this).subtract_domain(uset);
15845}
15846
15847isl::pw_aff pw_aff::subtract_domain(const isl::basic_set &set) const
15848{
15849 return this->subtract_domain(isl::set(set));
15850}
15851
15852isl::pw_aff pw_aff::subtract_domain(const isl::point &set) const
15853{
15854 return this->subtract_domain(isl::set(set));
15855}
15856
15857isl::pw_aff pw_aff::tdiv_q(isl::pw_aff pa2) const
15858{
15859 auto res = isl_pw_aff_tdiv_q(copy(), pa2.release());
15860 return manage(res);
15861}
15862
15863isl::pw_aff pw_aff::tdiv_r(isl::pw_aff pa2) const
15864{
15865 auto res = isl_pw_aff_tdiv_r(copy(), pa2.release());
15866 return manage(res);
15867}
15868
15869isl::pw_aff_list pw_aff::to_list() const
15870{
15871 auto res = isl_pw_aff_to_list(copy());
15872 return manage(res);
15873}
15874
15875isl::multi_pw_aff pw_aff::to_multi_pw_aff() const
15876{
15877 return isl::pw_multi_aff(*this).to_multi_pw_aff();
15878}
15879
15880isl::union_pw_aff pw_aff::to_union_pw_aff() const
15881{
15883 return manage(res);
15884}
15885
15886isl::union_pw_multi_aff pw_aff::to_union_pw_multi_aff() const
15887{
15888 return isl::pw_multi_aff(*this).to_union_pw_multi_aff();
15889}
15890
15892{
15893 auto res = isl_pw_aff_get_tuple_id(get(), static_cast<enum isl_dim_type>(type));
15894 return manage(res);
15895}
15896
15898{
15899 return tuple_id(type);
15900}
15901
15903{
15905}
15906
15908{
15909 return isl::pw_multi_aff(*this).union_add(mpa2);
15910}
15911
15912isl::multi_union_pw_aff pw_aff::union_add(const isl::multi_union_pw_aff &mupa2) const
15913{
15914 return isl::union_pw_aff(*this).union_add(mupa2);
15915}
15916
15917isl::pw_aff pw_aff::union_add(isl::pw_aff pwaff2) const
15918{
15919 auto res = isl_pw_aff_union_add(copy(), pwaff2.release());
15920 return manage(res);
15921}
15922
15923isl::pw_multi_aff pw_aff::union_add(const isl::pw_multi_aff &pma2) const
15924{
15925 return isl::pw_multi_aff(*this).union_add(pma2);
15926}
15927
15928isl::union_pw_aff pw_aff::union_add(const isl::union_pw_aff &upa2) const
15929{
15930 return isl::union_pw_aff(*this).union_add(upa2);
15931}
15932
15933isl::union_pw_multi_aff pw_aff::union_add(const isl::union_pw_multi_aff &upma2) const
15934{
15935 return isl::union_pw_aff(*this).union_add(upma2);
15936}
15937
15938isl::pw_aff pw_aff::union_add(const isl::aff &pwaff2) const
15939{
15940 return this->union_add(isl::pw_aff(pwaff2));
15941}
15942
15944{
15945 auto res = isl_pw_aff_var_on_domain(ls.release(), static_cast<enum isl_dim_type>(type), pos);
15946 return manage(res);
15947}
15948
15949inline std::ostream &operator<<(std::ostream &os, const pw_aff &obj)
15950{
15951 char *str = isl_pw_aff_to_str(obj.get());
15952 if (!str) {
15953 os.setstate(std::ios_base::badbit);
15954 return os;
15955 }
15956 os << str;
15957 free(str);
15958 return os;
15959}
15960
15961// implementations for isl::pw_aff_list
15962pw_aff_list manage(__isl_take isl_pw_aff_list *ptr) {
15963 return pw_aff_list(ptr);
15964}
15965pw_aff_list manage_copy(__isl_keep isl_pw_aff_list *ptr) {
15966 ptr = isl_pw_aff_list_copy(ptr);
15967 return pw_aff_list(ptr);
15968}
15969
15971 : ptr(nullptr) {}
15972
15974 : ptr(nullptr)
15975{
15976 ptr = obj.copy();
15977}
15978
15979pw_aff_list::pw_aff_list(__isl_take isl_pw_aff_list *ptr)
15980 : ptr(ptr) {}
15981
15982pw_aff_list::pw_aff_list(isl::ctx ctx, int n)
15983{
15984 auto res = isl_pw_aff_list_alloc(ctx.release(), n);
15985 ptr = res;
15986}
15987
15988pw_aff_list::pw_aff_list(isl::pw_aff el)
15989{
15990 auto res = isl_pw_aff_list_from_pw_aff(el.release());
15991 ptr = res;
15992}
15993
15994pw_aff_list::pw_aff_list(isl::ctx ctx, const std::string &str)
15995{
15996 auto res = isl_pw_aff_list_read_from_str(ctx.release(), str.c_str());
15997 ptr = res;
15998}
15999
16001 std::swap(this->ptr, obj.ptr);
16002 return *this;
16003}
16004
16006 if (ptr)
16007 isl_pw_aff_list_free(ptr);
16008}
16009
16010__isl_give isl_pw_aff_list *pw_aff_list::copy() const & {
16011 return isl_pw_aff_list_copy(ptr);
16012}
16013
16014__isl_keep isl_pw_aff_list *pw_aff_list::get() const {
16015 return ptr;
16016}
16017
16018__isl_give isl_pw_aff_list *pw_aff_list::release() {
16019 isl_pw_aff_list *tmp = ptr;
16020 ptr = nullptr;
16021 return tmp;
16022}
16023
16024bool pw_aff_list::is_null() const {
16025 return ptr == nullptr;
16026}
16027
16028isl::ctx pw_aff_list::ctx() const {
16029 return isl::ctx(isl_pw_aff_list_get_ctx(ptr));
16030}
16031
16032isl::pw_aff_list pw_aff_list::add(isl::pw_aff el) const
16033{
16034 auto res = isl_pw_aff_list_add(copy(), el.release());
16035 return manage(res);
16036}
16037
16038isl::pw_aff pw_aff_list::at(int index) const
16039{
16040 auto res = isl_pw_aff_list_get_at(get(), index);
16041 return manage(res);
16042}
16043
16044isl::pw_aff pw_aff_list::get_at(int index) const
16045{
16046 return at(index);
16047}
16048
16049isl::pw_aff_list pw_aff_list::clear() const
16050{
16051 auto res = isl_pw_aff_list_clear(copy());
16052 return manage(res);
16053}
16054
16055isl::pw_aff_list pw_aff_list::concat(isl::pw_aff_list list2) const
16056{
16057 auto res = isl_pw_aff_list_concat(copy(), list2.release());
16058 return manage(res);
16059}
16060
16061isl::pw_aff_list pw_aff_list::drop(unsigned int first, unsigned int n) const
16062{
16063 auto res = isl_pw_aff_list_drop(copy(), first, n);
16064 return manage(res);
16065}
16066
16067stat pw_aff_list::foreach(const std::function<stat(isl::pw_aff)> &fn) const
16068{
16069 struct fn_data {
16070 std::function<stat(isl::pw_aff)> func;
16071 } fn_data = { fn };
16072 auto fn_lambda = [](isl_pw_aff *arg_0, void *arg_1) -> isl_stat {
16073 auto *data = static_cast<struct fn_data *>(arg_1);
16074 auto ret = (data->func)(manage(arg_0));
16075 return ret.release();
16076 };
16077 auto res = isl_pw_aff_list_foreach(get(), fn_lambda, &fn_data);
16078 return manage(res);
16079}
16080
16082{
16083 auto res = isl_pw_aff_list_insert(copy(), pos, el.release());
16084 return manage(res);
16085}
16086
16087class size pw_aff_list::size() const
16088{
16089 auto res = isl_pw_aff_list_size(get());
16090 return manage(res);
16091}
16092
16093inline std::ostream &operator<<(std::ostream &os, const pw_aff_list &obj)
16094{
16095 char *str = isl_pw_aff_list_to_str(obj.get());
16096 if (!str) {
16097 os.setstate(std::ios_base::badbit);
16098 return os;
16099 }
16100 os << str;
16101 free(str);
16102 return os;
16103}
16104
16105// implementations for isl::pw_multi_aff
16107 return pw_multi_aff(ptr);
16108}
16110 ptr = isl_pw_multi_aff_copy(ptr);
16111 return pw_multi_aff(ptr);
16112}
16113
16115 : ptr(nullptr) {}
16116
16118 : ptr(nullptr)
16119{
16120 ptr = obj.copy();
16121}
16122
16124 : ptr(ptr) {}
16125
16126pw_multi_aff::pw_multi_aff(isl::multi_aff ma)
16127{
16128 auto res = isl_pw_multi_aff_from_multi_aff(ma.release());
16129 ptr = res;
16130}
16131
16132pw_multi_aff::pw_multi_aff(isl::pw_aff pa)
16133{
16134 auto res = isl_pw_multi_aff_from_pw_aff(pa.release());
16135 ptr = res;
16136}
16137
16138pw_multi_aff::pw_multi_aff(isl::ctx ctx, const std::string &str)
16139{
16140 auto res = isl_pw_multi_aff_read_from_str(ctx.release(), str.c_str());
16141 ptr = res;
16142}
16143
16145 std::swap(this->ptr, obj.ptr);
16146 return *this;
16147}
16148
16150 if (ptr)
16152}
16153
16155 return isl_pw_multi_aff_copy(ptr);
16156}
16157
16159 return ptr;
16160}
16161
16163 isl_pw_multi_aff *tmp = ptr;
16164 ptr = nullptr;
16165 return tmp;
16166}
16167
16168bool pw_multi_aff::is_null() const {
16169 return ptr == nullptr;
16170}
16171
16172isl::ctx pw_multi_aff::ctx() const {
16173 return isl::ctx(isl_pw_multi_aff_get_ctx(ptr));
16174}
16175
16176isl::multi_pw_aff pw_multi_aff::add(const isl::multi_pw_aff &multi2) const
16177{
16178 return isl::multi_pw_aff(*this).add(multi2);
16179}
16180
16181isl::multi_union_pw_aff pw_multi_aff::add(const isl::multi_union_pw_aff &multi2) const
16182{
16183 return isl::multi_pw_aff(*this).add(multi2);
16184}
16185
16186isl::pw_multi_aff pw_multi_aff::add(isl::pw_multi_aff pma2) const
16187{
16188 auto res = isl_pw_multi_aff_add(copy(), pma2.release());
16189 return manage(res);
16190}
16191
16192isl::union_pw_multi_aff pw_multi_aff::add(const isl::union_pw_multi_aff &upma2) const
16193{
16194 return isl::union_pw_multi_aff(*this).add(upma2);
16195}
16196
16197isl::pw_multi_aff pw_multi_aff::add(const isl::multi_aff &pma2) const
16198{
16199 return this->add(isl::pw_multi_aff(pma2));
16200}
16201
16202isl::pw_multi_aff pw_multi_aff::add(const isl::pw_aff &pma2) const
16203{
16204 return this->add(isl::pw_multi_aff(pma2));
16205}
16206
16207isl::pw_multi_aff pw_multi_aff::add_constant(isl::multi_val mv) const
16208{
16210 return manage(res);
16211}
16212
16213isl::pw_multi_aff pw_multi_aff::add_constant(isl::val v) const
16214{
16216 return manage(res);
16217}
16218
16219isl::pw_multi_aff pw_multi_aff::add_constant(long v) const
16220{
16221 return this->add_constant(isl::val(ctx(), v));
16222}
16223
16225{
16226 return isl::union_pw_multi_aff(*this).add_pw_multi_aff(pma);
16227}
16228
16230{
16231 return isl::union_pw_multi_aff(*this).apply(upma2);
16232}
16233
16235{
16237 return manage(res);
16238}
16239
16240isl::multi_aff pw_multi_aff::as_multi_aff() const
16241{
16243 return manage(res);
16244}
16245
16246isl::multi_union_pw_aff pw_multi_aff::as_multi_union_pw_aff() const
16247{
16248 return isl::union_pw_multi_aff(*this).as_multi_union_pw_aff();
16249}
16250
16251isl::pw_multi_aff pw_multi_aff::as_pw_multi_aff() const
16252{
16253 return isl::union_pw_multi_aff(*this).as_pw_multi_aff();
16254}
16255
16257{
16259 return manage(res);
16260}
16261
16262isl::union_map pw_multi_aff::as_union_map() const
16263{
16264 return isl::union_pw_multi_aff(*this).as_union_map();
16265}
16266
16267isl::pw_aff pw_multi_aff::at(int pos) const
16268{
16270 return manage(res);
16271}
16272
16273isl::pw_aff pw_multi_aff::get_at(int pos) const
16274{
16275 return at(pos);
16276}
16277
16278isl::set pw_multi_aff::bind(const isl::multi_id &tuple) const
16279{
16280 return isl::multi_pw_aff(*this).bind(tuple);
16281}
16282
16283isl::pw_multi_aff pw_multi_aff::bind_domain(isl::multi_id tuple) const
16284{
16285 auto res = isl_pw_multi_aff_bind_domain(copy(), tuple.release());
16286 return manage(res);
16287}
16288
16289isl::pw_multi_aff pw_multi_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const
16290{
16292 return manage(res);
16293}
16294
16295isl::pw_multi_aff pw_multi_aff::coalesce() const
16296{
16298 return manage(res);
16299}
16300
16302{
16303 auto res = isl_pw_multi_aff_dim(get(), static_cast<enum isl_dim_type>(type));
16304 return manage(res);
16305}
16306
16308{
16310 return manage(res);
16311}
16312
16314{
16316 return manage(res);
16317}
16318
16319isl::pw_multi_aff pw_multi_aff::drop_dims(isl::dim type, unsigned int first, unsigned int n) const
16320{
16321 auto res = isl_pw_multi_aff_drop_dims(copy(), static_cast<enum isl_dim_type>(type), first, n);
16322 return manage(res);
16323}
16324
16326{
16328}
16329
16331{
16332 return isl::multi_pw_aff(*this).flat_range_product(multi2);
16333}
16334
16335isl::multi_union_pw_aff pw_multi_aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const
16336{
16337 return isl::multi_pw_aff(*this).flat_range_product(multi2);
16338}
16339
16340isl::pw_multi_aff pw_multi_aff::flat_range_product(isl::pw_multi_aff pma2) const
16341{
16343 return manage(res);
16344}
16345
16346isl::union_pw_multi_aff pw_multi_aff::flat_range_product(const isl::union_pw_multi_aff &upma2) const
16347{
16348 return isl::union_pw_multi_aff(*this).flat_range_product(upma2);
16349}
16350
16351isl::pw_multi_aff pw_multi_aff::flat_range_product(const isl::multi_aff &pma2) const
16352{
16353 return this->flat_range_product(isl::pw_multi_aff(pma2));
16354}
16355
16356isl::pw_multi_aff pw_multi_aff::flat_range_product(const isl::pw_aff &pma2) const
16357{
16358 return this->flat_range_product(isl::pw_multi_aff(pma2));
16359}
16360
16362{
16363 struct fn_data {
16364 std::function<stat(isl::set, isl::multi_aff)> func;
16365 } fn_data = { fn };
16366 auto fn_lambda = [](isl_set *arg_0, isl_multi_aff *arg_1, void *arg_2) -> isl_stat {
16367 auto *data = static_cast<struct fn_data *>(arg_2);
16368 auto ret = (data->func)(manage(arg_0), manage(arg_1));
16369 return ret.release();
16370 };
16371 auto res = isl_pw_multi_aff_foreach_piece(get(), fn_lambda, &fn_data);
16372 return manage(res);
16373}
16374
16380
16382{
16384 return manage(res);
16385}
16386
16388{
16389 return isl::union_pw_multi_aff(*this).gist(context);
16390}
16391
16392isl::pw_multi_aff pw_multi_aff::gist(const isl::basic_set &set) const
16393{
16394 return this->gist(isl::set(set));
16395}
16396
16397isl::pw_multi_aff pw_multi_aff::gist(const isl::point &set) const
16398{
16399 return this->gist(isl::set(set));
16400}
16401
16403{
16405 return manage(res);
16406}
16407
16408isl::multi_pw_aff pw_multi_aff::identity() const
16409{
16410 return isl::multi_pw_aff(*this).identity();
16411}
16412
16413isl::pw_multi_aff pw_multi_aff::identity_on_domain(isl::space space)
16414{
16416 return manage(res);
16417}
16418
16419isl::pw_multi_aff pw_multi_aff::insert_domain(isl::space domain) const
16420{
16421 auto res = isl_pw_multi_aff_insert_domain(copy(), domain.release());
16422 return manage(res);
16423}
16424
16425isl::pw_multi_aff pw_multi_aff::intersect_domain(isl::set set) const
16426{
16427 auto res = isl_pw_multi_aff_intersect_domain(copy(), set.release());
16428 return manage(res);
16429}
16430
16431isl::union_pw_multi_aff pw_multi_aff::intersect_domain(const isl::space &space) const
16432{
16433 return isl::union_pw_multi_aff(*this).intersect_domain(space);
16434}
16435
16436isl::union_pw_multi_aff pw_multi_aff::intersect_domain(const isl::union_set &uset) const
16437{
16438 return isl::union_pw_multi_aff(*this).intersect_domain(uset);
16439}
16440
16441isl::pw_multi_aff pw_multi_aff::intersect_domain(const isl::basic_set &set) const
16442{
16443 return this->intersect_domain(isl::set(set));
16444}
16445
16446isl::pw_multi_aff pw_multi_aff::intersect_domain(const isl::point &set) const
16447{
16448 return this->intersect_domain(isl::set(set));
16449}
16450
16451isl::union_pw_multi_aff pw_multi_aff::intersect_domain_wrapped_domain(const isl::union_set &uset) const
16452{
16453 return isl::union_pw_multi_aff(*this).intersect_domain_wrapped_domain(uset);
16454}
16455
16456isl::union_pw_multi_aff pw_multi_aff::intersect_domain_wrapped_range(const isl::union_set &uset) const
16457{
16458 return isl::union_pw_multi_aff(*this).intersect_domain_wrapped_range(uset);
16459}
16460
16461isl::pw_multi_aff pw_multi_aff::intersect_params(isl::set set) const
16462{
16463 auto res = isl_pw_multi_aff_intersect_params(copy(), set.release());
16464 return manage(res);
16465}
16466
16467boolean pw_multi_aff::involves_locals() const
16468{
16470 return manage(res);
16471}
16472
16473boolean pw_multi_aff::involves_nan() const
16474{
16475 return isl::multi_pw_aff(*this).involves_nan();
16476}
16477
16478boolean pw_multi_aff::involves_param(const isl::id &id) const
16479{
16480 return isl::multi_pw_aff(*this).involves_param(id);
16481}
16482
16483boolean pw_multi_aff::involves_param(const std::string &id) const
16484{
16485 return this->involves_param(isl::id(ctx(), id));
16486}
16487
16488boolean pw_multi_aff::involves_param(const isl::id_list &list) const
16489{
16490 return isl::multi_pw_aff(*this).involves_param(list);
16491}
16492
16493boolean pw_multi_aff::isa_multi_aff() const
16494{
16496 return manage(res);
16497}
16498
16499boolean pw_multi_aff::isa_pw_multi_aff() const
16500{
16501 return isl::union_pw_multi_aff(*this).isa_pw_multi_aff();
16502}
16503
16504isl::pw_aff_list pw_multi_aff::list() const
16505{
16506 return isl::multi_pw_aff(*this).list();
16507}
16508
16509isl::multi_pw_aff pw_multi_aff::max(const isl::multi_pw_aff &multi2) const
16510{
16511 return isl::multi_pw_aff(*this).max(multi2);
16512}
16513
16514isl::multi_val pw_multi_aff::max_multi_val() const
16515{
16517 return manage(res);
16518}
16519
16520isl::multi_pw_aff pw_multi_aff::min(const isl::multi_pw_aff &multi2) const
16521{
16522 return isl::multi_pw_aff(*this).min(multi2);
16523}
16524
16525isl::multi_val pw_multi_aff::min_multi_val() const
16526{
16528 return manage(res);
16529}
16530
16531isl::pw_multi_aff pw_multi_aff::multi_val_on_domain(isl::set domain, isl::multi_val mv)
16532{
16534 return manage(res);
16535}
16536
16537class size pw_multi_aff::n_piece() const
16538{
16540 return manage(res);
16541}
16542
16543isl::multi_pw_aff pw_multi_aff::neg() const
16544{
16545 return isl::multi_pw_aff(*this).neg();
16546}
16547
16548boolean pw_multi_aff::plain_is_empty() const
16549{
16550 return isl::union_pw_multi_aff(*this).plain_is_empty();
16551}
16552
16553boolean pw_multi_aff::plain_is_equal(const isl::multi_pw_aff &multi2) const
16554{
16555 return isl::multi_pw_aff(*this).plain_is_equal(multi2);
16556}
16557
16558boolean pw_multi_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
16559{
16560 return isl::multi_pw_aff(*this).plain_is_equal(multi2);
16561}
16562
16563isl::pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(isl::pw_multi_aff pma2) const
16564{
16566 return manage(res);
16567}
16568
16569isl::union_pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const
16570{
16571 return isl::union_pw_multi_aff(*this).preimage_domain_wrapped_domain(upma2);
16572}
16573
16574isl::pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(const isl::multi_aff &pma2) const
16575{
16576 return this->preimage_domain_wrapped_domain(isl::pw_multi_aff(pma2));
16577}
16578
16579isl::pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(const isl::pw_aff &pma2) const
16580{
16581 return this->preimage_domain_wrapped_domain(isl::pw_multi_aff(pma2));
16582}
16583
16584isl::multi_pw_aff pw_multi_aff::product(const isl::multi_pw_aff &multi2) const
16585{
16586 return isl::multi_pw_aff(*this).product(multi2);
16587}
16588
16589isl::pw_multi_aff pw_multi_aff::product(isl::pw_multi_aff pma2) const
16590{
16591 auto res = isl_pw_multi_aff_product(copy(), pma2.release());
16592 return manage(res);
16593}
16594
16595isl::pw_multi_aff pw_multi_aff::product(const isl::multi_aff &pma2) const
16596{
16597 return this->product(isl::pw_multi_aff(pma2));
16598}
16599
16600isl::pw_multi_aff pw_multi_aff::product(const isl::pw_aff &pma2) const
16601{
16602 return this->product(isl::pw_multi_aff(pma2));
16603}
16604
16606{
16607 auto res = isl_pw_multi_aff_project_out_map(space.release(), static_cast<enum isl_dim_type>(type), first, n);
16608 return manage(res);
16609}
16610
16612{
16613 return isl::multi_pw_aff(*this).pullback(mpa2);
16614}
16615
16617{
16618 auto res = isl_pw_multi_aff_pullback_multi_aff(copy(), ma.release());
16619 return manage(res);
16620}
16621
16622isl::pw_multi_aff pw_multi_aff::pullback(isl::pw_multi_aff pma2) const
16623{
16625 return manage(res);
16626}
16627
16628isl::union_pw_multi_aff pw_multi_aff::pullback(const isl::union_pw_multi_aff &upma2) const
16629{
16630 return isl::union_pw_multi_aff(*this).pullback(upma2);
16631}
16632
16633isl::pw_multi_aff_list pw_multi_aff::pw_multi_aff_list() const
16634{
16635 return isl::union_pw_multi_aff(*this).pw_multi_aff_list();
16636}
16637
16638isl::pw_multi_aff pw_multi_aff::range_factor_domain() const
16639{
16641 return manage(res);
16642}
16643
16644isl::pw_multi_aff pw_multi_aff::range_factor_range() const
16645{
16647 return manage(res);
16648}
16649
16650isl::pw_multi_aff pw_multi_aff::range_map(isl::space space)
16651{
16652 auto res = isl_pw_multi_aff_range_map(space.release());
16653 return manage(res);
16654}
16655
16656isl::multi_pw_aff pw_multi_aff::range_product(const isl::multi_pw_aff &multi2) const
16657{
16658 return isl::multi_pw_aff(*this).range_product(multi2);
16659}
16660
16661isl::multi_union_pw_aff pw_multi_aff::range_product(const isl::multi_union_pw_aff &multi2) const
16662{
16663 return isl::multi_pw_aff(*this).range_product(multi2);
16664}
16665
16666isl::pw_multi_aff pw_multi_aff::range_product(isl::pw_multi_aff pma2) const
16667{
16669 return manage(res);
16670}
16671
16672isl::union_pw_multi_aff pw_multi_aff::range_product(const isl::union_pw_multi_aff &upma2) const
16673{
16674 return isl::union_pw_multi_aff(*this).range_product(upma2);
16675}
16676
16677isl::pw_multi_aff pw_multi_aff::range_product(const isl::multi_aff &pma2) const
16678{
16679 return this->range_product(isl::pw_multi_aff(pma2));
16680}
16681
16682isl::pw_multi_aff pw_multi_aff::range_product(const isl::pw_aff &pma2) const
16683{
16684 return this->range_product(isl::pw_multi_aff(pma2));
16685}
16686
16687isl::id pw_multi_aff::range_tuple_id() const
16688{
16690 return manage(res);
16691}
16692
16694{
16695 return range_tuple_id();
16696}
16697
16698isl::multi_pw_aff pw_multi_aff::reset_range_tuple_id() const
16699{
16700 return isl::multi_pw_aff(*this).reset_range_tuple_id();
16701}
16702
16704{
16705 return isl::multi_pw_aff(*this).reset_tuple_id(type);
16706}
16707
16709{
16710 return isl::multi_pw_aff(*this).scale(mv);
16711}
16712
16714{
16716 return manage(res);
16717}
16718
16720{
16721 return this->scale(isl::val(ctx(), v));
16722}
16723
16725{
16726 return isl::multi_pw_aff(*this).scale_down(mv);
16727}
16728
16730{
16732 return manage(res);
16733}
16734
16736{
16737 return this->scale_down(isl::val(ctx(), v));
16738}
16739
16740isl::multi_pw_aff pw_multi_aff::set_at(int pos, const isl::pw_aff &el) const
16741{
16742 return isl::multi_pw_aff(*this).set_at(pos, el);
16743}
16744
16745isl::multi_union_pw_aff pw_multi_aff::set_at(int pos, const isl::union_pw_aff &el) const
16746{
16747 return isl::multi_pw_aff(*this).set_at(pos, el);
16748}
16749
16751{
16752 return isl::multi_pw_aff(*this).set_pw_aff(pos, el);
16753}
16754
16756{
16757 auto res = isl_pw_multi_aff_set_pw_aff(copy(), pos, pa.release());
16758 return manage(res);
16759}
16760
16762{
16764 return manage(res);
16765}
16766
16767isl::pw_multi_aff pw_multi_aff::set_range_tuple(const std::string &id) const
16768{
16769 return this->set_range_tuple(isl::id(ctx(), id));
16770}
16771
16773{
16774 return isl::multi_pw_aff(*this).set_union_pw_aff(pos, el);
16775}
16776
16777class size pw_multi_aff::size() const
16778{
16779 return isl::multi_pw_aff(*this).size();
16780}
16781
16783{
16785 return manage(res);
16786}
16787
16788isl::space pw_multi_aff::get_space() const
16789{
16790 return space();
16791}
16792
16793isl::multi_pw_aff pw_multi_aff::sub(const isl::multi_pw_aff &multi2) const
16794{
16795 return isl::multi_pw_aff(*this).sub(multi2);
16796}
16797
16798isl::multi_union_pw_aff pw_multi_aff::sub(const isl::multi_union_pw_aff &multi2) const
16799{
16800 return isl::multi_pw_aff(*this).sub(multi2);
16801}
16802
16803isl::pw_multi_aff pw_multi_aff::sub(isl::pw_multi_aff pma2) const
16804{
16805 auto res = isl_pw_multi_aff_sub(copy(), pma2.release());
16806 return manage(res);
16807}
16808
16809isl::union_pw_multi_aff pw_multi_aff::sub(const isl::union_pw_multi_aff &upma2) const
16810{
16811 return isl::union_pw_multi_aff(*this).sub(upma2);
16812}
16813
16814isl::pw_multi_aff pw_multi_aff::sub(const isl::multi_aff &pma2) const
16815{
16816 return this->sub(isl::pw_multi_aff(pma2));
16817}
16818
16819isl::pw_multi_aff pw_multi_aff::sub(const isl::pw_aff &pma2) const
16820{
16821 return this->sub(isl::pw_multi_aff(pma2));
16822}
16823
16824isl::pw_multi_aff pw_multi_aff::subtract_domain(isl::set set) const
16825{
16826 auto res = isl_pw_multi_aff_subtract_domain(copy(), set.release());
16827 return manage(res);
16828}
16829
16830isl::union_pw_multi_aff pw_multi_aff::subtract_domain(const isl::space &space) const
16831{
16832 return isl::union_pw_multi_aff(*this).subtract_domain(space);
16833}
16834
16835isl::union_pw_multi_aff pw_multi_aff::subtract_domain(const isl::union_set &uset) const
16836{
16837 return isl::union_pw_multi_aff(*this).subtract_domain(uset);
16838}
16839
16840isl::pw_multi_aff pw_multi_aff::subtract_domain(const isl::basic_set &set) const
16841{
16842 return this->subtract_domain(isl::set(set));
16843}
16844
16845isl::pw_multi_aff pw_multi_aff::subtract_domain(const isl::point &set) const
16846{
16847 return this->subtract_domain(isl::set(set));
16848}
16849
16850isl::pw_multi_aff_list pw_multi_aff::to_list() const
16851{
16852 auto res = isl_pw_multi_aff_to_list(copy());
16853 return manage(res);
16854}
16855
16856isl::multi_pw_aff pw_multi_aff::to_multi_pw_aff() const
16857{
16859 return manage(res);
16860}
16861
16862isl::union_pw_multi_aff pw_multi_aff::to_union_pw_multi_aff() const
16863{
16865 return manage(res);
16866}
16867
16869{
16870 auto res = isl_pw_multi_aff_get_tuple_id(get(), static_cast<enum isl_dim_type>(type));
16871 return manage(res);
16872}
16873
16875{
16876 return tuple_id(type);
16877}
16878
16880{
16882}
16883
16885{
16886 return isl::multi_pw_aff(*this).union_add(mpa2);
16887}
16888
16889isl::multi_union_pw_aff pw_multi_aff::union_add(const isl::multi_union_pw_aff &mupa2) const
16890{
16891 return isl::multi_pw_aff(*this).union_add(mupa2);
16892}
16893
16894isl::pw_multi_aff pw_multi_aff::union_add(isl::pw_multi_aff pma2) const
16895{
16896 auto res = isl_pw_multi_aff_union_add(copy(), pma2.release());
16897 return manage(res);
16898}
16899
16900isl::union_pw_multi_aff pw_multi_aff::union_add(const isl::union_pw_multi_aff &upma2) const
16901{
16902 return isl::union_pw_multi_aff(*this).union_add(upma2);
16903}
16904
16905isl::pw_multi_aff pw_multi_aff::union_add(const isl::multi_aff &pma2) const
16906{
16907 return this->union_add(isl::pw_multi_aff(pma2));
16908}
16909
16910isl::pw_multi_aff pw_multi_aff::union_add(const isl::pw_aff &pma2) const
16911{
16912 return this->union_add(isl::pw_multi_aff(pma2));
16913}
16914
16915isl::pw_multi_aff pw_multi_aff::zero(isl::space space)
16916{
16917 auto res = isl_pw_multi_aff_zero(space.release());
16918 return manage(res);
16919}
16920
16921inline std::ostream &operator<<(std::ostream &os, const pw_multi_aff &obj)
16922{
16923 char *str = isl_pw_multi_aff_to_str(obj.get());
16924 if (!str) {
16925 os.setstate(std::ios_base::badbit);
16926 return os;
16927 }
16928 os << str;
16929 free(str);
16930 return os;
16931}
16932
16933// implementations for isl::pw_multi_aff_list
16934pw_multi_aff_list manage(__isl_take isl_pw_multi_aff_list *ptr) {
16935 return pw_multi_aff_list(ptr);
16936}
16937pw_multi_aff_list manage_copy(__isl_keep isl_pw_multi_aff_list *ptr) {
16938 ptr = isl_pw_multi_aff_list_copy(ptr);
16939 return pw_multi_aff_list(ptr);
16940}
16941
16943 : ptr(nullptr) {}
16944
16946 : ptr(nullptr)
16947{
16948 ptr = obj.copy();
16949}
16950
16951pw_multi_aff_list::pw_multi_aff_list(__isl_take isl_pw_multi_aff_list *ptr)
16952 : ptr(ptr) {}
16953
16955{
16956 auto res = isl_pw_multi_aff_list_alloc(ctx.release(), n);
16957 ptr = res;
16958}
16959
16960pw_multi_aff_list::pw_multi_aff_list(isl::pw_multi_aff el)
16961{
16962 auto res = isl_pw_multi_aff_list_from_pw_multi_aff(el.release());
16963 ptr = res;
16964}
16965
16966pw_multi_aff_list::pw_multi_aff_list(isl::ctx ctx, const std::string &str)
16967{
16968 auto res = isl_pw_multi_aff_list_read_from_str(ctx.release(), str.c_str());
16969 ptr = res;
16970}
16971
16973 std::swap(this->ptr, obj.ptr);
16974 return *this;
16975}
16976
16978 if (ptr)
16979 isl_pw_multi_aff_list_free(ptr);
16980}
16981
16982__isl_give isl_pw_multi_aff_list *pw_multi_aff_list::copy() const & {
16983 return isl_pw_multi_aff_list_copy(ptr);
16984}
16985
16986__isl_keep isl_pw_multi_aff_list *pw_multi_aff_list::get() const {
16987 return ptr;
16988}
16989
16990__isl_give isl_pw_multi_aff_list *pw_multi_aff_list::release() {
16991 isl_pw_multi_aff_list *tmp = ptr;
16992 ptr = nullptr;
16993 return tmp;
16994}
16995
16996bool pw_multi_aff_list::is_null() const {
16997 return ptr == nullptr;
16998}
16999
17000isl::ctx pw_multi_aff_list::ctx() const {
17001 return isl::ctx(isl_pw_multi_aff_list_get_ctx(ptr));
17002}
17003
17004isl::pw_multi_aff_list pw_multi_aff_list::add(isl::pw_multi_aff el) const
17005{
17006 auto res = isl_pw_multi_aff_list_add(copy(), el.release());
17007 return manage(res);
17008}
17009
17010isl::pw_multi_aff pw_multi_aff_list::at(int index) const
17011{
17012 auto res = isl_pw_multi_aff_list_get_at(get(), index);
17013 return manage(res);
17014}
17015
17016isl::pw_multi_aff pw_multi_aff_list::get_at(int index) const
17017{
17018 return at(index);
17019}
17020
17021isl::pw_multi_aff_list pw_multi_aff_list::clear() const
17022{
17023 auto res = isl_pw_multi_aff_list_clear(copy());
17024 return manage(res);
17025}
17026
17027isl::pw_multi_aff_list pw_multi_aff_list::concat(isl::pw_multi_aff_list list2) const
17028{
17029 auto res = isl_pw_multi_aff_list_concat(copy(), list2.release());
17030 return manage(res);
17031}
17032
17033isl::pw_multi_aff_list pw_multi_aff_list::drop(unsigned int first, unsigned int n) const
17034{
17035 auto res = isl_pw_multi_aff_list_drop(copy(), first, n);
17036 return manage(res);
17037}
17038
17040{
17041 struct fn_data {
17042 std::function<stat(isl::pw_multi_aff)> func;
17043 } fn_data = { fn };
17044 auto fn_lambda = [](isl_pw_multi_aff *arg_0, void *arg_1) -> isl_stat {
17045 auto *data = static_cast<struct fn_data *>(arg_1);
17046 auto ret = (data->func)(manage(arg_0));
17047 return ret.release();
17048 };
17049 auto res = isl_pw_multi_aff_list_foreach(get(), fn_lambda, &fn_data);
17050 return manage(res);
17051}
17052
17054{
17055 auto res = isl_pw_multi_aff_list_insert(copy(), pos, el.release());
17056 return manage(res);
17057}
17058
17059class size pw_multi_aff_list::size() const
17060{
17061 auto res = isl_pw_multi_aff_list_size(get());
17062 return manage(res);
17063}
17064
17065inline std::ostream &operator<<(std::ostream &os, const pw_multi_aff_list &obj)
17066{
17067 char *str = isl_pw_multi_aff_list_to_str(obj.get());
17068 if (!str) {
17069 os.setstate(std::ios_base::badbit);
17070 return os;
17071 }
17072 os << str;
17073 free(str);
17074 return os;
17075}
17076
17077// implementations for isl::schedule
17079 return schedule(ptr);
17080}
17082 ptr = isl_schedule_copy(ptr);
17083 return schedule(ptr);
17084}
17085
17087 : ptr(nullptr) {}
17088
17090 : ptr(nullptr)
17091{
17092 ptr = obj.copy();
17093}
17094
17096 : ptr(ptr) {}
17097
17098schedule::schedule(isl::ctx ctx, const std::string &str)
17099{
17100 auto res = isl_schedule_read_from_str(ctx.release(), str.c_str());
17101 ptr = res;
17102}
17103
17105 std::swap(this->ptr, obj.ptr);
17106 return *this;
17107}
17108
17110 if (ptr)
17112}
17113
17115 return isl_schedule_copy(ptr);
17116}
17117
17119 return ptr;
17120}
17121
17123 isl_schedule *tmp = ptr;
17124 ptr = nullptr;
17125 return tmp;
17126}
17127
17128bool schedule::is_null() const {
17129 return ptr == nullptr;
17130}
17131
17132isl::ctx schedule::ctx() const {
17133 return isl::ctx(isl_schedule_get_ctx(ptr));
17134}
17135
17141
17143{
17145 return manage(res);
17146}
17147
17149{
17150 return domain();
17151}
17152
17153isl::schedule schedule::from_domain(isl::union_set domain)
17154{
17155 auto res = isl_schedule_from_domain(domain.release());
17156 return manage(res);
17157}
17158
17164
17170
17176
17178{
17179 auto res = isl_schedule_get_map(get());
17180 return manage(res);
17181}
17182
17184{
17185 return map();
17186}
17187
17188isl::schedule schedule::pullback(isl::union_pw_multi_aff upma) const
17189{
17191 return manage(res);
17192}
17193
17194isl::schedule_node schedule::root() const
17195{
17196 auto res = isl_schedule_get_root(get());
17197 return manage(res);
17198}
17199
17200isl::schedule_node schedule::get_root() const
17201{
17202 return root();
17203}
17204
17206{
17207 auto res = isl_schedule_sequence(copy(), schedule2.release());
17208 return manage(res);
17209}
17210
17211inline std::ostream &operator<<(std::ostream &os, const schedule &obj)
17212{
17213 char *str = isl_schedule_to_str(obj.get());
17214 if (!str) {
17215 os.setstate(std::ios_base::badbit);
17216 return os;
17217 }
17218 os << str;
17219 free(str);
17220 return os;
17221}
17222
17223// implementations for isl::schedule_constraints
17225 return schedule_constraints(ptr);
17226}
17229 return schedule_constraints(ptr);
17230}
17231
17233 : ptr(nullptr) {}
17234
17236 : ptr(nullptr)
17237{
17238 ptr = obj.copy();
17239}
17240
17242 : ptr(ptr) {}
17243
17244schedule_constraints::schedule_constraints(isl::ctx ctx, const std::string &str)
17245{
17246 auto res = isl_schedule_constraints_read_from_str(ctx.release(), str.c_str());
17247 ptr = res;
17248}
17249
17251 std::swap(this->ptr, obj.ptr);
17252 return *this;
17253}
17254
17256 if (ptr)
17258}
17259
17262}
17263
17265 return ptr;
17266}
17267
17270 ptr = nullptr;
17271 return tmp;
17272}
17273
17274bool schedule_constraints::is_null() const {
17275 return ptr == nullptr;
17276}
17277
17278isl::ctx schedule_constraints::ctx() const {
17279 return isl::ctx(isl_schedule_constraints_get_ctx(ptr));
17280}
17281
17282isl::union_map schedule_constraints::coincidence() const
17283{
17285 return manage(res);
17286}
17287
17288isl::union_map schedule_constraints::get_coincidence() const
17289{
17290 return coincidence();
17291}
17292
17293isl::schedule schedule_constraints::compute_schedule() const
17294{
17296 return manage(res);
17297}
17298
17299isl::union_map schedule_constraints::conditional_validity() const
17300{
17302 return manage(res);
17303}
17304
17306{
17307 return conditional_validity();
17308}
17309
17311{
17313 return manage(res);
17314}
17315
17317{
17319}
17320
17322{
17324 return manage(res);
17325}
17326
17328{
17329 return context();
17330}
17331
17332isl::union_set schedule_constraints::domain() const
17333{
17335 return manage(res);
17336}
17337
17338isl::union_set schedule_constraints::get_domain() const
17339{
17340 return domain();
17341}
17342
17343isl::schedule_constraints schedule_constraints::on_domain(isl::union_set domain)
17344{
17346 return manage(res);
17347}
17348
17349isl::union_map schedule_constraints::proximity() const
17350{
17352 return manage(res);
17353}
17354
17355isl::union_map schedule_constraints::get_proximity() const
17356{
17357 return proximity();
17358}
17359
17360isl::schedule_constraints schedule_constraints::set_coincidence(isl::union_map coincidence) const
17361{
17363 return manage(res);
17364}
17365
17366isl::schedule_constraints schedule_constraints::set_conditional_validity(isl::union_map condition, isl::union_map validity) const
17367{
17369 return manage(res);
17370}
17371
17372isl::schedule_constraints schedule_constraints::set_context(isl::set context) const
17373{
17375 return manage(res);
17376}
17377
17378isl::schedule_constraints schedule_constraints::set_proximity(isl::union_map proximity) const
17379{
17381 return manage(res);
17382}
17383
17384isl::schedule_constraints schedule_constraints::set_validity(isl::union_map validity) const
17385{
17387 return manage(res);
17388}
17389
17390isl::union_map schedule_constraints::validity() const
17391{
17393 return manage(res);
17394}
17395
17396isl::union_map schedule_constraints::get_validity() const
17397{
17398 return validity();
17399}
17400
17401inline std::ostream &operator<<(std::ostream &os, const schedule_constraints &obj)
17402{
17404 if (!str) {
17405 os.setstate(std::ios_base::badbit);
17406 return os;
17407 }
17408 os << str;
17409 free(str);
17410 return os;
17411}
17412
17413// implementations for isl::schedule_node
17415 return schedule_node(ptr);
17416}
17418 ptr = isl_schedule_node_copy(ptr);
17419 return schedule_node(ptr);
17420}
17421
17423 : ptr(nullptr) {}
17424
17426 : ptr(nullptr)
17427{
17428 ptr = obj.copy();
17429}
17430
17432 : ptr(ptr) {}
17433
17435 std::swap(this->ptr, obj.ptr);
17436 return *this;
17437}
17438
17440 if (ptr)
17442}
17443
17446}
17447
17449 return ptr;
17450}
17451
17453 isl_schedule_node *tmp = ptr;
17454 ptr = nullptr;
17455 return tmp;
17456}
17457
17458bool schedule_node::is_null() const {
17459 return ptr == nullptr;
17460}
17461
17462template <typename T, typename>
17463boolean schedule_node::isa_type(T subtype) const
17464{
17465 if (is_null())
17466 return boolean();
17467 return isl_schedule_node_get_type(get()) == subtype;
17468}
17469template <class T>
17470boolean schedule_node::isa() const
17471{
17472 return isa_type<decltype(T::type)>(T::type);
17473}
17474template <class T>
17475T schedule_node::as() const
17476{
17477 if (isa<T>().is_false())
17478 isl_die(ctx().get(), isl_error_invalid, "not an object of the requested subtype", return T());
17479 return T(copy());
17480}
17481
17482isl::ctx schedule_node::ctx() const {
17483 return isl::ctx(isl_schedule_node_get_ctx(ptr));
17484}
17485
17486isl::schedule_node schedule_node::ancestor(int generation) const
17487{
17488 auto res = isl_schedule_node_ancestor(copy(), generation);
17489 return manage(res);
17490}
17491
17492class size schedule_node::ancestor_child_position(const isl::schedule_node &ancestor) const
17493{
17495 return manage(res);
17496}
17497
17498class size schedule_node::get_ancestor_child_position(const isl::schedule_node &ancestor) const
17499{
17501}
17502
17503isl::schedule_node schedule_node::child(int pos) const
17504{
17506 return manage(res);
17507}
17508
17510{
17512 return manage(res);
17513}
17514
17516{
17517 return child_position();
17518}
17519
17521{
17523 return manage(res);
17524}
17525
17527{
17528 return domain();
17529}
17530
17531boolean schedule_node::every_descendant(const std::function<boolean(isl::schedule_node)> &test) const
17532{
17533 struct test_data {
17534 std::function<boolean(isl::schedule_node)> func;
17535 } test_data = { test };
17536 auto test_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_bool {
17537 auto *data = static_cast<struct test_data *>(arg_1);
17538 auto ret = (data->func)(manage_copy(arg_0));
17539 return ret.release();
17540 };
17541 auto res = isl_schedule_node_every_descendant(get(), test_lambda, &test_data);
17542 return manage(res);
17543}
17544
17546{
17548 return manage(res);
17549}
17550
17552{
17553 struct fn_data {
17554 std::function<stat(isl::schedule_node)> func;
17555 } fn_data = { fn };
17556 auto fn_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_stat {
17557 auto *data = static_cast<struct fn_data *>(arg_1);
17558 auto ret = (data->func)(manage_copy(arg_0));
17559 return ret.release();
17560 };
17561 auto res = isl_schedule_node_foreach_ancestor_top_down(get(), fn_lambda, &fn_data);
17562 return manage(res);
17563}
17564
17566{
17567 struct fn_data {
17568 std::function<boolean(isl::schedule_node)> func;
17569 } fn_data = { fn };
17570 auto fn_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_bool {
17571 auto *data = static_cast<struct fn_data *>(arg_1);
17572 auto ret = (data->func)(manage_copy(arg_0));
17573 return ret.release();
17574 };
17575 auto res = isl_schedule_node_foreach_descendant_top_down(get(), fn_lambda, &fn_data);
17576 return manage(res);
17577}
17578
17580{
17581 auto res = isl_schedule_node_from_domain(domain.release());
17582 return manage(res);
17583}
17584
17586{
17587 auto res = isl_schedule_node_from_extension(extension.release());
17588 return manage(res);
17589}
17590
17591isl::schedule_node schedule_node::graft_after(isl::schedule_node graft) const
17592{
17593 auto res = isl_schedule_node_graft_after(copy(), graft.release());
17594 return manage(res);
17595}
17596
17597isl::schedule_node schedule_node::graft_before(isl::schedule_node graft) const
17598{
17600 return manage(res);
17601}
17602
17603boolean schedule_node::has_children() const
17604{
17606 return manage(res);
17607}
17608
17609boolean schedule_node::has_next_sibling() const
17610{
17612 return manage(res);
17613}
17614
17615boolean schedule_node::has_parent() const
17616{
17618 return manage(res);
17619}
17620
17622{
17624 return manage(res);
17625}
17626
17627isl::schedule_node schedule_node::insert_context(isl::set context) const
17628{
17629 auto res = isl_schedule_node_insert_context(copy(), context.release());
17630 return manage(res);
17631}
17632
17633isl::schedule_node schedule_node::insert_filter(isl::union_set filter) const
17634{
17635 auto res = isl_schedule_node_insert_filter(copy(), filter.release());
17636 return manage(res);
17637}
17638
17639isl::schedule_node schedule_node::insert_guard(isl::set context) const
17640{
17641 auto res = isl_schedule_node_insert_guard(copy(), context.release());
17642 return manage(res);
17643}
17644
17645isl::schedule_node schedule_node::insert_mark(isl::id mark) const
17646{
17648 return manage(res);
17649}
17650
17651isl::schedule_node schedule_node::insert_mark(const std::string &mark) const
17652{
17653 return this->insert_mark(isl::id(ctx(), mark));
17654}
17655
17656isl::schedule_node schedule_node::insert_partial_schedule(isl::multi_union_pw_aff schedule) const
17657{
17659 return manage(res);
17660}
17661
17662isl::schedule_node schedule_node::insert_sequence(isl::union_set_list filters) const
17663{
17665 return manage(res);
17666}
17667
17668isl::schedule_node schedule_node::insert_set(isl::union_set_list filters) const
17669{
17670 auto res = isl_schedule_node_insert_set(copy(), filters.release());
17671 return manage(res);
17672}
17673
17674boolean schedule_node::is_equal(const isl::schedule_node &node2) const
17675{
17676 auto res = isl_schedule_node_is_equal(get(), node2.get());
17677 return manage(res);
17678}
17679
17681{
17683 return manage(res);
17684}
17685
17686isl::schedule_node schedule_node::map_descendant_bottom_up(const std::function<isl::schedule_node(isl::schedule_node)> &fn) const
17687{
17688 struct fn_data {
17689 std::function<isl::schedule_node(isl::schedule_node)> func;
17690 } fn_data = { fn };
17691 auto fn_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_schedule_node * {
17692 auto *data = static_cast<struct fn_data *>(arg_1);
17693 auto ret = (data->func)(manage(arg_0));
17694 return ret.release();
17695 };
17696 auto res = isl_schedule_node_map_descendant_bottom_up(copy(), fn_lambda, &fn_data);
17697 return manage(res);
17698}
17699
17700class size schedule_node::n_children() const
17701{
17702 auto res = isl_schedule_node_n_children(get());
17703 return manage(res);
17704}
17705
17706isl::schedule_node schedule_node::next_sibling() const
17707{
17709 return manage(res);
17710}
17711
17712isl::schedule_node schedule_node::order_after(isl::union_set filter) const
17713{
17714 auto res = isl_schedule_node_order_after(copy(), filter.release());
17715 return manage(res);
17716}
17717
17718isl::schedule_node schedule_node::order_before(isl::union_set filter) const
17719{
17720 auto res = isl_schedule_node_order_before(copy(), filter.release());
17721 return manage(res);
17722}
17723
17724isl::schedule_node schedule_node::parent() const
17725{
17727 return manage(res);
17728}
17729
17730isl::multi_union_pw_aff schedule_node::prefix_schedule_multi_union_pw_aff() const
17731{
17733 return manage(res);
17734}
17735
17736isl::multi_union_pw_aff schedule_node::get_prefix_schedule_multi_union_pw_aff() const
17737{
17739}
17740
17746
17751
17753{
17755 return manage(res);
17756}
17757
17759{
17761}
17762
17763isl::union_pw_multi_aff schedule_node::prefix_schedule_union_pw_multi_aff() const
17764{
17766 return manage(res);
17767}
17768
17769isl::union_pw_multi_aff schedule_node::get_prefix_schedule_union_pw_multi_aff() const
17770{
17772}
17773
17774isl::schedule_node schedule_node::previous_sibling() const
17775{
17777 return manage(res);
17778}
17779
17780isl::schedule_node schedule_node::root() const
17781{
17783 return manage(res);
17784}
17785
17786isl::schedule schedule_node::schedule() const
17787{
17789 return manage(res);
17790}
17791
17792isl::schedule schedule_node::get_schedule() const
17793{
17794 return schedule();
17795}
17796
17798{
17800 return manage(res);
17801}
17802
17804{
17805 return schedule_depth();
17806}
17807
17809{
17811 return manage(res);
17812}
17813
17815{
17816 return shared_ancestor(node2);
17817}
17818
17819class size schedule_node::tree_depth() const
17820{
17822 return manage(res);
17823}
17824
17825class size schedule_node::get_tree_depth() const
17826{
17827 return tree_depth();
17828}
17829
17835
17840
17841inline std::ostream &operator<<(std::ostream &os, const schedule_node &obj)
17842{
17843 char *str = isl_schedule_node_to_str(obj.get());
17844 if (!str) {
17845 os.setstate(std::ios_base::badbit);
17846 return os;
17847 }
17848 os << str;
17849 free(str);
17850 return os;
17851}
17852
17853// implementations for isl::schedule_node_band
17855 : schedule_node() {}
17856
17859{
17860}
17861
17863 : schedule_node(ptr) {}
17864
17866 std::swap(this->ptr, obj.ptr);
17867 return *this;
17868}
17869
17870isl::ctx schedule_node_band::ctx() const {
17871 return isl::ctx(isl_schedule_node_get_ctx(ptr));
17872}
17873
17874isl::union_set schedule_node_band::ast_build_options() const
17875{
17877 return manage(res);
17878}
17879
17880isl::union_set schedule_node_band::get_ast_build_options() const
17881{
17882 return ast_build_options();
17883}
17884
17886{
17888 return manage(res);
17889}
17890
17892{
17893 return ast_isolate_option();
17894}
17895
17897{
17899 return manage(res);
17900}
17901
17903{
17905 return manage(res).as<schedule_node_band>();
17906}
17907
17908schedule_node_band schedule_node_band::mod(isl::multi_val mv) const
17909{
17911 return manage(res).as<schedule_node_band>();
17912}
17913
17914class size schedule_node_band::n_member() const
17915{
17917 return manage(res);
17918}
17919
17920isl::multi_union_pw_aff schedule_node_band::partial_schedule() const
17921{
17923 return manage(res);
17924}
17925
17926isl::multi_union_pw_aff schedule_node_band::get_partial_schedule() const
17927{
17928 return partial_schedule();
17929}
17930
17931boolean schedule_node_band::permutable() const
17932{
17934 return manage(res);
17935}
17936
17938{
17939 return permutable();
17940}
17941
17942schedule_node_band schedule_node_band::scale(isl::multi_val mv) const
17943{
17945 return manage(res).as<schedule_node_band>();
17946}
17947
17949{
17951 return manage(res).as<schedule_node_band>();
17952}
17953
17955{
17957 return manage(res).as<schedule_node_band>();
17958}
17959
17961{
17963 return manage(res).as<schedule_node_band>();
17964}
17965
17966schedule_node_band schedule_node_band::shift(isl::multi_union_pw_aff shift) const
17967{
17968 auto res = isl_schedule_node_band_shift(copy(), shift.release());
17969 return manage(res).as<schedule_node_band>();
17970}
17971
17973{
17975 return manage(res).as<schedule_node_band>();
17976}
17977
17979{
17980 auto res = isl_schedule_node_band_tile(copy(), sizes.release());
17981 return manage(res).as<schedule_node_band>();
17982}
17983
17985{
17987 return manage(res).as<schedule_node_band>();
17988}
17989
17991{
17993 return manage(res).as<schedule_node_band>();
17994}
17995
17997{
17999 return manage(res).as<schedule_node_band>();
18000}
18001
18003{
18005 return manage(res).as<schedule_node_band>();
18006}
18007
18008inline std::ostream &operator<<(std::ostream &os, const schedule_node_band &obj)
18009{
18010 char *str = isl_schedule_node_to_str(obj.get());
18011 if (!str) {
18012 os.setstate(std::ios_base::badbit);
18013 return os;
18014 }
18015 os << str;
18016 free(str);
18017 return os;
18018}
18019
18020// implementations for isl::schedule_node_context
18022 : schedule_node() {}
18023
18026{
18027}
18028
18030 : schedule_node(ptr) {}
18031
18033 std::swap(this->ptr, obj.ptr);
18034 return *this;
18035}
18036
18037isl::ctx schedule_node_context::ctx() const {
18038 return isl::ctx(isl_schedule_node_get_ctx(ptr));
18039}
18040
18042{
18044 return manage(res);
18045}
18046
18048{
18049 return context();
18050}
18051
18052inline std::ostream &operator<<(std::ostream &os, const schedule_node_context &obj)
18053{
18054 char *str = isl_schedule_node_to_str(obj.get());
18055 if (!str) {
18056 os.setstate(std::ios_base::badbit);
18057 return os;
18058 }
18059 os << str;
18060 free(str);
18061 return os;
18062}
18063
18064// implementations for isl::schedule_node_domain
18066 : schedule_node() {}
18067
18070{
18071}
18072
18074 : schedule_node(ptr) {}
18075
18077 std::swap(this->ptr, obj.ptr);
18078 return *this;
18079}
18080
18081isl::ctx schedule_node_domain::ctx() const {
18082 return isl::ctx(isl_schedule_node_get_ctx(ptr));
18083}
18084
18085isl::union_set schedule_node_domain::domain() const
18086{
18088 return manage(res);
18089}
18090
18091isl::union_set schedule_node_domain::get_domain() const
18092{
18093 return domain();
18094}
18095
18096inline std::ostream &operator<<(std::ostream &os, const schedule_node_domain &obj)
18097{
18098 char *str = isl_schedule_node_to_str(obj.get());
18099 if (!str) {
18100 os.setstate(std::ios_base::badbit);
18101 return os;
18102 }
18103 os << str;
18104 free(str);
18105 return os;
18106}
18107
18108// implementations for isl::schedule_node_expansion
18110 : schedule_node() {}
18111
18114{
18115}
18116
18118 : schedule_node(ptr) {}
18119
18121 std::swap(this->ptr, obj.ptr);
18122 return *this;
18123}
18124
18125isl::ctx schedule_node_expansion::ctx() const {
18126 return isl::ctx(isl_schedule_node_get_ctx(ptr));
18127}
18128
18129isl::union_pw_multi_aff schedule_node_expansion::contraction() const
18130{
18132 return manage(res);
18133}
18134
18135isl::union_pw_multi_aff schedule_node_expansion::get_contraction() const
18136{
18137 return contraction();
18138}
18139
18140isl::union_map schedule_node_expansion::expansion() const
18141{
18143 return manage(res);
18144}
18145
18146isl::union_map schedule_node_expansion::get_expansion() const
18147{
18148 return expansion();
18149}
18150
18151inline std::ostream &operator<<(std::ostream &os, const schedule_node_expansion &obj)
18152{
18153 char *str = isl_schedule_node_to_str(obj.get());
18154 if (!str) {
18155 os.setstate(std::ios_base::badbit);
18156 return os;
18157 }
18158 os << str;
18159 free(str);
18160 return os;
18161}
18162
18163// implementations for isl::schedule_node_extension
18165 : schedule_node() {}
18166
18169{
18170}
18171
18173 : schedule_node(ptr) {}
18174
18176 std::swap(this->ptr, obj.ptr);
18177 return *this;
18178}
18179
18180isl::ctx schedule_node_extension::ctx() const {
18181 return isl::ctx(isl_schedule_node_get_ctx(ptr));
18182}
18183
18184isl::union_map schedule_node_extension::extension() const
18185{
18187 return manage(res);
18188}
18189
18190isl::union_map schedule_node_extension::get_extension() const
18191{
18192 return extension();
18193}
18194
18195inline std::ostream &operator<<(std::ostream &os, const schedule_node_extension &obj)
18196{
18197 char *str = isl_schedule_node_to_str(obj.get());
18198 if (!str) {
18199 os.setstate(std::ios_base::badbit);
18200 return os;
18201 }
18202 os << str;
18203 free(str);
18204 return os;
18205}
18206
18207// implementations for isl::schedule_node_filter
18209 : schedule_node() {}
18210
18213{
18214}
18215
18217 : schedule_node(ptr) {}
18218
18220 std::swap(this->ptr, obj.ptr);
18221 return *this;
18222}
18223
18224isl::ctx schedule_node_filter::ctx() const {
18225 return isl::ctx(isl_schedule_node_get_ctx(ptr));
18226}
18227
18228isl::union_set schedule_node_filter::filter() const
18229{
18231 return manage(res);
18232}
18233
18234isl::union_set schedule_node_filter::get_filter() const
18235{
18236 return filter();
18237}
18238
18239inline std::ostream &operator<<(std::ostream &os, const schedule_node_filter &obj)
18240{
18241 char *str = isl_schedule_node_to_str(obj.get());
18242 if (!str) {
18243 os.setstate(std::ios_base::badbit);
18244 return os;
18245 }
18246 os << str;
18247 free(str);
18248 return os;
18249}
18250
18251// implementations for isl::schedule_node_guard
18253 : schedule_node() {}
18254
18257{
18258}
18259
18261 : schedule_node(ptr) {}
18262
18264 std::swap(this->ptr, obj.ptr);
18265 return *this;
18266}
18267
18268isl::ctx schedule_node_guard::ctx() const {
18269 return isl::ctx(isl_schedule_node_get_ctx(ptr));