Polly 24.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 static inline isl::pw_multi_aff from_set(isl::set set);
3303 inline isl::pw_multi_aff gist(isl::set set) const;
3306 inline isl::pw_multi_aff gist(const isl::basic_set &set) const;
3307 inline isl::pw_multi_aff gist(const isl::point &set) const;
3308 inline boolean has_range_tuple_id() const;
3309 inline isl::multi_pw_aff identity() const;
3320 inline boolean involves_locals() const;
3321 inline boolean involves_nan() const;
3322 inline boolean involves_param(const isl::id &id) const;
3323 inline boolean involves_param(const std::string &id) const;
3324 inline boolean involves_param(const isl::id_list &list) const;
3325 inline boolean isa_multi_aff() const;
3326 inline boolean isa_pw_multi_aff() const;
3327 inline isl::pw_aff_list list() const;
3328 inline isl::multi_pw_aff max(const isl::multi_pw_aff &multi2) const;
3329 inline isl::multi_val max_multi_val() const;
3330 inline isl::multi_pw_aff min(const isl::multi_pw_aff &multi2) const;
3331 inline isl::multi_val min_multi_val() const;
3333 inline class size n_piece() const;
3334 inline isl::multi_pw_aff neg() const;
3335 inline boolean plain_is_empty() const;
3336 inline boolean plain_is_equal(const isl::multi_pw_aff &multi2) const;
3337 inline boolean plain_is_equal(const isl::multi_union_pw_aff &multi2) const;
3342 inline isl::multi_pw_aff product(const isl::multi_pw_aff &multi2) const;
3344 inline isl::pw_multi_aff product(const isl::multi_aff &pma2) const;
3345 inline isl::pw_multi_aff product(const isl::pw_aff &pma2) const;
3346 static inline isl::pw_multi_aff project_out_map(isl::space space, isl::dim type, unsigned int first, unsigned int n);
3347 inline isl::multi_pw_aff pullback(const isl::multi_pw_aff &mpa2) const;
3355 inline isl::multi_pw_aff range_product(const isl::multi_pw_aff &multi2) const;
3359 inline isl::pw_multi_aff range_product(const isl::multi_aff &pma2) const;
3360 inline isl::pw_multi_aff range_product(const isl::pw_aff &pma2) const;
3361 inline isl::id range_tuple_id() const;
3362 inline isl::id get_range_tuple_id() const;
3364 inline isl::multi_pw_aff reset_tuple_id(isl::dim type) const;
3365 inline isl::multi_pw_aff scale(const isl::multi_val &mv) const;
3366 inline isl::pw_multi_aff scale(isl::val v) const;
3367 inline isl::pw_multi_aff scale(long v) const;
3368 inline isl::multi_pw_aff scale_down(const isl::multi_val &mv) const;
3369 inline isl::pw_multi_aff scale_down(isl::val v) const;
3370 inline isl::pw_multi_aff scale_down(long v) const;
3371 inline isl::multi_pw_aff set_at(int pos, const isl::pw_aff &el) const;
3372 inline isl::multi_union_pw_aff set_at(int pos, const isl::union_pw_aff &el) const;
3373 inline isl::multi_pw_aff set_pw_aff(int pos, const isl::pw_aff &el) const;
3374 inline isl::pw_multi_aff set_pw_aff(unsigned int pos, isl::pw_aff pa) const;
3375 inline isl::pw_multi_aff set_range_tuple(isl::id id) const;
3376 inline isl::pw_multi_aff set_range_tuple(const std::string &id) const;
3377 inline isl::multi_union_pw_aff set_union_pw_aff(int pos, const isl::union_pw_aff &el) const;
3378 inline class size size() const;
3379 inline isl::space space() const;
3380 inline isl::space get_space() const;
3381 inline isl::multi_pw_aff sub(const isl::multi_pw_aff &multi2) const;
3382 inline isl::multi_union_pw_aff sub(const isl::multi_union_pw_aff &multi2) const;
3383 inline isl::pw_multi_aff sub(isl::pw_multi_aff pma2) const;
3384 inline isl::union_pw_multi_aff sub(const isl::union_pw_multi_aff &upma2) const;
3385 inline isl::pw_multi_aff sub(const isl::multi_aff &pma2) const;
3386 inline isl::pw_multi_aff sub(const isl::pw_aff &pma2) const;
3395 inline isl::id tuple_id(isl::dim type) const;
3396 inline isl::id get_tuple_id(isl::dim type) const;
3398 inline isl::multi_pw_aff union_add(const isl::multi_pw_aff &mpa2) const;
3402 inline isl::pw_multi_aff union_add(const isl::multi_aff &pma2) const;
3403 inline isl::pw_multi_aff union_add(const isl::pw_aff &pma2) const;
3405};
3406
3407// declarations for isl::pw_multi_aff_list
3408inline pw_multi_aff_list manage(__isl_take isl_pw_multi_aff_list *ptr);
3409inline pw_multi_aff_list manage_copy(__isl_keep isl_pw_multi_aff_list *ptr);
3410
3411class pw_multi_aff_list {
3412 friend inline pw_multi_aff_list manage(__isl_take isl_pw_multi_aff_list *ptr);
3413 friend inline pw_multi_aff_list manage_copy(__isl_keep isl_pw_multi_aff_list *ptr);
3414
3415protected:
3416 isl_pw_multi_aff_list *ptr = nullptr;
3417
3418 inline explicit pw_multi_aff_list(__isl_take isl_pw_multi_aff_list *ptr);
3419
3420public:
3421 inline /* implicit */ pw_multi_aff_list();
3422 inline /* implicit */ pw_multi_aff_list(const pw_multi_aff_list &obj);
3423 inline explicit pw_multi_aff_list(isl::ctx ctx, int n);
3425 inline explicit pw_multi_aff_list(isl::ctx ctx, const std::string &str);
3428 inline __isl_give isl_pw_multi_aff_list *copy() const &;
3429 inline __isl_give isl_pw_multi_aff_list *copy() && = delete;
3430 inline __isl_keep isl_pw_multi_aff_list *get() const;
3431 inline __isl_give isl_pw_multi_aff_list *release();
3432 inline bool is_null() const;
3433 inline isl::ctx ctx() const;
3434
3436 inline isl::pw_multi_aff at(int index) const;
3437 inline isl::pw_multi_aff get_at(int index) const;
3438 inline isl::pw_multi_aff_list clear() const;
3440 inline isl::pw_multi_aff_list drop(unsigned int first, unsigned int n) const;
3441 inline stat foreach(const std::function<stat(isl::pw_multi_aff)> &fn) const;
3442 inline isl::pw_multi_aff_list insert(unsigned int pos, isl::pw_multi_aff el) const;
3443 inline class size size() const;
3444};
3445
3446// declarations for isl::schedule
3449
3450class schedule {
3451 friend inline schedule manage(__isl_take isl_schedule *ptr);
3453
3454protected:
3455 isl_schedule *ptr = nullptr;
3456
3458
3459public:
3460 inline /* implicit */ schedule();
3461 inline /* implicit */ schedule(const schedule &obj);
3462 inline explicit schedule(isl::ctx ctx, const std::string &str);
3464 inline ~schedule();
3465 inline __isl_give isl_schedule *copy() const &;
3466 inline __isl_give isl_schedule *copy() && = delete;
3467 inline __isl_keep isl_schedule *get() const;
3469 inline bool is_null() const;
3470 inline isl::ctx ctx() const;
3471
3472 inline isl::schedule align_params(isl::space space) const;
3473 inline isl::union_set domain() const;
3474 inline isl::union_set get_domain() const;
3476 inline isl::schedule gist_domain_params(isl::set context) const;
3479 inline isl::union_map map() const;
3480 inline isl::union_map get_map() const;
3482 inline isl::schedule_node root() const;
3483 inline isl::schedule_node get_root() const;
3484 inline isl::schedule sequence(isl::schedule schedule2) const;
3485};
3486
3487// declarations for isl::schedule_constraints
3490
3494
3495protected:
3496 isl_schedule_constraints *ptr = nullptr;
3497
3499
3500public:
3501 inline /* implicit */ schedule_constraints();
3502 inline /* implicit */ schedule_constraints(const schedule_constraints &obj);
3503 inline explicit schedule_constraints(isl::ctx ctx, const std::string &str);
3510 inline bool is_null() const;
3511 inline isl::ctx ctx() const;
3512
3513 inline isl::union_map coincidence() const;
3520 inline isl::set context() const;
3521 inline isl::set get_context() const;
3522 inline isl::union_set domain() const;
3523 inline isl::union_set get_domain() const;
3525 inline isl::union_map proximity() const;
3526 inline isl::union_map get_proximity() const;
3532 inline isl::union_map validity() const;
3533 inline isl::union_map get_validity() const;
3534};
3535
3536// declarations for isl::schedule_node
3539
3540class schedule_node {
3543
3544protected:
3545 isl_schedule_node *ptr = nullptr;
3546
3548
3549public:
3550 inline /* implicit */ schedule_node();
3551 inline /* implicit */ schedule_node(const schedule_node &obj);
3555 inline __isl_give isl_schedule_node *copy() && = delete;
3558 inline bool is_null() const;
3559private:
3560 template <typename T,
3561 typename = typename std::enable_if<std::is_same<
3562 const decltype(isl_schedule_node_get_type(nullptr)),
3563 const T>::value>::type>
3564 inline boolean isa_type(T subtype) const;
3565public:
3566 template <class T> inline boolean isa() const;
3567 template <class T> inline T as() const;
3568 inline isl::ctx ctx() const;
3569
3570 inline isl::schedule_node ancestor(int generation) const;
3573 inline isl::schedule_node child(int pos) const;
3574 inline class size child_position() const;
3575 inline class size get_child_position() const;
3576 inline isl::union_set domain() const;
3577 inline isl::union_set get_domain() const;
3578 inline boolean every_descendant(const std::function<boolean(isl::schedule_node)> &test) const;
3580 inline stat foreach_ancestor_top_down(const std::function<stat(isl::schedule_node)> &fn) const;
3581 inline stat foreach_descendant_top_down(const std::function<boolean(isl::schedule_node)> &fn) const;
3583 static inline isl::schedule_node from_extension(isl::union_map extension);
3586 inline boolean has_children() const;
3587 inline boolean has_next_sibling() const;
3588 inline boolean has_parent() const;
3589 inline boolean has_previous_sibling() const;
3593 inline isl::schedule_node insert_mark(isl::id mark) const;
3594 inline isl::schedule_node insert_mark(const std::string &mark) const;
3598 inline boolean is_equal(const isl::schedule_node &node2) const;
3599 inline boolean is_subtree_anchored() const;
3600 inline isl::schedule_node map_descendant_bottom_up(const std::function<isl::schedule_node(isl::schedule_node)> &fn) const;
3601 inline class size n_children() const;
3605 inline isl::schedule_node parent() const;
3608 inline isl::union_map prefix_schedule_relation() const;
3615 inline isl::schedule_node root() const;
3616 inline isl::schedule schedule() const;
3617 inline isl::schedule get_schedule() const;
3618 inline class size schedule_depth() const;
3619 inline class size get_schedule_depth() const;
3620 inline isl::schedule_node shared_ancestor(const isl::schedule_node &node2) const;
3622 inline class size tree_depth() const;
3623 inline class size get_tree_depth() const;
3624 inline isl::union_set universe_domain() const;
3625 inline isl::union_set get_universe_domain() const;
3626};
3627
3628// declarations for isl::schedule_node_band
3629
3630class schedule_node_band : public schedule_node {
3631 template <class T>
3632 friend boolean schedule_node::isa() const;
3634 static const auto type = isl_schedule_node_band;
3635
3636protected:
3638
3639public:
3640 inline /* implicit */ schedule_node_band();
3641 inline /* implicit */ schedule_node_band(const schedule_node_band &obj);
3643 inline isl::ctx ctx() const;
3644
3649 inline boolean member_get_coincident(int pos) const;
3650 inline schedule_node_band member_set_coincident(int pos, int coincident) const;
3652 inline class size n_member() const;
3655 inline boolean permutable() const;
3656 inline boolean get_permutable() const;
3662 inline schedule_node_band split(int pos) const;
3668};
3669
3670// declarations for isl::schedule_node_context
3671
3672class schedule_node_context : public schedule_node {
3673 template <class T>
3674 friend boolean schedule_node::isa() const;
3676 static const auto type = isl_schedule_node_context;
3677
3678protected:
3680
3681public:
3682 inline /* implicit */ schedule_node_context();
3683 inline /* implicit */ schedule_node_context(const schedule_node_context &obj);
3685 inline isl::ctx ctx() const;
3686
3687 inline isl::set context() const;
3688 inline isl::set get_context() const;
3689};
3690
3691// declarations for isl::schedule_node_domain
3692
3693class schedule_node_domain : public schedule_node {
3694 template <class T>
3695 friend boolean schedule_node::isa() const;
3697 static const auto type = isl_schedule_node_domain;
3698
3699protected:
3701
3702public:
3703 inline /* implicit */ schedule_node_domain();
3704 inline /* implicit */ schedule_node_domain(const schedule_node_domain &obj);
3706 inline isl::ctx ctx() const;
3707
3708 inline isl::union_set domain() const;
3710};
3711
3712// declarations for isl::schedule_node_expansion
3713
3715 template <class T>
3716 friend boolean schedule_node::isa() const;
3718 static const auto type = isl_schedule_node_expansion;
3719
3720protected:
3722
3723public:
3724 inline /* implicit */ schedule_node_expansion();
3727 inline isl::ctx ctx() const;
3728
3733};
3734
3735// declarations for isl::schedule_node_extension
3736
3738 template <class T>
3739 friend boolean schedule_node::isa() const;
3741 static const auto type = isl_schedule_node_extension;
3742
3743protected:
3745
3746public:
3747 inline /* implicit */ schedule_node_extension();
3750 inline isl::ctx ctx() const;
3751
3754};
3755
3756// declarations for isl::schedule_node_filter
3757
3758class schedule_node_filter : public schedule_node {
3759 template <class T>
3760 friend boolean schedule_node::isa() const;
3762 static const auto type = isl_schedule_node_filter;
3763
3764protected:
3766
3767public:
3768 inline /* implicit */ schedule_node_filter();
3769 inline /* implicit */ schedule_node_filter(const schedule_node_filter &obj);
3771 inline isl::ctx ctx() const;
3772
3773 inline isl::union_set filter() const;
3775};
3776
3777// declarations for isl::schedule_node_guard
3778
3779class schedule_node_guard : public schedule_node {
3780 template <class T>
3781 friend boolean schedule_node::isa() const;
3783 static const auto type = isl_schedule_node_guard;
3784
3785protected:
3787
3788public:
3789 inline /* implicit */ schedule_node_guard();
3790 inline /* implicit */ schedule_node_guard(const schedule_node_guard &obj);
3792 inline isl::ctx ctx() const;
3793
3794 inline isl::set guard() const;
3795 inline isl::set get_guard() const;
3796};
3797
3798// declarations for isl::schedule_node_leaf
3799
3800class schedule_node_leaf : public schedule_node {
3801 template <class T>
3802 friend boolean schedule_node::isa() const;
3804 static const auto type = isl_schedule_node_leaf;
3805
3806protected:
3808
3809public:
3810 inline /* implicit */ schedule_node_leaf();
3811 inline /* implicit */ schedule_node_leaf(const schedule_node_leaf &obj);
3813 inline isl::ctx ctx() const;
3814
3815};
3816
3817// declarations for isl::schedule_node_mark
3818
3819class schedule_node_mark : public schedule_node {
3820 template <class T>
3821 friend boolean schedule_node::isa() const;
3823 static const auto type = isl_schedule_node_mark;
3824
3825protected:
3827
3828public:
3829 inline /* implicit */ schedule_node_mark();
3830 inline /* implicit */ schedule_node_mark(const schedule_node_mark &obj);
3832 inline isl::ctx ctx() const;
3833
3834 inline isl::id id() const;
3835 inline isl::id get_id() const;
3836};
3837
3838// declarations for isl::schedule_node_sequence
3839
3841 template <class T>
3842 friend boolean schedule_node::isa() const;
3844 static const auto type = isl_schedule_node_sequence;
3845
3846protected:
3848
3849public:
3850 inline /* implicit */ schedule_node_sequence();
3853 inline isl::ctx ctx() const;
3854
3855};
3856
3857// declarations for isl::schedule_node_set
3858
3859class schedule_node_set : public schedule_node {
3860 template <class T>
3861 friend boolean schedule_node::isa() const;
3863 static const auto type = isl_schedule_node_set;
3864
3865protected:
3867
3868public:
3869 inline /* implicit */ schedule_node_set();
3870 inline /* implicit */ schedule_node_set(const schedule_node_set &obj);
3872 inline isl::ctx ctx() const;
3873
3874};
3875
3876// declarations for isl::set
3877inline set manage(__isl_take isl_set *ptr);
3878inline set manage_copy(__isl_keep isl_set *ptr);
3879
3880class set {
3881 friend inline set manage(__isl_take isl_set *ptr);
3882 friend inline set manage_copy(__isl_keep isl_set *ptr);
3883
3884protected:
3885 isl_set *ptr = nullptr;
3886
3887 inline explicit set(__isl_take isl_set *ptr);
3888
3889public:
3890 inline /* implicit */ set();
3891 inline /* implicit */ set(const set &obj);
3892 inline /* implicit */ set(isl::basic_set bset);
3893 inline /* implicit */ set(isl::point pnt);
3894 inline explicit set(isl::union_set uset);
3895 inline explicit set(isl::ctx ctx, const std::string &str);
3897 inline ~set();
3898 inline __isl_give isl_set *copy() const &;
3899 inline __isl_give isl_set *copy() && = delete;
3900 inline __isl_keep isl_set *get() const;
3902 inline bool is_null() const;
3903 inline isl::ctx ctx() const;
3904
3906 inline isl::set add_dims(isl::dim type, unsigned int n) const;
3907 inline isl::basic_set affine_hull() const;
3908 inline isl::set align_params(isl::space model) const;
3909 inline isl::set apply(isl::map map) const;
3910 inline isl::union_set apply(const isl::union_map &umap) const;
3911 inline isl::set apply(const isl::basic_map &map) const;
3913 inline isl::set as_set() const;
3914 inline isl::basic_set_list basic_set_list() const;
3915 inline isl::basic_set_list get_basic_set_list() const;
3916 inline isl::set bind(isl::multi_id tuple) const;
3917 inline isl::set coalesce() const;
3918 inline isl::set complement() const;
3919 inline isl::union_set compute_divs() const;
3920 inline boolean contains(const isl::space &space) const;
3921 inline isl::basic_set convex_hull() const;
3922 inline isl::set detect_equalities() const;
3923 inline class size dim(isl::dim type) const;
3924 inline boolean dim_has_any_lower_bound(isl::dim type, unsigned int pos) const;
3925 inline isl::id dim_id(isl::dim type, unsigned int pos) const;
3926 inline isl::id get_dim_id(isl::dim type, unsigned int pos) const;
3927 inline isl::pw_aff dim_max(int pos) const;
3928 inline isl::val dim_max_val(int pos) const;
3929 inline isl::pw_aff dim_min(int pos) const;
3930 inline isl::val dim_min_val(int pos) const;
3931 inline std::string dim_name(isl::dim type, unsigned int pos) const;
3932 inline std::string get_dim_name(isl::dim type, unsigned int pos) const;
3933 inline isl::set drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const;
3934 inline isl::set eliminate(isl::dim type, unsigned int first, unsigned int n) const;
3935 static inline isl::set empty(isl::space space);
3936 inline boolean every_set(const std::function<boolean(isl::set)> &test) const;
3937 inline isl::set extract_set(const isl::space &space) const;
3938 inline int find_dim_by_id(isl::dim type, const isl::id &id) const;
3939 inline int find_dim_by_id(isl::dim type, const std::string &id) const;
3940 inline isl::set fix_si(isl::dim type, unsigned int pos, int value) const;
3941 inline isl::set flatten() const;
3942 inline stat foreach_basic_set(const std::function<stat(isl::basic_set)> &fn) const;
3943 inline stat foreach_point(const std::function<stat(isl::point)> &fn) const;
3944 inline stat foreach_set(const std::function<stat(isl::set)> &fn) const;
3945 inline isl::set gist(isl::set context) const;
3946 inline isl::union_set gist(const isl::union_set &context) const;
3947 inline isl::set gist(const isl::basic_set &context) const;
3948 inline isl::set gist(const isl::point &context) const;
3950 inline boolean has_equal_space(const isl::set &set2) const;
3951 inline isl::map identity() const;
3954 inline isl::set insert_dims(isl::dim type, unsigned int pos, unsigned int n) const;
3956 inline isl::set intersect(isl::set set2) const;
3957 inline isl::union_set intersect(const isl::union_set &uset2) const;
3958 inline isl::set intersect(const isl::basic_set &set2) const;
3959 inline isl::set intersect(const isl::point &set2) const;
3961 inline boolean involves_dims(isl::dim type, unsigned int first, unsigned int n) const;
3962 inline boolean involves_locals() const;
3963 inline boolean is_bounded() const;
3964 inline boolean is_disjoint(const isl::set &set2) const;
3965 inline boolean is_disjoint(const isl::union_set &uset2) const;
3966 inline boolean is_disjoint(const isl::basic_set &set2) const;
3967 inline boolean is_disjoint(const isl::point &set2) const;
3968 inline boolean is_empty() const;
3969 inline boolean is_equal(const isl::set &set2) const;
3970 inline boolean is_equal(const isl::union_set &uset2) const;
3971 inline boolean is_equal(const isl::basic_set &set2) const;
3972 inline boolean is_equal(const isl::point &set2) const;
3973 inline boolean is_params() const;
3974 inline boolean is_singleton() const;
3975 inline boolean is_strict_subset(const isl::set &set2) const;
3976 inline boolean is_strict_subset(const isl::union_set &uset2) const;
3977 inline boolean is_strict_subset(const isl::basic_set &set2) const;
3978 inline boolean is_strict_subset(const isl::point &set2) const;
3979 inline boolean is_subset(const isl::set &set2) const;
3980 inline boolean is_subset(const isl::union_set &uset2) const;
3981 inline boolean is_subset(const isl::basic_set &set2) const;
3982 inline boolean is_subset(const isl::point &set2) const;
3983 inline boolean is_wrapping() const;
3984 inline boolean isa_set() const;
3985 inline isl::set lexmax() const;
3987 inline isl::set lexmin() const;
3989 inline isl::set lower_bound(isl::multi_pw_aff lower) const;
3990 inline isl::set lower_bound(isl::multi_val lower) const;
3991 inline isl::set lower_bound_si(isl::dim type, unsigned int pos, int value) const;
3992 inline isl::set lower_bound_val(isl::dim type, unsigned int pos, isl::val value) const;
3993 inline isl::set lower_bound_val(isl::dim type, unsigned int pos, long value) const;
3995 inline isl::val max_val(const isl::aff &obj) const;
3997 inline isl::val min_val(const isl::aff &obj) const;
3998 inline class size n_basic_set() const;
3999 inline isl::set params() const;
4000 inline isl::val plain_get_val_if_fixed(isl::dim type, unsigned int pos) const;
4004 inline isl::set preimage(isl::multi_aff ma) const;
4005 inline isl::set preimage(isl::multi_pw_aff mpa) const;
4007 inline isl::union_set preimage(const isl::union_pw_multi_aff &upma) const;
4008 inline isl::set product(isl::set set2) const;
4009 inline isl::set project_out(isl::dim type, unsigned int first, unsigned int n) const;
4011 inline isl::set project_out_param(isl::id id) const;
4012 inline isl::set project_out_param(const std::string &id) const;
4013 inline isl::set project_out_param(isl::id_list list) const;
4015 inline isl::set remove_dims(isl::dim type, unsigned int first, unsigned int n) const;
4016 inline isl::set remove_divs() const;
4017 inline isl::set remove_redundancies() const;
4018 inline isl::set reset_tuple_id() const;
4019 inline isl::basic_set sample() const;
4020 inline isl::point sample_point() const;
4021 inline isl::set set_dim_id(isl::dim type, unsigned int pos, isl::id id) const;
4022 inline isl::set set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const;
4023 inline isl::set_list set_list() const;
4024 inline isl::set set_tuple_id(isl::id id) const;
4025 inline isl::set set_tuple_id(const std::string &id) const;
4028 inline isl::basic_set simple_hull() const;
4029 inline isl::space space() const;
4030 inline isl::space get_space() const;
4031 inline isl::val stride(int pos) const;
4032 inline isl::val get_stride(int pos) const;
4033 inline isl::set subtract(isl::set set2) const;
4034 inline isl::union_set subtract(const isl::union_set &uset2) const;
4035 inline isl::set subtract(const isl::basic_set &set2) const;
4036 inline isl::set subtract(const isl::point &set2) const;
4037 inline isl::set_list to_list() const;
4038 inline isl::union_set to_union_set() const;
4039 inline isl::map translation() const;
4040 inline class size tuple_dim() const;
4041 inline isl::id tuple_id() const;
4042 inline isl::id get_tuple_id() const;
4043 inline std::string tuple_name() const;
4044 inline std::string get_tuple_name() const;
4047 inline isl::set unite(isl::set set2) const;
4048 inline isl::union_set unite(const isl::union_set &uset2) const;
4049 inline isl::set unite(const isl::basic_set &set2) const;
4050 inline isl::set unite(const isl::point &set2) const;
4051 static inline isl::set universe(isl::space space);
4053 inline isl::map unwrap() const;
4054 inline isl::set upper_bound(isl::multi_pw_aff upper) const;
4055 inline isl::set upper_bound(isl::multi_val upper) const;
4056 inline isl::set upper_bound_val(isl::dim type, unsigned int pos, isl::val value) const;
4057 inline isl::set upper_bound_val(isl::dim type, unsigned int pos, long value) const;
4058};
4059
4060// declarations for isl::set_list
4063
4064class set_list {
4065 friend inline set_list manage(__isl_take isl_set_list *ptr);
4067
4068protected:
4069 isl_set_list *ptr = nullptr;
4070
4072
4073public:
4074 inline /* implicit */ set_list();
4075 inline /* implicit */ set_list(const set_list &obj);
4076 inline explicit set_list(isl::ctx ctx, int n);
4077 inline explicit set_list(isl::set el);
4078 inline explicit set_list(isl::ctx ctx, const std::string &str);
4080 inline ~set_list();
4081 inline __isl_give isl_set_list *copy() const &;
4082 inline __isl_give isl_set_list *copy() && = delete;
4083 inline __isl_keep isl_set_list *get() const;
4085 inline bool is_null() const;
4086 inline isl::ctx ctx() const;
4087
4088 inline isl::set_list add(isl::set el) const;
4089 inline isl::set at(int index) const;
4090 inline isl::set get_at(int index) const;
4091 inline isl::set_list clear() const;
4092 inline isl::set_list concat(isl::set_list list2) const;
4093 inline isl::set_list drop(unsigned int first, unsigned int n) const;
4094 inline stat foreach(const std::function<stat(isl::set)> &fn) const;
4095 inline isl::set_list insert(unsigned int pos, isl::set el) const;
4096 inline class size size() const;
4097};
4098
4099// declarations for isl::space
4102
4103class space {
4104 friend inline space manage(__isl_take isl_space *ptr);
4105 friend inline space manage_copy(__isl_keep isl_space *ptr);
4106
4107protected:
4108 isl_space *ptr = nullptr;
4109
4110 inline explicit space(__isl_take isl_space *ptr);
4111
4112public:
4113 inline /* implicit */ space();
4114 inline /* implicit */ space(const space &obj);
4115 inline explicit space(isl::ctx ctx, unsigned int nparam, unsigned int n_in, unsigned int n_out);
4116 inline explicit space(isl::ctx ctx, unsigned int nparam, unsigned int dim);
4118 inline ~space();
4119 inline __isl_give isl_space *copy() const &;
4120 inline __isl_give isl_space *copy() && = delete;
4121 inline __isl_keep isl_space *get() const;
4123 inline bool is_null() const;
4124 inline isl::ctx ctx() const;
4125
4126 inline isl::space add_dims(isl::dim type, unsigned int n) const;
4127 inline isl::space add_named_tuple(isl::id tuple_id, unsigned int dim) const;
4128 inline isl::space add_named_tuple(const std::string &tuple_id, unsigned int dim) const;
4129 inline isl::space add_param(isl::id id) const;
4130 inline isl::space add_param(const std::string &id) const;
4131 inline isl::space add_unnamed_tuple(unsigned int dim) const;
4132 inline isl::space align_params(isl::space space2) const;
4133 inline isl::space curry() const;
4134 inline class size dim(isl::dim type) const;
4135 inline isl::id dim_id(isl::dim type, unsigned int pos) const;
4136 inline isl::id get_dim_id(isl::dim type, unsigned int pos) const;
4137 inline isl::space domain() const;
4140 inline isl::id domain_tuple_id() const;
4141 inline isl::id get_domain_tuple_id() const;
4142 inline isl::space drop_dims(isl::dim type, unsigned int first, unsigned int num) const;
4143 inline int find_dim_by_id(isl::dim type, const isl::id &id) const;
4144 inline int find_dim_by_id(isl::dim type, const std::string &id) const;
4145 inline isl::space flatten_domain() const;
4146 inline isl::space flatten_range() const;
4147 inline boolean has_domain_tuple_id() const;
4148 inline boolean has_equal_tuples(const isl::space &space2) const;
4149 inline boolean has_range_tuple_id() const;
4150 inline boolean has_tuple_id(isl::dim type) const;
4151 inline boolean has_tuple_name(isl::dim type) const;
4155 inline boolean is_equal(const isl::space &space2) const;
4156 inline boolean is_params() const;
4157 inline boolean is_set() const;
4158 inline boolean is_wrapping() const;
4160 inline isl::space map_from_set() const;
4161 inline isl::multi_aff multi_aff(isl::aff_list list) const;
4163 inline isl::multi_id multi_id(isl::id_list list) const;
4166 inline isl::multi_val multi_val(isl::val_list list) const;
4167 inline isl::aff param_aff_on_domain(isl::id id) const;
4168 inline isl::aff param_aff_on_domain(const std::string &id) const;
4169 inline isl::space params() const;
4170 static inline isl::space params_alloc(isl::ctx ctx, unsigned int nparam);
4171 inline isl::space product(isl::space right) const;
4172 inline isl::space range() const;
4175 inline isl::space range_reverse() const;
4176 inline isl::id range_tuple_id() const;
4177 inline isl::id get_range_tuple_id() const;
4178 inline isl::space reverse() const;
4179 inline isl::space set_dim_id(isl::dim type, unsigned int pos, isl::id id) const;
4180 inline isl::space set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const;
4181 inline isl::space set_domain_tuple(isl::id id) const;
4182 inline isl::space set_domain_tuple(const std::string &id) const;
4183 inline isl::space set_from_params() const;
4184 inline isl::space set_range_tuple(isl::id id) const;
4185 inline isl::space set_range_tuple(const std::string &id) const;
4186 inline isl::space set_tuple_id(isl::dim type, isl::id id) const;
4187 inline isl::space set_tuple_id(isl::dim type, const std::string &id) const;
4188 inline isl::id tuple_id(isl::dim type) const;
4189 inline isl::id get_tuple_id(isl::dim type) const;
4190 inline std::string tuple_name(isl::dim type) const;
4191 inline std::string get_tuple_name(isl::dim type) const;
4192 inline isl::space uncurry() const;
4193 static inline isl::space unit(isl::ctx ctx);
4194 inline isl::map universe_map() const;
4195 inline isl::set universe_set() const;
4196 inline isl::space unwrap() const;
4197 inline isl::space wrap() const;
4198 inline isl::aff zero_aff_on_domain() const;
4203};
4204
4205// declarations for isl::union_access_info
4208
4209class union_access_info {
4212
4213protected:
4214 isl_union_access_info *ptr = nullptr;
4215
4217
4218public:
4219 inline /* implicit */ union_access_info();
4220 inline /* implicit */ union_access_info(const union_access_info &obj);
4221 inline explicit union_access_info(isl::union_map sink);
4228 inline bool is_null() const;
4229 inline isl::ctx ctx() const;
4230
4231 inline isl::union_flow compute_flow() const;
4237};
4238
4239// declarations for isl::union_flow
4242
4243class union_flow {
4246
4247protected:
4248 isl_union_flow *ptr = nullptr;
4249
4251
4252public:
4253 inline /* implicit */ union_flow();
4254 inline /* implicit */ union_flow(const union_flow &obj);
4256 inline ~union_flow();
4257 inline __isl_give isl_union_flow *copy() const &;
4258 inline __isl_give isl_union_flow *copy() && = delete;
4261 inline bool is_null() const;
4262 inline isl::ctx ctx() const;
4263
4270 inline isl::union_map may_no_source() const;
4276};
4277
4278// declarations for isl::union_map
4281
4282class union_map {
4285
4286protected:
4287 isl_union_map *ptr = nullptr;
4288
4290
4291public:
4292 inline /* implicit */ union_map();
4293 inline /* implicit */ union_map(const union_map &obj);
4294 inline /* implicit */ union_map(isl::basic_map bmap);
4295 inline /* implicit */ union_map(isl::map map);
4296 inline explicit union_map(isl::ctx ctx, const std::string &str);
4298 inline ~union_map();
4299 inline __isl_give isl_union_map *copy() const &;
4300 inline __isl_give isl_union_map *copy() && = delete;
4303 inline bool is_null() const;
4304 inline isl::ctx ctx() const;
4305
4306 inline isl::union_map affine_hull() const;
4307 inline isl::union_map apply_domain(isl::union_map umap2) const;
4308 inline isl::union_map apply_range(isl::union_map umap2) const;
4309 inline isl::map as_map() const;
4313 inline isl::union_map coalesce() const;
4314 inline isl::union_map compute_divs() const;
4315 inline isl::union_map curry() const;
4316 inline isl::union_set deltas() const;
4318 inline isl::union_set domain() const;
4321 inline isl::union_map domain_map() const;
4324 static inline isl::union_map empty(isl::ctx ctx);
4326 inline boolean every_map(const std::function<boolean(isl::map)> &test) const;
4328 inline isl::union_map factor_domain() const;
4329 inline isl::union_map factor_range() const;
4330 inline isl::union_map fixed_power(isl::val exp) const;
4331 inline isl::union_map fixed_power(long exp) const;
4332 inline isl::union_map flat_range_product(isl::union_map umap2) const;
4333 inline stat foreach_map(const std::function<stat(isl::map)> &fn) const;
4335 static inline isl::union_map from(isl::union_pw_multi_aff upma);
4336 static inline isl::union_map from_domain(isl::union_set uset);
4338 static inline isl::union_map from_range(isl::union_set uset);
4340 inline isl::union_map gist_domain(isl::union_set uset) const;
4342 inline isl::union_map gist_range(isl::union_set uset) const;
4343 inline isl::union_map intersect(isl::union_map umap2) const;
4353 inline boolean is_bijective() const;
4354 inline boolean is_disjoint(const isl::union_map &umap2) const;
4355 inline boolean is_empty() const;
4356 inline boolean is_equal(const isl::union_map &umap2) const;
4357 inline boolean is_injective() const;
4358 inline boolean is_single_valued() const;
4359 inline boolean is_strict_subset(const isl::union_map &umap2) const;
4360 inline boolean is_subset(const isl::union_map &umap2) const;
4361 inline boolean isa_map() const;
4362 inline isl::union_map lexmax() const;
4363 inline isl::union_map lexmin() const;
4364 inline isl::map_list map_list() const;
4365 inline isl::map_list get_map_list() const;
4366 inline isl::set params() const;
4375 inline isl::union_map product(isl::union_map umap2) const;
4377 inline isl::union_set range() const;
4380 inline isl::union_map range_map() const;
4381 inline isl::union_map range_product(isl::union_map umap2) const;
4382 inline isl::union_map range_reverse() const;
4383 inline isl::union_map reverse() const;
4384 inline isl::space space() const;
4385 inline isl::space get_space() const;
4386 inline isl::union_map subtract(isl::union_map umap2) const;
4389 inline isl::union_map uncurry() const;
4390 inline isl::union_map unite(isl::union_map umap2) const;
4391 inline isl::union_map universe() const;
4392 inline isl::union_set wrap() const;
4393 inline isl::union_map zip() const;
4394};
4395
4396// declarations for isl::union_pw_aff
4399
4400class union_pw_aff {
4403
4404protected:
4405 isl_union_pw_aff *ptr = nullptr;
4406
4408
4409public:
4410 inline /* implicit */ union_pw_aff();
4411 inline /* implicit */ union_pw_aff(const union_pw_aff &obj);
4412 inline /* implicit */ union_pw_aff(isl::aff aff);
4413 inline /* implicit */ union_pw_aff(isl::pw_aff pa);
4414 inline explicit union_pw_aff(isl::ctx ctx, const std::string &str);
4415 inline explicit union_pw_aff(isl::union_set domain, isl::val v);
4419 inline __isl_give isl_union_pw_aff *copy() && = delete;
4422 inline bool is_null() const;
4423 inline isl::ctx ctx() const;
4424
4425 inline isl::multi_union_pw_aff add(const isl::multi_union_pw_aff &multi2) const;
4426 inline isl::union_pw_aff add(isl::union_pw_aff upa2) const;
4427 inline isl::union_pw_multi_aff add(const isl::union_pw_multi_aff &upma2) const;
4428 inline isl::union_pw_aff add(const isl::aff &upa2) const;
4429 inline isl::union_pw_aff add(const isl::pw_aff &upa2) const;
4431 inline isl::union_pw_multi_aff apply(const isl::union_pw_multi_aff &upma2) const;
4434 inline isl::union_map as_union_map() const;
4435 inline isl::union_pw_aff at(int pos) const;
4436 inline isl::union_set bind(const isl::multi_id &tuple) const;
4437 inline isl::union_set bind(isl::id id) const;
4438 inline isl::union_set bind(const std::string &id) const;
4439 inline isl::union_pw_aff coalesce() const;
4440 inline class size dim(isl::dim type) const;
4441 inline isl::union_set domain() const;
4442 static inline isl::union_pw_aff empty(isl::space space);
4446 inline stat foreach_pw_aff(const std::function<stat(isl::pw_aff)> &fn) const;
4448 inline boolean has_range_tuple_id() const;
4454 inline boolean involves_locals() const;
4455 inline boolean involves_nan() const;
4456 inline boolean isa_pw_multi_aff() const;
4457 inline isl::union_pw_aff_list list() const;
4458 inline isl::multi_union_pw_aff neg() const;
4459 inline boolean plain_is_empty() const;
4460 inline boolean plain_is_equal(const isl::multi_union_pw_aff &multi2) const;
4468 inline isl::id range_tuple_id() const;
4471 inline isl::multi_union_pw_aff scale(const isl::multi_val &mv) const;
4472 inline isl::multi_union_pw_aff scale(const isl::val &v) const;
4473 inline isl::multi_union_pw_aff scale(long v) const;
4474 inline isl::multi_union_pw_aff scale_down(const isl::multi_val &mv) const;
4475 inline isl::multi_union_pw_aff scale_down(const isl::val &v) const;
4476 inline isl::multi_union_pw_aff scale_down(long v) const;
4477 inline isl::multi_union_pw_aff set_at(int pos, const isl::union_pw_aff &el) const;
4478 inline isl::multi_union_pw_aff set_range_tuple(const isl::id &id) const;
4479 inline isl::multi_union_pw_aff set_range_tuple(const std::string &id) const;
4480 inline isl::multi_union_pw_aff set_union_pw_aff(int pos, const isl::union_pw_aff &el) const;
4481 inline class size size() const;
4482 inline isl::space space() const;
4483 inline isl::space get_space() const;
4484 inline isl::multi_union_pw_aff sub(const isl::multi_union_pw_aff &multi2) const;
4485 inline isl::union_pw_aff sub(isl::union_pw_aff upa2) const;
4486 inline isl::union_pw_multi_aff sub(const isl::union_pw_multi_aff &upma2) const;
4487 inline isl::union_pw_aff sub(const isl::aff &upa2) const;
4488 inline isl::union_pw_aff sub(const isl::pw_aff &upa2) const;
4495 inline isl::union_pw_aff union_add(const isl::aff &upa2) const;
4496 inline isl::union_pw_aff union_add(const isl::pw_aff &upa2) const;
4497};
4498
4499// declarations for isl::union_pw_aff_list
4500inline union_pw_aff_list manage(__isl_take isl_union_pw_aff_list *ptr);
4501inline union_pw_aff_list manage_copy(__isl_keep isl_union_pw_aff_list *ptr);
4502
4503class union_pw_aff_list {
4504 friend inline union_pw_aff_list manage(__isl_take isl_union_pw_aff_list *ptr);
4505 friend inline union_pw_aff_list manage_copy(__isl_keep isl_union_pw_aff_list *ptr);
4506
4507protected:
4508 isl_union_pw_aff_list *ptr = nullptr;
4509
4510 inline explicit union_pw_aff_list(__isl_take isl_union_pw_aff_list *ptr);
4511
4512public:
4513 inline /* implicit */ union_pw_aff_list();
4514 inline /* implicit */ union_pw_aff_list(const union_pw_aff_list &obj);
4515 inline explicit union_pw_aff_list(isl::ctx ctx, int n);
4517 inline explicit union_pw_aff_list(isl::ctx ctx, const std::string &str);
4520 inline __isl_give isl_union_pw_aff_list *copy() const &;
4521 inline __isl_give isl_union_pw_aff_list *copy() && = delete;
4522 inline __isl_keep isl_union_pw_aff_list *get() const;
4523 inline __isl_give isl_union_pw_aff_list *release();
4524 inline bool is_null() const;
4525 inline isl::ctx ctx() const;
4526
4528 inline isl::union_pw_aff at(int index) const;
4529 inline isl::union_pw_aff get_at(int index) const;
4530 inline isl::union_pw_aff_list clear() const;
4532 inline isl::union_pw_aff_list drop(unsigned int first, unsigned int n) const;
4533 inline stat foreach(const std::function<stat(isl::union_pw_aff)> &fn) const;
4534 inline isl::union_pw_aff_list insert(unsigned int pos, isl::union_pw_aff el) const;
4535 inline class size size() const;
4536};
4537
4538// declarations for isl::union_pw_multi_aff
4541
4542class union_pw_multi_aff {
4545
4546protected:
4547 isl_union_pw_multi_aff *ptr = nullptr;
4548
4550
4551public:
4552 inline /* implicit */ union_pw_multi_aff();
4553 inline /* implicit */ union_pw_multi_aff(const union_pw_multi_aff &obj);
4554 inline explicit union_pw_multi_aff(isl::union_set uset);
4555 inline /* implicit */ union_pw_multi_aff(isl::multi_aff ma);
4557 inline explicit union_pw_multi_aff(isl::union_map umap);
4558 inline /* implicit */ union_pw_multi_aff(isl::union_pw_aff upa);
4559 inline explicit union_pw_multi_aff(isl::ctx ctx, const std::string &str);
4566 inline bool is_null() const;
4567 inline isl::ctx ctx() const;
4568
4574 inline isl::union_map as_union_map() const;
4576 inline isl::union_set domain() const;
4577 static inline isl::union_pw_multi_aff empty(isl::space space);
4587 inline boolean involves_locals() const;
4588 inline boolean isa_pw_multi_aff() const;
4589 inline boolean plain_is_empty() const;
4597 inline isl::space space() const;
4598 inline isl::space get_space() const;
4603};
4604
4605// declarations for isl::union_set
4608
4609class union_set {
4612
4613protected:
4614 isl_union_set *ptr = nullptr;
4615
4617
4618public:
4619 inline /* implicit */ union_set();
4620 inline /* implicit */ union_set(const union_set &obj);
4621 inline /* implicit */ union_set(isl::basic_set bset);
4622 inline /* implicit */ union_set(isl::point pnt);
4623 inline /* implicit */ union_set(isl::set set);
4624 inline explicit union_set(isl::ctx ctx, const std::string &str);
4626 inline ~union_set();
4627 inline __isl_give isl_union_set *copy() const &;
4628 inline __isl_give isl_union_set *copy() && = delete;
4631 inline bool is_null() const;
4632 inline isl::ctx ctx() const;
4633
4634 inline isl::union_set affine_hull() const;
4635 inline isl::union_set apply(isl::union_map umap) const;
4636 inline isl::set as_set() const;
4637 inline isl::union_set coalesce() const;
4638 inline isl::union_set compute_divs() const;
4639 inline boolean contains(const isl::space &space) const;
4641 static inline isl::union_set empty(isl::ctx ctx);
4642 inline boolean every_set(const std::function<boolean(isl::set)> &test) const;
4644 inline stat foreach_point(const std::function<stat(isl::point)> &fn) const;
4645 inline stat foreach_set(const std::function<stat(isl::set)> &fn) const;
4648 inline isl::union_map identity() const;
4650 inline isl::union_set intersect(isl::union_set uset2) const;
4652 inline boolean is_disjoint(const isl::union_set &uset2) const;
4653 inline boolean is_empty() const;
4654 inline boolean is_equal(const isl::union_set &uset2) const;
4655 inline boolean is_strict_subset(const isl::union_set &uset2) const;
4656 inline boolean is_subset(const isl::union_set &uset2) const;
4657 inline boolean isa_set() const;
4658 inline isl::union_set lexmax() const;
4659 inline isl::union_set lexmin() const;
4660 inline isl::set params() const;
4665 inline isl::point sample_point() const;
4666 inline isl::set_list set_list() const;
4667 inline isl::set_list get_set_list() const;
4668 inline isl::space space() const;
4669 inline isl::space get_space() const;
4670 inline isl::union_set subtract(isl::union_set uset2) const;
4671 inline isl::union_set_list to_list() const;
4672 inline isl::union_set unite(isl::union_set uset2) const;
4673 inline isl::union_set universe() const;
4674 inline isl::union_map unwrap() const;
4675};
4676
4677// declarations for isl::union_set_list
4680
4681class union_set_list {
4684
4685protected:
4686 isl_union_set_list *ptr = nullptr;
4687
4689
4690public:
4691 inline /* implicit */ union_set_list();
4692 inline /* implicit */ union_set_list(const union_set_list &obj);
4693 inline explicit union_set_list(isl::ctx ctx, int n);
4694 inline explicit union_set_list(isl::union_set el);
4695 inline explicit union_set_list(isl::ctx ctx, const std::string &str);
4699 inline __isl_give isl_union_set_list *copy() && = delete;
4702 inline bool is_null() const;
4703 inline isl::ctx ctx() const;
4704
4705 inline isl::union_set_list add(isl::union_set el) const;
4706 inline isl::union_set at(int index) const;
4707 inline isl::union_set get_at(int index) const;
4708 inline isl::union_set_list clear() const;
4710 inline isl::union_set_list drop(unsigned int first, unsigned int n) const;
4711 inline stat foreach(const std::function<stat(isl::union_set)> &fn) const;
4712 inline isl::union_set_list insert(unsigned int pos, isl::union_set el) const;
4713 inline class size size() const;
4714};
4715
4716// declarations for isl::val
4719
4720class val {
4721 friend inline val manage(__isl_take isl_val *ptr);
4722 friend inline val manage_copy(__isl_keep isl_val *ptr);
4723
4724protected:
4725 isl_val *ptr = nullptr;
4726
4727 inline explicit val(__isl_take isl_val *ptr);
4728
4729public:
4730 inline /* implicit */ val();
4731 inline /* implicit */ val(const val &obj);
4732 inline explicit val(isl::ctx ctx, long i);
4733 inline explicit val(isl::ctx ctx, const std::string &str);
4735 inline ~val();
4736 inline __isl_give isl_val *copy() const &;
4737 inline __isl_give isl_val *copy() && = delete;
4738 inline __isl_keep isl_val *get() const;
4740 inline bool is_null() const;
4741 inline isl::ctx ctx() const;
4742
4743 inline isl::val abs() const;
4744 inline boolean abs_eq(const isl::val &v2) const;
4745 inline boolean abs_eq(long v2) const;
4746 inline isl::val add(isl::val v2) const;
4747 inline isl::val add(long v2) const;
4748 inline isl::val ceil() const;
4749 inline int cmp_si(long i) const;
4750 inline long den_si() const;
4751 inline long get_den_si() const;
4752 inline isl::val div(isl::val v2) const;
4753 inline isl::val div(long v2) const;
4754 inline boolean eq(const isl::val &v2) const;
4755 inline boolean eq(long v2) const;
4756 inline isl::val floor() const;
4757 inline isl::val gcd(isl::val v2) const;
4758 inline isl::val gcd(long v2) const;
4759 inline boolean ge(const isl::val &v2) const;
4760 inline boolean ge(long v2) const;
4761 inline boolean gt(const isl::val &v2) const;
4762 inline boolean gt(long v2) const;
4763 static inline isl::val infty(isl::ctx ctx);
4764 static inline isl::val int_from_ui(isl::ctx ctx, unsigned long u);
4765 inline isl::val inv() const;
4766 inline boolean is_divisible_by(const isl::val &v2) const;
4767 inline boolean is_divisible_by(long v2) const;
4768 inline boolean is_infty() const;
4769 inline boolean is_int() const;
4770 inline boolean is_nan() const;
4771 inline boolean is_neg() const;
4772 inline boolean is_neginfty() const;
4773 inline boolean is_negone() const;
4774 inline boolean is_nonneg() const;
4775 inline boolean is_nonpos() const;
4776 inline boolean is_one() const;
4777 inline boolean is_pos() const;
4778 inline boolean is_rat() const;
4779 inline boolean is_zero() const;
4780 inline boolean le(const isl::val &v2) const;
4781 inline boolean le(long v2) const;
4782 inline boolean lt(const isl::val &v2) const;
4783 inline boolean lt(long v2) const;
4784 inline isl::val max(isl::val v2) const;
4785 inline isl::val max(long v2) const;
4786 inline isl::val min(isl::val v2) const;
4787 inline isl::val min(long v2) const;
4788 inline isl::val mod(isl::val v2) const;
4789 inline isl::val mod(long v2) const;
4790 inline isl::val mul(isl::val v2) const;
4791 inline isl::val mul(long v2) const;
4792 static inline isl::val nan(isl::ctx ctx);
4793 inline boolean ne(const isl::val &v2) const;
4794 inline boolean ne(long v2) const;
4795 inline isl::val neg() const;
4796 static inline isl::val neginfty(isl::ctx ctx);
4797 static inline isl::val negone(isl::ctx ctx);
4798 inline long num_si() const;
4799 inline long get_num_si() const;
4800 static inline isl::val one(isl::ctx ctx);
4801 inline isl::val pow2() const;
4802 inline int sgn() const;
4803 inline isl::val sub(isl::val v2) const;
4804 inline isl::val sub(long v2) const;
4805 inline isl::val_list to_list() const;
4806 inline isl::val trunc() const;
4807 static inline isl::val zero(isl::ctx ctx);
4808};
4809
4810// declarations for isl::val_list
4811inline val_list manage(__isl_take isl_val_list *ptr);
4812inline val_list manage_copy(__isl_keep isl_val_list *ptr);
4813
4814class val_list {
4815 friend inline val_list manage(__isl_take isl_val_list *ptr);
4816 friend inline val_list manage_copy(__isl_keep isl_val_list *ptr);
4817
4818protected:
4819 isl_val_list *ptr = nullptr;
4820
4821 inline explicit val_list(__isl_take isl_val_list *ptr);
4822
4823public:
4824 inline /* implicit */ val_list();
4825 inline /* implicit */ val_list(const val_list &obj);
4826 inline explicit val_list(isl::ctx ctx, int n);
4827 inline explicit val_list(isl::val el);
4828 inline explicit val_list(isl::ctx ctx, const std::string &str);
4830 inline ~val_list();
4831 inline __isl_give isl_val_list *copy() const &;
4832 inline __isl_give isl_val_list *copy() && = delete;
4833 inline __isl_keep isl_val_list *get() const;
4834 inline __isl_give isl_val_list *release();
4835 inline bool is_null() const;
4836 inline isl::ctx ctx() const;
4837
4838 inline isl::val_list add(isl::val el) const;
4839 inline isl::val_list add(long el) const;
4840 inline isl::val at(int index) const;
4841 inline isl::val get_at(int index) const;
4842 inline isl::val_list clear() const;
4843 inline isl::val_list concat(isl::val_list list2) const;
4844 inline isl::val_list drop(unsigned int first, unsigned int n) const;
4845 inline stat foreach(const std::function<stat(isl::val)> &fn) const;
4846 inline isl::val_list insert(unsigned int pos, isl::val el) const;
4847 inline isl::val_list insert(unsigned int pos, long el) const;
4848 inline class size size() const;
4849};
4850
4851// implementations for isl::aff
4853 return aff(ptr);
4854}
4856 ptr = isl_aff_copy(ptr);
4857 return aff(ptr);
4858}
4859
4860aff::aff()
4861 : ptr(nullptr) {}
4862
4863aff::aff(const aff &obj)
4864 : ptr(nullptr)
4865{
4866 ptr = obj.copy();
4867}
4868
4870 : ptr(ptr) {}
4871
4872aff::aff(isl::ctx ctx, const std::string &str)
4873{
4874 auto res = isl_aff_read_from_str(ctx.release(), str.c_str());
4875 ptr = res;
4876}
4877
4879{
4881 ptr = res;
4882}
4883
4885{
4886 auto res = isl_aff_zero_on_domain(ls.release());
4887 ptr = res;
4888}
4889
4891 std::swap(this->ptr, obj.ptr);
4892 return *this;
4893}
4894
4895aff::~aff() {
4896 if (ptr)
4898}
4899
4900__isl_give isl_aff *aff::copy() const & {
4901 return isl_aff_copy(ptr);
4902}
4903
4904__isl_keep isl_aff *aff::get() const {
4905 return ptr;
4906}
4907
4909 isl_aff *tmp = ptr;
4910 ptr = nullptr;
4911 return tmp;
4912}
4913
4914bool aff::is_null() const {
4915 return ptr == nullptr;
4916}
4917
4918isl::ctx aff::ctx() const {
4919 return isl::ctx(isl_aff_get_ctx(ptr));
4920}
4921
4922isl::aff aff::add(isl::aff aff2) const
4923{
4924 auto res = isl_aff_add(copy(), aff2.release());
4925 return manage(res);
4926}
4927
4928isl::multi_aff aff::add(const isl::multi_aff &multi2) const
4929{
4930 return isl::multi_aff(*this).add(multi2);
4931}
4932
4933isl::multi_pw_aff aff::add(const isl::multi_pw_aff &multi2) const
4934{
4935 return isl::pw_aff(*this).add(multi2);
4936}
4937
4938isl::multi_union_pw_aff aff::add(const isl::multi_union_pw_aff &multi2) const
4939{
4940 return isl::pw_aff(*this).add(multi2);
4941}
4942
4943isl::pw_aff aff::add(const isl::pw_aff &pwaff2) const
4944{
4945 return isl::pw_aff(*this).add(pwaff2);
4946}
4947
4948isl::pw_multi_aff aff::add(const isl::pw_multi_aff &pma2) const
4949{
4950 return isl::pw_aff(*this).add(pma2);
4951}
4952
4953isl::union_pw_aff aff::add(const isl::union_pw_aff &upa2) const
4954{
4955 return isl::pw_aff(*this).add(upa2);
4956}
4957
4958isl::union_pw_multi_aff aff::add(const isl::union_pw_multi_aff &upma2) const
4959{
4960 return isl::pw_aff(*this).add(upma2);
4961}
4962
4963isl::aff aff::add_constant(isl::val v) const
4964{
4966 return manage(res);
4967}
4968
4969isl::aff aff::add_constant(long v) const
4970{
4971 return this->add_constant(isl::val(ctx(), v));
4972}
4973
4974isl::multi_aff aff::add_constant(const isl::multi_val &mv) const
4975{
4976 return isl::multi_aff(*this).add_constant(mv);
4977}
4978
4980{
4981 auto res = isl_aff_add_constant_si(copy(), v);
4982 return manage(res);
4983}
4984
4986{
4987 return isl::pw_aff(*this).add_dims(type, n);
4988}
4989
4991{
4992 return isl::pw_aff(*this).add_pw_multi_aff(pma);
4993}
4994
4996{
4997 return isl::pw_aff(*this).apply(upma2);
4998}
4999
5000isl::aff aff::as_aff() const
5001{
5002 return isl::pw_aff(*this).as_aff();
5003}
5004
5005isl::map aff::as_map() const
5006{
5007 return isl::pw_aff(*this).as_map();
5008}
5009
5010isl::multi_aff aff::as_multi_aff() const
5011{
5012 return isl::pw_aff(*this).as_multi_aff();
5013}
5014
5015isl::multi_union_pw_aff aff::as_multi_union_pw_aff() const
5016{
5017 return isl::pw_aff(*this).as_multi_union_pw_aff();
5018}
5019
5020isl::pw_multi_aff aff::as_pw_multi_aff() const
5021{
5022 return isl::pw_aff(*this).as_pw_multi_aff();
5023}
5024
5025isl::set aff::as_set() const
5026{
5027 return isl::multi_aff(*this).as_set();
5028}
5029
5030isl::union_map aff::as_union_map() const
5031{
5032 return isl::pw_aff(*this).as_union_map();
5033}
5034
5035isl::aff aff::at(int pos) const
5036{
5037 return isl::multi_aff(*this).at(pos);
5038}
5039
5040isl::basic_set aff::bind(isl::id id) const
5041{
5042 auto res = isl_aff_bind_id(copy(), id.release());
5043 return manage(res);
5044}
5045
5046isl::basic_set aff::bind(const std::string &id) const
5047{
5048 return this->bind(isl::id(ctx(), id));
5049}
5050
5051isl::basic_set aff::bind(const isl::multi_id &tuple) const
5052{
5053 return isl::multi_aff(*this).bind(tuple);
5054}
5055
5056isl::pw_aff aff::bind_domain(const isl::multi_id &tuple) const
5057{
5058 return isl::pw_aff(*this).bind_domain(tuple);
5059}
5060
5061isl::pw_aff aff::bind_domain_wrapped_domain(const isl::multi_id &tuple) const
5062{
5063 return isl::pw_aff(*this).bind_domain_wrapped_domain(tuple);
5064}
5065
5066isl::aff aff::ceil() const
5067{
5068 auto res = isl_aff_ceil(copy());
5069 return manage(res);
5070}
5071
5072isl::pw_aff aff::coalesce() const
5073{
5074 return isl::pw_aff(*this).coalesce();
5075}
5076
5077isl::pw_aff aff::cond(const isl::pw_aff &pwaff_true, const isl::pw_aff &pwaff_false) const
5078{
5079 return isl::pw_aff(*this).cond(pwaff_true, pwaff_false);
5080}
5081
5082isl::multi_val aff::constant_multi_val() const
5083{
5084 return isl::multi_aff(*this).constant_multi_val();
5085}
5086
5087isl::val aff::constant_val() const
5088{
5090 return manage(res);
5091}
5092
5093isl::val aff::get_constant_val() const
5094{
5095 return constant_val();
5096}
5097
5099{
5101 return manage(res);
5102}
5103
5105{
5106 return denominator_val();
5107}
5108
5110{
5111 return isl::multi_aff(*this).dim(type);
5112}
5113
5115{
5116 return isl::pw_aff(*this).dim_id(type, pos);
5117}
5118
5119isl::aff aff::div(isl::aff aff2) const
5120{
5121 auto res = isl_aff_div(copy(), aff2.release());
5122 return manage(res);
5123}
5124
5125isl::pw_aff aff::div(const isl::pw_aff &pa2) const
5126{
5127 return isl::pw_aff(*this).div(pa2);
5128}
5129
5130isl::set aff::domain() const
5131{
5132 return isl::pw_aff(*this).domain();
5133}
5134
5136{
5137 return isl::pw_aff(*this).domain_space();
5138}
5139
5140isl::pw_multi_aff aff::drop_dims(isl::dim type, unsigned int first, unsigned int n) const
5141{
5142 return isl::pw_aff(*this).drop_dims(type, first, n);
5143}
5144
5145isl::set aff::eq_set(isl::aff aff2) const
5146{
5147 auto res = isl_aff_eq_set(copy(), aff2.release());
5148 return manage(res);
5149}
5150
5151isl::set aff::eq_set(const isl::pw_aff &pwaff2) const
5152{
5153 return isl::pw_aff(*this).eq_set(pwaff2);
5154}
5155
5156isl::val aff::eval(isl::point pnt) const
5157{
5158 auto res = isl_aff_eval(copy(), pnt.release());
5159 return manage(res);
5160}
5161
5162isl::pw_multi_aff aff::extract_pw_multi_aff(const isl::space &space) const
5163{
5164 return isl::pw_aff(*this).extract_pw_multi_aff(space);
5165}
5166
5167isl::multi_aff aff::flat_range_product(const isl::multi_aff &multi2) const
5168{
5169 return isl::multi_aff(*this).flat_range_product(multi2);
5170}
5171
5172isl::multi_pw_aff aff::flat_range_product(const isl::multi_pw_aff &multi2) const
5173{
5174 return isl::pw_aff(*this).flat_range_product(multi2);
5175}
5176
5177isl::multi_union_pw_aff aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const
5178{
5179 return isl::pw_aff(*this).flat_range_product(multi2);
5180}
5181
5182isl::pw_multi_aff aff::flat_range_product(const isl::pw_multi_aff &pma2) const
5183{
5184 return isl::pw_aff(*this).flat_range_product(pma2);
5185}
5186
5187isl::union_pw_multi_aff aff::flat_range_product(const isl::union_pw_multi_aff &upma2) const
5188{
5189 return isl::pw_aff(*this).flat_range_product(upma2);
5190}
5191
5192isl::aff aff::floor() const
5193{
5194 auto res = isl_aff_floor(copy());
5195 return manage(res);
5196}
5197
5198stat aff::foreach_piece(const std::function<stat(isl::set, isl::aff)> &fn) const
5199{
5200 return isl::pw_aff(*this).foreach_piece(fn);
5201}
5202
5204{
5205 return isl::pw_aff(*this).foreach_piece(fn);
5206}
5207
5208stat aff::foreach_pw_aff(const std::function<stat(isl::pw_aff)> &fn) const
5209{
5210 return isl::pw_aff(*this).foreach_pw_aff(fn);
5211}
5212
5213isl::set aff::ge_set(isl::aff aff2) const
5214{
5215 auto res = isl_aff_ge_set(copy(), aff2.release());
5216 return manage(res);
5217}
5218
5219isl::set aff::ge_set(const isl::pw_aff &pwaff2) const
5220{
5221 return isl::pw_aff(*this).ge_set(pwaff2);
5222}
5223
5224isl::aff aff::gist(isl::set context) const
5225{
5226 auto res = isl_aff_gist(copy(), context.release());
5227 return manage(res);
5228}
5229
5230isl::union_pw_aff aff::gist(const isl::union_set &context) const
5231{
5232 return isl::pw_aff(*this).gist(context);
5233}
5234
5235isl::aff aff::gist(const isl::basic_set &context) const
5236{
5237 return this->gist(isl::set(context));
5238}
5239
5240isl::aff aff::gist(const isl::point &context) const
5241{
5242 return this->gist(isl::set(context));
5243}
5244
5245isl::set aff::gt_set(isl::aff aff2) const
5246{
5247 auto res = isl_aff_gt_set(copy(), aff2.release());
5248 return manage(res);
5249}
5250
5251isl::set aff::gt_set(const isl::pw_aff &pwaff2) const
5252{
5253 return isl::pw_aff(*this).gt_set(pwaff2);
5254}
5255
5256boolean aff::has_range_tuple_id() const
5257{
5258 return isl::multi_aff(*this).has_range_tuple_id();
5259}
5260
5261isl::multi_aff aff::identity() const
5262{
5263 return isl::multi_aff(*this).identity();
5264}
5265
5266isl::pw_aff aff::insert_domain(const isl::space &domain) const
5267{
5268 return isl::pw_aff(*this).insert_domain(domain);
5269}
5270
5271isl::pw_aff aff::intersect_domain(const isl::set &set) const
5272{
5273 return isl::pw_aff(*this).intersect_domain(set);
5274}
5275
5276isl::union_pw_aff aff::intersect_domain(const isl::space &space) const
5277{
5278 return isl::pw_aff(*this).intersect_domain(space);
5279}
5280
5281isl::union_pw_aff aff::intersect_domain(const isl::union_set &uset) const
5282{
5283 return isl::pw_aff(*this).intersect_domain(uset);
5284}
5285
5286isl::union_pw_aff aff::intersect_domain_wrapped_domain(const isl::union_set &uset) const
5287{
5288 return isl::pw_aff(*this).intersect_domain_wrapped_domain(uset);
5289}
5290
5291isl::union_pw_aff aff::intersect_domain_wrapped_range(const isl::union_set &uset) const
5292{
5293 return isl::pw_aff(*this).intersect_domain_wrapped_range(uset);
5294}
5295
5296isl::pw_aff aff::intersect_params(const isl::set &set) const
5297{
5298 return isl::pw_aff(*this).intersect_params(set);
5299}
5300
5301boolean aff::involves_locals() const
5302{
5303 return isl::multi_aff(*this).involves_locals();
5304}
5305
5306boolean aff::involves_nan() const
5307{
5308 return isl::multi_aff(*this).involves_nan();
5309}
5310
5311boolean aff::involves_param(const isl::id &id) const
5312{
5313 return isl::pw_aff(*this).involves_param(id);
5314}
5315
5316boolean aff::involves_param(const std::string &id) const
5317{
5318 return this->involves_param(isl::id(ctx(), id));
5319}
5320
5321boolean aff::involves_param(const isl::id_list &list) const
5322{
5323 return isl::pw_aff(*this).involves_param(list);
5324}
5325
5326boolean aff::is_cst() const
5327{
5328 auto res = isl_aff_is_cst(get());
5329 return manage(res);
5330}
5331
5332boolean aff::is_equal(const isl::pw_aff &pa2) const
5333{
5334 return isl::pw_aff(*this).is_equal(pa2);
5335}
5336
5337boolean aff::isa_aff() const
5338{
5339 return isl::pw_aff(*this).isa_aff();
5340}
5341
5342boolean aff::isa_multi_aff() const
5343{
5344 return isl::pw_aff(*this).isa_multi_aff();
5345}
5346
5347boolean aff::isa_pw_multi_aff() const
5348{
5349 return isl::pw_aff(*this).isa_pw_multi_aff();
5350}
5351
5352isl::set aff::le_set(isl::aff aff2) const
5353{
5354 auto res = isl_aff_le_set(copy(), aff2.release());
5355 return manage(res);
5356}
5357
5358isl::set aff::le_set(const isl::pw_aff &pwaff2) const
5359{
5360 return isl::pw_aff(*this).le_set(pwaff2);
5361}
5362
5363isl::aff_list aff::list() const
5364{
5365 return isl::multi_aff(*this).list();
5366}
5367
5368isl::set aff::lt_set(isl::aff aff2) const
5369{
5370 auto res = isl_aff_lt_set(copy(), aff2.release());
5371 return manage(res);
5372}
5373
5374isl::set aff::lt_set(const isl::pw_aff &pwaff2) const
5375{
5376 return isl::pw_aff(*this).lt_set(pwaff2);
5377}
5378
5379isl::multi_pw_aff aff::max(const isl::multi_pw_aff &multi2) const
5380{
5381 return isl::pw_aff(*this).max(multi2);
5382}
5383
5384isl::pw_aff aff::max(const isl::pw_aff &pwaff2) const
5385{
5386 return isl::pw_aff(*this).max(pwaff2);
5387}
5388
5389isl::multi_val aff::max_multi_val() const
5390{
5391 return isl::pw_aff(*this).max_multi_val();
5392}
5393
5394isl::multi_pw_aff aff::min(const isl::multi_pw_aff &multi2) const
5395{
5396 return isl::pw_aff(*this).min(multi2);
5397}
5398
5399isl::pw_aff aff::min(const isl::pw_aff &pwaff2) const
5400{
5401 return isl::pw_aff(*this).min(pwaff2);
5402}
5403
5404isl::multi_val aff::min_multi_val() const
5405{
5406 return isl::pw_aff(*this).min_multi_val();
5407}
5408
5409isl::aff aff::mod(isl::val mod) const
5410{
5411 auto res = isl_aff_mod_val(copy(), mod.release());
5412 return manage(res);
5413}
5414
5415isl::aff aff::mod(long mod) const
5416{
5417 return this->mod(isl::val(ctx(), mod));
5418}
5419
5420isl::aff aff::mul(isl::aff aff2) const
5421{
5422 auto res = isl_aff_mul(copy(), aff2.release());
5423 return manage(res);
5424}
5425
5426isl::pw_aff aff::mul(const isl::pw_aff &pwaff2) const
5427{
5428 return isl::pw_aff(*this).mul(pwaff2);
5429}
5430
5431class size aff::n_piece() const
5432{
5433 return isl::pw_aff(*this).n_piece();
5434}
5435
5436isl::set aff::ne_set(isl::aff aff2) const
5437{
5438 auto res = isl_aff_ne_set(copy(), aff2.release());
5439 return manage(res);
5440}
5441
5442isl::set aff::ne_set(const isl::pw_aff &pwaff2) const
5443{
5444 return isl::pw_aff(*this).ne_set(pwaff2);
5445}
5446
5447isl::aff aff::neg() const
5448{
5449 auto res = isl_aff_neg(copy());
5450 return manage(res);
5451}
5452
5453boolean aff::plain_is_empty() const
5454{
5455 return isl::pw_aff(*this).plain_is_empty();
5456}
5457
5458boolean aff::plain_is_equal(const isl::multi_aff &multi2) const
5459{
5460 return isl::multi_aff(*this).plain_is_equal(multi2);
5461}
5462
5463boolean aff::plain_is_equal(const isl::multi_pw_aff &multi2) const
5464{
5465 return isl::pw_aff(*this).plain_is_equal(multi2);
5466}
5467
5468boolean aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
5469{
5470 return isl::pw_aff(*this).plain_is_equal(multi2);
5471}
5472
5473isl::pw_multi_aff aff::preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const
5474{
5475 return isl::pw_aff(*this).preimage_domain_wrapped_domain(pma2);
5476}
5477
5478isl::union_pw_multi_aff aff::preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const
5479{
5480 return isl::pw_aff(*this).preimage_domain_wrapped_domain(upma2);
5481}
5482
5483isl::multi_aff aff::product(const isl::multi_aff &multi2) const
5484{
5485 return isl::multi_aff(*this).product(multi2);
5486}
5487
5488isl::multi_pw_aff aff::product(const isl::multi_pw_aff &multi2) const
5489{
5490 return isl::pw_aff(*this).product(multi2);
5491}
5492
5493isl::pw_multi_aff aff::product(const isl::pw_multi_aff &pma2) const
5494{
5495 return isl::pw_aff(*this).product(pma2);
5496}
5497
5498isl::aff aff::pullback(isl::multi_aff ma) const
5499{
5500 auto res = isl_aff_pullback_multi_aff(copy(), ma.release());
5501 return manage(res);
5502}
5503
5504isl::pw_aff aff::pullback(const isl::multi_pw_aff &mpa) const
5505{
5506 return isl::pw_aff(*this).pullback(mpa);
5507}
5508
5509isl::pw_aff aff::pullback(const isl::pw_multi_aff &pma) const
5510{
5511 return isl::pw_aff(*this).pullback(pma);
5512}
5513
5514isl::union_pw_aff aff::pullback(const isl::union_pw_multi_aff &upma) const
5515{
5516 return isl::pw_aff(*this).pullback(upma);
5517}
5518
5519isl::aff aff::pullback(const isl::aff &ma) const
5520{
5521 return this->pullback(isl::multi_aff(ma));
5522}
5523
5524isl::pw_multi_aff_list aff::pw_multi_aff_list() const
5525{
5526 return isl::pw_aff(*this).pw_multi_aff_list();
5527}
5528
5529isl::pw_multi_aff aff::range_factor_domain() const
5530{
5531 return isl::pw_aff(*this).range_factor_domain();
5532}
5533
5534isl::pw_multi_aff aff::range_factor_range() const
5535{
5536 return isl::pw_aff(*this).range_factor_range();
5537}
5538
5539isl::multi_aff aff::range_product(const isl::multi_aff &multi2) const
5540{
5541 return isl::multi_aff(*this).range_product(multi2);
5542}
5543
5544isl::multi_pw_aff aff::range_product(const isl::multi_pw_aff &multi2) const
5545{
5546 return isl::pw_aff(*this).range_product(multi2);
5547}
5548
5549isl::multi_union_pw_aff aff::range_product(const isl::multi_union_pw_aff &multi2) const
5550{
5551 return isl::pw_aff(*this).range_product(multi2);
5552}
5553
5554isl::pw_multi_aff aff::range_product(const isl::pw_multi_aff &pma2) const
5555{
5556 return isl::pw_aff(*this).range_product(pma2);
5557}
5558
5559isl::union_pw_multi_aff aff::range_product(const isl::union_pw_multi_aff &upma2) const
5560{
5561 return isl::pw_aff(*this).range_product(upma2);
5562}
5563
5564isl::id aff::range_tuple_id() const
5565{
5566 return isl::multi_aff(*this).range_tuple_id();
5567}
5568
5569isl::multi_aff aff::reset_range_tuple_id() const
5570{
5571 return isl::multi_aff(*this).reset_range_tuple_id();
5572}
5573
5575{
5576 return isl::multi_aff(*this).reset_tuple_id(type);
5577}
5578
5580{
5581 auto res = isl_aff_scale_val(copy(), v.release());
5582 return manage(res);
5583}
5584
5585isl::aff aff::scale(long v) const
5586{
5587 return this->scale(isl::val(ctx(), v));
5588}
5589
5590isl::multi_aff aff::scale(const isl::multi_val &mv) const
5591{
5592 return isl::multi_aff(*this).scale(mv);
5593}
5594
5595isl::aff aff::scale_down(isl::val v) const
5596{
5597 auto res = isl_aff_scale_down_val(copy(), v.release());
5598 return manage(res);
5599}
5600
5601isl::aff aff::scale_down(long v) const
5602{
5603 return this->scale_down(isl::val(ctx(), v));
5604}
5605
5606isl::multi_aff aff::scale_down(const isl::multi_val &mv) const
5607{
5608 return isl::multi_aff(*this).scale_down(mv);
5609}
5610
5612{
5613 return isl::multi_aff(*this).set_aff(pos, el);
5614}
5615
5616isl::multi_aff aff::set_at(int pos, const isl::aff &el) const
5617{
5618 return isl::multi_aff(*this).set_at(pos, el);
5619}
5620
5621isl::multi_pw_aff aff::set_at(int pos, const isl::pw_aff &el) const
5622{
5623 return isl::pw_aff(*this).set_at(pos, el);
5624}
5625
5626isl::multi_union_pw_aff aff::set_at(int pos, const isl::union_pw_aff &el) const
5627{
5628 return isl::pw_aff(*this).set_at(pos, el);
5629}
5630
5632{
5633 auto res = isl_aff_set_constant_si(copy(), v);
5634 return manage(res);
5635}
5636
5638{
5639 return isl::pw_aff(*this).set_pw_aff(pos, el);
5640}
5641
5643{
5644 return isl::pw_aff(*this).set_pw_aff(pos, pa);
5645}
5646
5648{
5649 return isl::multi_aff(*this).set_range_tuple(id);
5650}
5651
5652isl::multi_aff aff::set_range_tuple(const std::string &id) const
5653{
5654 return this->set_range_tuple(isl::id(ctx(), id));
5655}
5656
5658{
5659 return isl::pw_aff(*this).set_tuple_id(type, id);
5660}
5661
5662isl::pw_aff aff::set_tuple_id(isl::dim type, const std::string &id) const
5663{
5664 return this->set_tuple_id(type, isl::id(ctx(), id));
5665}
5666
5668{
5669 return isl::pw_aff(*this).set_union_pw_aff(pos, el);
5670}
5671
5672class size aff::size() const
5673{
5674 return isl::multi_aff(*this).size();
5675}
5676
5677isl::space aff::space() const
5678{
5679 return isl::pw_aff(*this).space();
5680}
5681
5682isl::aff aff::sub(isl::aff aff2) const
5683{
5684 auto res = isl_aff_sub(copy(), aff2.release());
5685 return manage(res);
5686}
5687
5688isl::multi_aff aff::sub(const isl::multi_aff &multi2) const
5689{
5690 return isl::multi_aff(*this).sub(multi2);
5691}
5692
5693isl::multi_pw_aff aff::sub(const isl::multi_pw_aff &multi2) const
5694{
5695 return isl::pw_aff(*this).sub(multi2);
5696}
5697
5698isl::multi_union_pw_aff aff::sub(const isl::multi_union_pw_aff &multi2) const
5699{
5700 return isl::pw_aff(*this).sub(multi2);
5701}
5702
5703isl::pw_aff aff::sub(const isl::pw_aff &pwaff2) const
5704{
5705 return isl::pw_aff(*this).sub(pwaff2);
5706}
5707
5708isl::pw_multi_aff aff::sub(const isl::pw_multi_aff &pma2) const
5709{
5710 return isl::pw_aff(*this).sub(pma2);
5711}
5712
5713isl::union_pw_aff aff::sub(const isl::union_pw_aff &upa2) const
5714{
5715 return isl::pw_aff(*this).sub(upa2);
5716}
5717
5718isl::union_pw_multi_aff aff::sub(const isl::union_pw_multi_aff &upma2) const
5719{
5720 return isl::pw_aff(*this).sub(upma2);
5721}
5722
5723isl::pw_aff aff::subtract_domain(const isl::set &set) const
5724{
5725 return isl::pw_aff(*this).subtract_domain(set);
5726}
5727
5728isl::union_pw_aff aff::subtract_domain(const isl::space &space) const
5729{
5730 return isl::pw_aff(*this).subtract_domain(space);
5731}
5732
5733isl::union_pw_aff aff::subtract_domain(const isl::union_set &uset) const
5734{
5735 return isl::pw_aff(*this).subtract_domain(uset);
5736}
5737
5738isl::pw_aff aff::tdiv_q(const isl::pw_aff &pa2) const
5739{
5740 return isl::pw_aff(*this).tdiv_q(pa2);
5741}
5742
5743isl::pw_aff aff::tdiv_r(const isl::pw_aff &pa2) const
5744{
5745 return isl::pw_aff(*this).tdiv_r(pa2);
5746}
5747
5748isl::aff_list aff::to_list() const
5749{
5750 auto res = isl_aff_to_list(copy());
5751 return manage(res);
5752}
5753
5754isl::multi_pw_aff aff::to_multi_pw_aff() const
5755{
5756 return isl::multi_aff(*this).to_multi_pw_aff();
5757}
5758
5759isl::multi_union_pw_aff aff::to_multi_union_pw_aff() const
5760{
5761 return isl::multi_aff(*this).to_multi_union_pw_aff();
5762}
5763
5764isl::pw_multi_aff aff::to_pw_multi_aff() const
5765{
5766 return isl::multi_aff(*this).to_pw_multi_aff();
5767}
5768
5769isl::union_pw_aff aff::to_union_pw_aff() const
5770{
5771 return isl::pw_aff(*this).to_union_pw_aff();
5772}
5773
5774isl::union_pw_multi_aff aff::to_union_pw_multi_aff() const
5775{
5776 return isl::pw_aff(*this).to_union_pw_multi_aff();
5777}
5778
5780{
5781 return isl::pw_aff(*this).tuple_id(type);
5782}
5783
5785{
5787 return manage(res);
5788}
5789
5791{
5792 return isl::pw_aff(*this).union_add(mpa2);
5793}
5794
5795isl::multi_union_pw_aff aff::union_add(const isl::multi_union_pw_aff &mupa2) const
5796{
5797 return isl::pw_aff(*this).union_add(mupa2);
5798}
5799
5800isl::pw_aff aff::union_add(const isl::pw_aff &pwaff2) const
5801{
5802 return isl::pw_aff(*this).union_add(pwaff2);
5803}
5804
5805isl::pw_multi_aff aff::union_add(const isl::pw_multi_aff &pma2) const
5806{
5807 return isl::pw_aff(*this).union_add(pma2);
5808}
5809
5810isl::union_pw_aff aff::union_add(const isl::union_pw_aff &upa2) const
5811{
5812 return isl::pw_aff(*this).union_add(upa2);
5813}
5814
5815isl::union_pw_multi_aff aff::union_add(const isl::union_pw_multi_aff &upma2) const
5816{
5817 return isl::pw_aff(*this).union_add(upma2);
5818}
5819
5821{
5822 auto res = isl_aff_var_on_domain(ls.release(), static_cast<enum isl_dim_type>(type), pos);
5823 return manage(res);
5824}
5825
5827{
5829 return manage(res);
5830}
5831
5832inline std::ostream &operator<<(std::ostream &os, const aff &obj)
5833{
5834 char *str = isl_aff_to_str(obj.get());
5835 if (!str) {
5836 os.setstate(std::ios_base::badbit);
5837 return os;
5838 }
5839 os << str;
5840 free(str);
5841 return os;
5842}
5843
5844// implementations for isl::aff_list
5845aff_list manage(__isl_take isl_aff_list *ptr) {
5846 return aff_list(ptr);
5847}
5848aff_list manage_copy(__isl_keep isl_aff_list *ptr) {
5849 ptr = isl_aff_list_copy(ptr);
5850 return aff_list(ptr);
5851}
5852
5854 : ptr(nullptr) {}
5855
5857 : ptr(nullptr)
5858{
5859 ptr = obj.copy();
5860}
5861
5862aff_list::aff_list(__isl_take isl_aff_list *ptr)
5863 : ptr(ptr) {}
5864
5865aff_list::aff_list(isl::ctx ctx, int n)
5866{
5867 auto res = isl_aff_list_alloc(ctx.release(), n);
5868 ptr = res;
5869}
5870
5871aff_list::aff_list(isl::aff el)
5872{
5873 auto res = isl_aff_list_from_aff(el.release());
5874 ptr = res;
5875}
5876
5877aff_list::aff_list(isl::ctx ctx, const std::string &str)
5878{
5879 auto res = isl_aff_list_read_from_str(ctx.release(), str.c_str());
5880 ptr = res;
5881}
5882
5884 std::swap(this->ptr, obj.ptr);
5885 return *this;
5886}
5887
5889 if (ptr)
5890 isl_aff_list_free(ptr);
5891}
5892
5893__isl_give isl_aff_list *aff_list::copy() const & {
5894 return isl_aff_list_copy(ptr);
5895}
5896
5897__isl_keep isl_aff_list *aff_list::get() const {
5898 return ptr;
5899}
5900
5901__isl_give isl_aff_list *aff_list::release() {
5902 isl_aff_list *tmp = ptr;
5903 ptr = nullptr;
5904 return tmp;
5905}
5906
5907bool aff_list::is_null() const {
5908 return ptr == nullptr;
5909}
5910
5911isl::ctx aff_list::ctx() const {
5912 return isl::ctx(isl_aff_list_get_ctx(ptr));
5913}
5914
5915isl::aff_list aff_list::add(isl::aff el) const
5916{
5917 auto res = isl_aff_list_add(copy(), el.release());
5918 return manage(res);
5919}
5920
5921isl::aff aff_list::at(int index) const
5922{
5923 auto res = isl_aff_list_get_at(get(), index);
5924 return manage(res);
5925}
5926
5927isl::aff aff_list::get_at(int index) const
5928{
5929 return at(index);
5930}
5931
5932isl::aff_list aff_list::clear() const
5933{
5934 auto res = isl_aff_list_clear(copy());
5935 return manage(res);
5936}
5937
5938isl::aff_list aff_list::concat(isl::aff_list list2) const
5939{
5940 auto res = isl_aff_list_concat(copy(), list2.release());
5941 return manage(res);
5942}
5943
5944isl::aff_list aff_list::drop(unsigned int first, unsigned int n) const
5945{
5946 auto res = isl_aff_list_drop(copy(), first, n);
5947 return manage(res);
5948}
5949
5950stat aff_list::foreach(const std::function<stat(isl::aff)> &fn) const
5951{
5952 struct fn_data {
5953 std::function<stat(isl::aff)> func;
5954 } fn_data = { fn };
5955 auto fn_lambda = [](isl_aff *arg_0, void *arg_1) -> isl_stat {
5956 auto *data = static_cast<struct fn_data *>(arg_1);
5957 auto ret = (data->func)(manage(arg_0));
5958 return ret.release();
5959 };
5960 auto res = isl_aff_list_foreach(get(), fn_lambda, &fn_data);
5961 return manage(res);
5962}
5963
5964isl::aff_list aff_list::insert(unsigned int pos, isl::aff el) const
5965{
5966 auto res = isl_aff_list_insert(copy(), pos, el.release());
5967 return manage(res);
5968}
5969
5970class size aff_list::size() const
5971{
5972 auto res = isl_aff_list_size(get());
5973 return manage(res);
5974}
5975
5976inline std::ostream &operator<<(std::ostream &os, const aff_list &obj)
5977{
5978 char *str = isl_aff_list_to_str(obj.get());
5979 if (!str) {
5980 os.setstate(std::ios_base::badbit);
5981 return os;
5982 }
5983 os << str;
5984 free(str);
5985 return os;
5986}
5987
5988// implementations for isl::ast_build
5990 return ast_build(ptr);
5991}
5993 ptr = isl_ast_build_copy(ptr);
5994 return ast_build(ptr);
5995}
5996
5998 : ptr(nullptr) {}
5999
6001 : ptr(nullptr)
6002{
6003 ptr = obj.copy();
6004 copy_callbacks(obj);
6005}
6006
6008 : ptr(ptr) {}
6009
6010ast_build::ast_build(isl::ctx ctx)
6011{
6012 auto res = isl_ast_build_alloc(ctx.release());
6013 ptr = res;
6014}
6015
6017 std::swap(this->ptr, obj.ptr);
6019 return *this;
6020}
6021
6023 if (ptr)
6025}
6026
6028 return isl_ast_build_copy(ptr);
6029}
6030
6032 return ptr;
6033}
6034
6037 isl_die(ctx().get(), isl_error_invalid, "cannot release object with persistent callbacks", return nullptr);
6038 isl_ast_build *tmp = ptr;
6039 ptr = nullptr;
6040 return tmp;
6041}
6042
6043bool ast_build::is_null() const {
6044 return ptr == nullptr;
6045}
6046
6047isl::ctx ast_build::ctx() const {
6048 return isl::ctx(isl_ast_build_get_ctx(ptr));
6049}
6050
6052{
6053 at_each_domain_data = obj.at_each_domain_data;
6054 return *this;
6055}
6056
6058{
6059 auto *data = static_cast<struct at_each_domain_data *>(arg_2);
6060 auto ret = (data->func)(manage(arg_0), manage_copy(arg_1));
6061 return ret.release();
6062}
6063
6064void ast_build::set_at_each_domain_data(const std::function<isl::ast_node(isl::ast_node, isl::ast_build)> &fn)
6065{
6066 at_each_domain_data = std::make_shared<struct at_each_domain_data>();
6069}
6070
6071isl::ast_build ast_build::set_at_each_domain(const std::function<isl::ast_node(isl::ast_node, isl::ast_build)> &fn) const
6072{
6073 auto copy = *this;
6074 copy.set_at_each_domain_data(fn);
6075 return copy;
6076}
6077
6078isl::ast_expr ast_build::access_from(isl::multi_pw_aff mpa) const
6079{
6081 return manage(res);
6082}
6083
6084isl::ast_expr ast_build::access_from(isl::pw_multi_aff pma) const
6085{
6087 return manage(res);
6088}
6089
6090isl::ast_expr ast_build::call_from(isl::multi_pw_aff mpa) const
6091{
6093 return manage(res);
6094}
6095
6096isl::ast_expr ast_build::call_from(isl::pw_multi_aff pma) const
6097{
6098 auto res = isl_ast_build_call_from_pw_multi_aff(get(), pma.release());
6099 return manage(res);
6100}
6101
6102isl::ast_expr ast_build::expr_from(isl::pw_aff pa) const
6103{
6104 auto res = isl_ast_build_expr_from_pw_aff(get(), pa.release());
6105 return manage(res);
6106}
6107
6108isl::ast_expr ast_build::expr_from(isl::set set) const
6109{
6110 auto res = isl_ast_build_expr_from_set(get(), set.release());
6111 return manage(res);
6112}
6113
6114isl::ast_build ast_build::from_context(isl::set set)
6115{
6116 auto res = isl_ast_build_from_context(set.release());
6117 return manage(res);
6118}
6119
6120isl::ast_node ast_build::node_from(isl::schedule schedule) const
6121{
6122 auto res = isl_ast_build_node_from_schedule(get(), schedule.release());
6123 return manage(res);
6124}
6125
6126isl::ast_node ast_build::node_from_schedule_map(isl::union_map schedule) const
6127{
6129 return manage(res);
6130}
6131
6137
6139{
6141 return manage(res);
6142}
6143
6145{
6146 return schedule();
6147}
6148
6149// implementations for isl::ast_expr
6151 return ast_expr(ptr);
6152}
6154 ptr = isl_ast_expr_copy(ptr);
6155 return ast_expr(ptr);
6156}
6157
6159 : ptr(nullptr) {}
6160
6162 : ptr(nullptr)
6163{
6164 ptr = obj.copy();
6165}
6166
6168 : ptr(ptr) {}
6169
6171 std::swap(this->ptr, obj.ptr);
6172 return *this;
6173}
6174
6176 if (ptr)
6178}
6179
6181 return isl_ast_expr_copy(ptr);
6182}
6183
6185 return ptr;
6186}
6187
6189 isl_ast_expr *tmp = ptr;
6190 ptr = nullptr;
6191 return tmp;
6192}
6193
6194bool ast_expr::is_null() const {
6195 return ptr == nullptr;
6196}
6197
6198template <typename T, typename>
6199boolean ast_expr::isa_type(T subtype) const
6200{
6201 if (is_null())
6202 return boolean();
6203 return isl_ast_expr_get_type(get()) == subtype;
6204}
6205template <class T>
6206boolean ast_expr::isa() const
6207{
6208 return isa_type<decltype(T::type)>(T::type);
6209}
6210template <class T>
6211T ast_expr::as() const
6212{
6213 if (isa<T>().is_false())
6214 isl_die(ctx().get(), isl_error_invalid, "not an object of the requested subtype", return T());
6215 return T(copy());
6216}
6217
6218isl::ctx ast_expr::ctx() const {
6219 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6220}
6221
6223{
6224 auto res = isl_ast_expr_add(copy(), expr2.release());
6225 return manage(res);
6226}
6227
6229{
6231 return manage(res);
6232}
6233
6235{
6236 auto res = isl_ast_expr_eq(copy(), expr2.release());
6237 return manage(res);
6238}
6239
6245
6247{
6248 auto res = isl_ast_expr_get_id(get());
6249 return manage(res);
6250}
6251
6253{
6254 return id();
6255}
6256
6258{
6259 auto res = isl_ast_expr_le(copy(), expr2.release());
6260 return manage(res);
6261}
6262
6264{
6265 auto res = isl_ast_expr_mul(copy(), expr2.release());
6266 return manage(res);
6267}
6268
6270{
6272 return manage(res);
6273}
6274
6276{
6277 return op_arg(pos);
6278}
6279
6280std::string ast_expr::to_C_str() const
6281{
6282 auto res = isl_ast_expr_to_C_str(get());
6283 std::string tmp(res);
6284 free(res);
6285 return tmp;
6286}
6287
6289{
6290 auto res = isl_ast_expr_get_val(get());
6291 return manage(res);
6292}
6293
6295{
6296 return val();
6297}
6298
6299inline std::ostream &operator<<(std::ostream &os, const ast_expr &obj)
6300{
6301 char *str = isl_ast_expr_to_str(obj.get());
6302 if (!str) {
6303 os.setstate(std::ios_base::badbit);
6304 return os;
6305 }
6306 os << str;
6307 free(str);
6308 return os;
6309}
6310
6311// implementations for isl::ast_expr_id
6313 : ast_expr() {}
6314
6316 : ast_expr(obj)
6317{
6318}
6319
6321 : ast_expr(ptr) {}
6322
6324 std::swap(this->ptr, obj.ptr);
6325 return *this;
6326}
6327
6328isl::ctx ast_expr_id::ctx() const {
6329 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6330}
6331
6332isl::id ast_expr_id::id() const
6333{
6334 auto res = isl_ast_expr_id_get_id(get());
6335 return manage(res);
6336}
6337
6338isl::id ast_expr_id::get_id() const
6339{
6340 return id();
6341}
6342
6343inline std::ostream &operator<<(std::ostream &os, const ast_expr_id &obj)
6344{
6345 char *str = isl_ast_expr_to_str(obj.get());
6346 if (!str) {
6347 os.setstate(std::ios_base::badbit);
6348 return os;
6349 }
6350 os << str;
6351 free(str);
6352 return os;
6353}
6354
6355// implementations for isl::ast_expr_int
6357 : ast_expr() {}
6358
6360 : ast_expr(obj)
6361{
6362}
6363
6365 : ast_expr(ptr) {}
6366
6368 std::swap(this->ptr, obj.ptr);
6369 return *this;
6370}
6371
6372isl::ctx ast_expr_int::ctx() const {
6373 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6374}
6375
6376isl::val ast_expr_int::val() const
6377{
6379 return manage(res);
6380}
6381
6382isl::val ast_expr_int::get_val() const
6383{
6384 return val();
6385}
6386
6387inline std::ostream &operator<<(std::ostream &os, const ast_expr_int &obj)
6388{
6389 char *str = isl_ast_expr_to_str(obj.get());
6390 if (!str) {
6391 os.setstate(std::ios_base::badbit);
6392 return os;
6393 }
6394 os << str;
6395 free(str);
6396 return os;
6397}
6398
6399// implementations for isl::ast_expr_op
6401 : ast_expr() {}
6402
6404 : ast_expr(obj)
6405{
6406}
6407
6409 : ast_expr(ptr) {}
6410
6412 std::swap(this->ptr, obj.ptr);
6413 return *this;
6414}
6415
6416template <typename T, typename>
6417boolean ast_expr_op::isa_type(T subtype) const
6418{
6419 if (is_null())
6420 return boolean();
6421 return isl_ast_expr_op_get_type(get()) == subtype;
6422}
6423template <class T>
6424boolean ast_expr_op::isa() const
6425{
6426 return isa_type<decltype(T::type)>(T::type);
6427}
6428template <class T>
6429T ast_expr_op::as() const
6430{
6431 if (isa<T>().is_false())
6432 isl_die(ctx().get(), isl_error_invalid, "not an object of the requested subtype", return T());
6433 return T(copy());
6434}
6435
6436isl::ctx ast_expr_op::ctx() const {
6437 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6438}
6439
6440isl::ast_expr ast_expr_op::arg(int pos) const
6441{
6443 return manage(res);
6444}
6445
6446isl::ast_expr ast_expr_op::get_arg(int pos) const
6447{
6448 return arg(pos);
6449}
6450
6451class size ast_expr_op::n_arg() const
6452{
6454 return manage(res);
6455}
6456
6457class size ast_expr_op::get_n_arg() const
6458{
6459 return n_arg();
6460}
6461
6462inline std::ostream &operator<<(std::ostream &os, const ast_expr_op &obj)
6463{
6464 char *str = isl_ast_expr_to_str(obj.get());
6465 if (!str) {
6466 os.setstate(std::ios_base::badbit);
6467 return os;
6468 }
6469 os << str;
6470 free(str);
6471 return os;
6472}
6473
6474// implementations for isl::ast_expr_op_access
6476 : ast_expr_op() {}
6477
6479 : ast_expr_op(obj)
6480{
6481}
6482
6484 : ast_expr_op(ptr) {}
6485
6487 std::swap(this->ptr, obj.ptr);
6488 return *this;
6489}
6490
6491isl::ctx ast_expr_op_access::ctx() const {
6492 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6493}
6494
6495inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_access &obj)
6496{
6497 char *str = isl_ast_expr_to_str(obj.get());
6498 if (!str) {
6499 os.setstate(std::ios_base::badbit);
6500 return os;
6501 }
6502 os << str;
6503 free(str);
6504 return os;
6505}
6506
6507// implementations for isl::ast_expr_op_add
6509 : ast_expr_op() {}
6510
6512 : ast_expr_op(obj)
6513{
6514}
6515
6517 : ast_expr_op(ptr) {}
6518
6520 std::swap(this->ptr, obj.ptr);
6521 return *this;
6522}
6523
6524isl::ctx ast_expr_op_add::ctx() const {
6525 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6526}
6527
6528inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_add &obj)
6529{
6530 char *str = isl_ast_expr_to_str(obj.get());
6531 if (!str) {
6532 os.setstate(std::ios_base::badbit);
6533 return os;
6534 }
6535 os << str;
6536 free(str);
6537 return os;
6538}
6539
6540// implementations for isl::ast_expr_op_address_of
6542 : ast_expr_op() {}
6543
6545 : ast_expr_op(obj)
6546{
6547}
6548
6550 : ast_expr_op(ptr) {}
6551
6553 std::swap(this->ptr, obj.ptr);
6554 return *this;
6555}
6556
6557isl::ctx ast_expr_op_address_of::ctx() const {
6558 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6559}
6560
6561inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_address_of &obj)
6562{
6563 char *str = isl_ast_expr_to_str(obj.get());
6564 if (!str) {
6565 os.setstate(std::ios_base::badbit);
6566 return os;
6567 }
6568 os << str;
6569 free(str);
6570 return os;
6571}
6572
6573// implementations for isl::ast_expr_op_and
6575 : ast_expr_op() {}
6576
6578 : ast_expr_op(obj)
6579{
6580}
6581
6583 : ast_expr_op(ptr) {}
6584
6586 std::swap(this->ptr, obj.ptr);
6587 return *this;
6588}
6589
6590isl::ctx ast_expr_op_and::ctx() const {
6591 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6592}
6593
6594inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_and &obj)
6595{
6596 char *str = isl_ast_expr_to_str(obj.get());
6597 if (!str) {
6598 os.setstate(std::ios_base::badbit);
6599 return os;
6600 }
6601 os << str;
6602 free(str);
6603 return os;
6604}
6605
6606// implementations for isl::ast_expr_op_and_then
6608 : ast_expr_op() {}
6609
6611 : ast_expr_op(obj)
6612{
6613}
6614
6616 : ast_expr_op(ptr) {}
6617
6619 std::swap(this->ptr, obj.ptr);
6620 return *this;
6621}
6622
6623isl::ctx ast_expr_op_and_then::ctx() const {
6624 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6625}
6626
6627inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_and_then &obj)
6628{
6629 char *str = isl_ast_expr_to_str(obj.get());
6630 if (!str) {
6631 os.setstate(std::ios_base::badbit);
6632 return os;
6633 }
6634 os << str;
6635 free(str);
6636 return os;
6637}
6638
6639// implementations for isl::ast_expr_op_call
6641 : ast_expr_op() {}
6642
6644 : ast_expr_op(obj)
6645{
6646}
6647
6649 : ast_expr_op(ptr) {}
6650
6652 std::swap(this->ptr, obj.ptr);
6653 return *this;
6654}
6655
6656isl::ctx ast_expr_op_call::ctx() const {
6657 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6658}
6659
6660inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_call &obj)
6661{
6662 char *str = isl_ast_expr_to_str(obj.get());
6663 if (!str) {
6664 os.setstate(std::ios_base::badbit);
6665 return os;
6666 }
6667 os << str;
6668 free(str);
6669 return os;
6670}
6671
6672// implementations for isl::ast_expr_op_cond
6674 : ast_expr_op() {}
6675
6677 : ast_expr_op(obj)
6678{
6679}
6680
6682 : ast_expr_op(ptr) {}
6683
6685 std::swap(this->ptr, obj.ptr);
6686 return *this;
6687}
6688
6689isl::ctx ast_expr_op_cond::ctx() const {
6690 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6691}
6692
6693inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_cond &obj)
6694{
6695 char *str = isl_ast_expr_to_str(obj.get());
6696 if (!str) {
6697 os.setstate(std::ios_base::badbit);
6698 return os;
6699 }
6700 os << str;
6701 free(str);
6702 return os;
6703}
6704
6705// implementations for isl::ast_expr_op_div
6707 : ast_expr_op() {}
6708
6710 : ast_expr_op(obj)
6711{
6712}
6713
6715 : ast_expr_op(ptr) {}
6716
6718 std::swap(this->ptr, obj.ptr);
6719 return *this;
6720}
6721
6722isl::ctx ast_expr_op_div::ctx() const {
6723 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6724}
6725
6726inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_div &obj)
6727{
6728 char *str = isl_ast_expr_to_str(obj.get());
6729 if (!str) {
6730 os.setstate(std::ios_base::badbit);
6731 return os;
6732 }
6733 os << str;
6734 free(str);
6735 return os;
6736}
6737
6738// implementations for isl::ast_expr_op_eq
6740 : ast_expr_op() {}
6741
6743 : ast_expr_op(obj)
6744{
6745}
6746
6748 : ast_expr_op(ptr) {}
6749
6751 std::swap(this->ptr, obj.ptr);
6752 return *this;
6753}
6754
6755isl::ctx ast_expr_op_eq::ctx() const {
6756 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6757}
6758
6759inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_eq &obj)
6760{
6761 char *str = isl_ast_expr_to_str(obj.get());
6762 if (!str) {
6763 os.setstate(std::ios_base::badbit);
6764 return os;
6765 }
6766 os << str;
6767 free(str);
6768 return os;
6769}
6770
6771// implementations for isl::ast_expr_op_fdiv_q
6773 : ast_expr_op() {}
6774
6776 : ast_expr_op(obj)
6777{
6778}
6779
6781 : ast_expr_op(ptr) {}
6782
6784 std::swap(this->ptr, obj.ptr);
6785 return *this;
6786}
6787
6788isl::ctx ast_expr_op_fdiv_q::ctx() const {
6789 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6790}
6791
6792inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_fdiv_q &obj)
6793{
6794 char *str = isl_ast_expr_to_str(obj.get());
6795 if (!str) {
6796 os.setstate(std::ios_base::badbit);
6797 return os;
6798 }
6799 os << str;
6800 free(str);
6801 return os;
6802}
6803
6804// implementations for isl::ast_expr_op_ge
6806 : ast_expr_op() {}
6807
6809 : ast_expr_op(obj)
6810{
6811}
6812
6814 : ast_expr_op(ptr) {}
6815
6817 std::swap(this->ptr, obj.ptr);
6818 return *this;
6819}
6820
6821isl::ctx ast_expr_op_ge::ctx() const {
6822 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6823}
6824
6825inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_ge &obj)
6826{
6827 char *str = isl_ast_expr_to_str(obj.get());
6828 if (!str) {
6829 os.setstate(std::ios_base::badbit);
6830 return os;
6831 }
6832 os << str;
6833 free(str);
6834 return os;
6835}
6836
6837// implementations for isl::ast_expr_op_gt
6839 : ast_expr_op() {}
6840
6842 : ast_expr_op(obj)
6843{
6844}
6845
6847 : ast_expr_op(ptr) {}
6848
6850 std::swap(this->ptr, obj.ptr);
6851 return *this;
6852}
6853
6854isl::ctx ast_expr_op_gt::ctx() const {
6855 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6856}
6857
6858inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_gt &obj)
6859{
6860 char *str = isl_ast_expr_to_str(obj.get());
6861 if (!str) {
6862 os.setstate(std::ios_base::badbit);
6863 return os;
6864 }
6865 os << str;
6866 free(str);
6867 return os;
6868}
6869
6870// implementations for isl::ast_expr_op_le
6872 : ast_expr_op() {}
6873
6875 : ast_expr_op(obj)
6876{
6877}
6878
6880 : ast_expr_op(ptr) {}
6881
6883 std::swap(this->ptr, obj.ptr);
6884 return *this;
6885}
6886
6887isl::ctx ast_expr_op_le::ctx() const {
6888 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6889}
6890
6891inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_le &obj)
6892{
6893 char *str = isl_ast_expr_to_str(obj.get());
6894 if (!str) {
6895 os.setstate(std::ios_base::badbit);
6896 return os;
6897 }
6898 os << str;
6899 free(str);
6900 return os;
6901}
6902
6903// implementations for isl::ast_expr_op_lt
6905 : ast_expr_op() {}
6906
6908 : ast_expr_op(obj)
6909{
6910}
6911
6913 : ast_expr_op(ptr) {}
6914
6916 std::swap(this->ptr, obj.ptr);
6917 return *this;
6918}
6919
6920isl::ctx ast_expr_op_lt::ctx() const {
6921 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6922}
6923
6924inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_lt &obj)
6925{
6926 char *str = isl_ast_expr_to_str(obj.get());
6927 if (!str) {
6928 os.setstate(std::ios_base::badbit);
6929 return os;
6930 }
6931 os << str;
6932 free(str);
6933 return os;
6934}
6935
6936// implementations for isl::ast_expr_op_max
6938 : ast_expr_op() {}
6939
6941 : ast_expr_op(obj)
6942{
6943}
6944
6946 : ast_expr_op(ptr) {}
6947
6949 std::swap(this->ptr, obj.ptr);
6950 return *this;
6951}
6952
6953isl::ctx ast_expr_op_max::ctx() const {
6954 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6955}
6956
6957inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_max &obj)
6958{
6959 char *str = isl_ast_expr_to_str(obj.get());
6960 if (!str) {
6961 os.setstate(std::ios_base::badbit);
6962 return os;
6963 }
6964 os << str;
6965 free(str);
6966 return os;
6967}
6968
6969// implementations for isl::ast_expr_op_member
6971 : ast_expr_op() {}
6972
6974 : ast_expr_op(obj)
6975{
6976}
6977
6979 : ast_expr_op(ptr) {}
6980
6982 std::swap(this->ptr, obj.ptr);
6983 return *this;
6984}
6985
6986isl::ctx ast_expr_op_member::ctx() const {
6987 return isl::ctx(isl_ast_expr_get_ctx(ptr));
6988}
6989
6990inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_member &obj)
6991{
6992 char *str = isl_ast_expr_to_str(obj.get());
6993 if (!str) {
6994 os.setstate(std::ios_base::badbit);
6995 return os;
6996 }
6997 os << str;
6998 free(str);
6999 return os;
7000}
7001
7002// implementations for isl::ast_expr_op_min
7004 : ast_expr_op() {}
7005
7007 : ast_expr_op(obj)
7008{
7009}
7010
7012 : ast_expr_op(ptr) {}
7013
7015 std::swap(this->ptr, obj.ptr);
7016 return *this;
7017}
7018
7019isl::ctx ast_expr_op_min::ctx() const {
7020 return isl::ctx(isl_ast_expr_get_ctx(ptr));
7021}
7022
7023inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_min &obj)
7024{
7025 char *str = isl_ast_expr_to_str(obj.get());
7026 if (!str) {
7027 os.setstate(std::ios_base::badbit);
7028 return os;
7029 }
7030 os << str;
7031 free(str);
7032 return os;
7033}
7034
7035// implementations for isl::ast_expr_op_minus
7037 : ast_expr_op() {}
7038
7040 : ast_expr_op(obj)
7041{
7042}
7043
7045 : ast_expr_op(ptr) {}
7046
7048 std::swap(this->ptr, obj.ptr);
7049 return *this;
7050}
7051
7052isl::ctx ast_expr_op_minus::ctx() const {
7053 return isl::ctx(isl_ast_expr_get_ctx(ptr));
7054}
7055
7056inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_minus &obj)
7057{
7058 char *str = isl_ast_expr_to_str(obj.get());
7059 if (!str) {
7060 os.setstate(std::ios_base::badbit);
7061 return os;
7062 }
7063 os << str;
7064 free(str);
7065 return os;
7066}
7067
7068// implementations for isl::ast_expr_op_mul
7070 : ast_expr_op() {}
7071
7073 : ast_expr_op(obj)
7074{
7075}
7076
7078 : ast_expr_op(ptr) {}
7079
7081 std::swap(this->ptr, obj.ptr);
7082 return *this;
7083}
7084
7085isl::ctx ast_expr_op_mul::ctx() const {
7086 return isl::ctx(isl_ast_expr_get_ctx(ptr));
7087}
7088
7089inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_mul &obj)
7090{
7091 char *str = isl_ast_expr_to_str(obj.get());
7092 if (!str) {
7093 os.setstate(std::ios_base::badbit);
7094 return os;
7095 }
7096 os << str;
7097 free(str);
7098 return os;
7099}
7100
7101// implementations for isl::ast_expr_op_or
7103 : ast_expr_op() {}
7104
7106 : ast_expr_op(obj)
7107{
7108}
7109
7111 : ast_expr_op(ptr) {}
7112
7114 std::swap(this->ptr, obj.ptr);
7115 return *this;
7116}
7117
7118isl::ctx ast_expr_op_or::ctx() const {
7119 return isl::ctx(isl_ast_expr_get_ctx(ptr));
7120}
7121
7122inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_or &obj)
7123{
7124 char *str = isl_ast_expr_to_str(obj.get());
7125 if (!str) {
7126 os.setstate(std::ios_base::badbit);
7127 return os;
7128 }
7129 os << str;
7130 free(str);
7131 return os;
7132}
7133
7134// implementations for isl::ast_expr_op_or_else
7136 : ast_expr_op() {}
7137
7139 : ast_expr_op(obj)
7140{
7141}
7142
7144 : ast_expr_op(ptr) {}
7145
7147 std::swap(this->ptr, obj.ptr);
7148 return *this;
7149}
7150
7151isl::ctx ast_expr_op_or_else::ctx() const {
7152 return isl::ctx(isl_ast_expr_get_ctx(ptr));
7153}
7154
7155inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_or_else &obj)
7156{
7157 char *str = isl_ast_expr_to_str(obj.get());
7158 if (!str) {
7159 os.setstate(std::ios_base::badbit);
7160 return os;
7161 }
7162 os << str;
7163 free(str);
7164 return os;
7165}
7166
7167// implementations for isl::ast_expr_op_pdiv_q
7169 : ast_expr_op() {}
7170
7172 : ast_expr_op(obj)
7173{
7174}
7175
7177 : ast_expr_op(ptr) {}
7178
7180 std::swap(this->ptr, obj.ptr);
7181 return *this;
7182}
7183
7184isl::ctx ast_expr_op_pdiv_q::ctx() const {
7185 return isl::ctx(isl_ast_expr_get_ctx(ptr));
7186}
7187
7188inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_pdiv_q &obj)
7189{
7190 char *str = isl_ast_expr_to_str(obj.get());
7191 if (!str) {
7192 os.setstate(std::ios_base::badbit);
7193 return os;
7194 }
7195 os << str;
7196 free(str);
7197 return os;
7198}
7199
7200// implementations for isl::ast_expr_op_pdiv_r
7202 : ast_expr_op() {}
7203
7205 : ast_expr_op(obj)
7206{
7207}
7208
7210 : ast_expr_op(ptr) {}
7211
7213 std::swap(this->ptr, obj.ptr);
7214 return *this;
7215}
7216
7217isl::ctx ast_expr_op_pdiv_r::ctx() const {
7218 return isl::ctx(isl_ast_expr_get_ctx(ptr));
7219}
7220
7221inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_pdiv_r &obj)
7222{
7223 char *str = isl_ast_expr_to_str(obj.get());
7224 if (!str) {
7225 os.setstate(std::ios_base::badbit);
7226 return os;
7227 }
7228 os << str;
7229 free(str);
7230 return os;
7231}
7232
7233// implementations for isl::ast_expr_op_select
7235 : ast_expr_op() {}
7236
7238 : ast_expr_op(obj)
7239{
7240}
7241
7243 : ast_expr_op(ptr) {}
7244
7246 std::swap(this->ptr, obj.ptr);
7247 return *this;
7248}
7249
7250isl::ctx ast_expr_op_select::ctx() const {
7251 return isl::ctx(isl_ast_expr_get_ctx(ptr));
7252}
7253
7254inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_select &obj)
7255{
7256 char *str = isl_ast_expr_to_str(obj.get());
7257 if (!str) {
7258 os.setstate(std::ios_base::badbit);
7259 return os;
7260 }
7261 os << str;
7262 free(str);
7263 return os;
7264}
7265
7266// implementations for isl::ast_expr_op_sub
7268 : ast_expr_op() {}
7269
7271 : ast_expr_op(obj)
7272{
7273}
7274
7276 : ast_expr_op(ptr) {}
7277
7279 std::swap(this->ptr, obj.ptr);
7280 return *this;
7281}
7282
7283isl::ctx ast_expr_op_sub::ctx() const {
7284 return isl::ctx(isl_ast_expr_get_ctx(ptr));
7285}
7286
7287inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_sub &obj)
7288{
7289 char *str = isl_ast_expr_to_str(obj.get());
7290 if (!str) {
7291 os.setstate(std::ios_base::badbit);
7292 return os;
7293 }
7294 os << str;
7295 free(str);
7296 return os;
7297}
7298
7299// implementations for isl::ast_expr_op_zdiv_r
7301 : ast_expr_op() {}
7302
7304 : ast_expr_op(obj)
7305{
7306}
7307
7309 : ast_expr_op(ptr) {}
7310
7312 std::swap(this->ptr, obj.ptr);
7313 return *this;
7314}
7315
7316isl::ctx ast_expr_op_zdiv_r::ctx() const {
7317 return isl::ctx(isl_ast_expr_get_ctx(ptr));
7318}
7319
7320inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_zdiv_r &obj)
7321{
7322 char *str = isl_ast_expr_to_str(obj.get());
7323 if (!str) {
7324 os.setstate(std::ios_base::badbit);
7325 return os;
7326 }
7327 os << str;
7328 free(str);
7329 return os;
7330}
7331
7332// implementations for isl::ast_node
7334 return ast_node(ptr);
7335}
7337 ptr = isl_ast_node_copy(ptr);
7338 return ast_node(ptr);
7339}
7340
7342 : ptr(nullptr) {}
7343
7345 : ptr(nullptr)
7346{
7347 ptr = obj.copy();
7348}
7349
7351 : ptr(ptr) {}
7352
7354 std::swap(this->ptr, obj.ptr);
7355 return *this;
7356}
7357
7359 if (ptr)
7361}
7362
7364 return isl_ast_node_copy(ptr);
7365}
7366
7368 return ptr;
7369}
7370
7372 isl_ast_node *tmp = ptr;
7373 ptr = nullptr;
7374 return tmp;
7375}
7376
7377bool ast_node::is_null() const {
7378 return ptr == nullptr;
7379}
7380
7381template <typename T, typename>
7382boolean ast_node::isa_type(T subtype) const
7383{
7384 if (is_null())
7385 return boolean();
7386 return isl_ast_node_get_type(get()) == subtype;
7387}
7388template <class T>
7389boolean ast_node::isa() const
7390{
7391 return isa_type<decltype(T::type)>(T::type);
7392}
7393template <class T>
7394T ast_node::as() const
7395{
7396 if (isa<T>().is_false())
7397 isl_die(ctx().get(), isl_error_invalid, "not an object of the requested subtype", return T());
7398 return T(copy());
7399}
7400
7401isl::ctx ast_node::ctx() const {
7402 return isl::ctx(isl_ast_node_get_ctx(ptr));
7403}
7404
7406{
7408 return manage(res);
7409}
7410
7412{
7413 return annotation();
7414}
7415
7416std::string ast_node::to_C_str() const
7417{
7418 auto res = isl_ast_node_to_C_str(get());
7419 std::string tmp(res);
7420 free(res);
7421 return tmp;
7422}
7423
7425{
7426 auto res = isl_ast_node_to_list(copy());
7427 return manage(res);
7428}
7429
7430inline std::ostream &operator<<(std::ostream &os, const ast_node &obj)
7431{
7432 char *str = isl_ast_node_to_str(obj.get());
7433 if (!str) {
7434 os.setstate(std::ios_base::badbit);
7435 return os;
7436 }
7437 os << str;
7438 free(str);
7439 return os;
7440}
7441
7442// implementations for isl::ast_node_block
7444 : ast_node() {}
7445
7447 : ast_node(obj)
7448{
7449}
7450
7452 : ast_node(ptr) {}
7453
7455 std::swap(this->ptr, obj.ptr);
7456 return *this;
7457}
7458
7459isl::ctx ast_node_block::ctx() const {
7460 return isl::ctx(isl_ast_node_get_ctx(ptr));
7461}
7462
7463isl::ast_node_list ast_node_block::children() const
7464{
7466 return manage(res);
7467}
7468
7469isl::ast_node_list ast_node_block::get_children() const
7470{
7471 return children();
7472}
7473
7474inline std::ostream &operator<<(std::ostream &os, const ast_node_block &obj)
7475{
7476 char *str = isl_ast_node_to_str(obj.get());
7477 if (!str) {
7478 os.setstate(std::ios_base::badbit);
7479 return os;
7480 }
7481 os << str;
7482 free(str);
7483 return os;
7484}
7485
7486// implementations for isl::ast_node_for
7488 : ast_node() {}
7489
7491 : ast_node(obj)
7492{
7493}
7494
7496 : ast_node(ptr) {}
7497
7499 std::swap(this->ptr, obj.ptr);
7500 return *this;
7501}
7502
7503isl::ctx ast_node_for::ctx() const {
7504 return isl::ctx(isl_ast_node_get_ctx(ptr));
7505}
7506
7507isl::ast_node ast_node_for::body() const
7508{
7510 return manage(res);
7511}
7512
7513isl::ast_node ast_node_for::get_body() const
7514{
7515 return body();
7516}
7517
7518isl::ast_expr ast_node_for::cond() const
7519{
7521 return manage(res);
7522}
7523
7524isl::ast_expr ast_node_for::get_cond() const
7525{
7526 return cond();
7527}
7528
7529isl::ast_expr ast_node_for::inc() const
7530{
7532 return manage(res);
7533}
7534
7535isl::ast_expr ast_node_for::get_inc() const
7536{
7537 return inc();
7538}
7539
7540isl::ast_expr ast_node_for::init() const
7541{
7543 return manage(res);
7544}
7545
7546isl::ast_expr ast_node_for::get_init() const
7547{
7548 return init();
7549}
7550
7551boolean ast_node_for::is_degenerate() const
7552{
7554 return manage(res);
7555}
7556
7557isl::ast_expr ast_node_for::iterator() const
7558{
7560 return manage(res);
7561}
7562
7563isl::ast_expr ast_node_for::get_iterator() const
7564{
7565 return iterator();
7566}
7567
7568inline std::ostream &operator<<(std::ostream &os, const ast_node_for &obj)
7569{
7570 char *str = isl_ast_node_to_str(obj.get());
7571 if (!str) {
7572 os.setstate(std::ios_base::badbit);
7573 return os;
7574 }
7575 os << str;
7576 free(str);
7577 return os;
7578}
7579
7580// implementations for isl::ast_node_if
7582 : ast_node() {}
7583
7585 : ast_node(obj)
7586{
7587}
7588
7590 : ast_node(ptr) {}
7591
7593 std::swap(this->ptr, obj.ptr);
7594 return *this;
7595}
7596
7597isl::ctx ast_node_if::ctx() const {
7598 return isl::ctx(isl_ast_node_get_ctx(ptr));
7599}
7600
7601isl::ast_expr ast_node_if::cond() const
7602{
7604 return manage(res);
7605}
7606
7607isl::ast_expr ast_node_if::get_cond() const
7608{
7609 return cond();
7610}
7611
7612isl::ast_node ast_node_if::else_node() const
7613{
7615 return manage(res);
7616}
7617
7618isl::ast_node ast_node_if::get_else_node() const
7619{
7620 return else_node();
7621}
7622
7623boolean ast_node_if::has_else_node() const
7624{
7626 return manage(res);
7627}
7628
7629isl::ast_node ast_node_if::then_node() const
7630{
7632 return manage(res);
7633}
7634
7635isl::ast_node ast_node_if::get_then_node() const
7636{
7637 return then_node();
7638}
7639
7640inline std::ostream &operator<<(std::ostream &os, const ast_node_if &obj)
7641{
7642 char *str = isl_ast_node_to_str(obj.get());
7643 if (!str) {
7644 os.setstate(std::ios_base::badbit);
7645 return os;
7646 }
7647 os << str;
7648 free(str);
7649 return os;
7650}
7651
7652// implementations for isl::ast_node_list
7653ast_node_list manage(__isl_take isl_ast_node_list *ptr) {
7654 return ast_node_list(ptr);
7655}
7656ast_node_list manage_copy(__isl_keep isl_ast_node_list *ptr) {
7657 ptr = isl_ast_node_list_copy(ptr);
7658 return ast_node_list(ptr);
7659}
7660
7662 : ptr(nullptr) {}
7663
7665 : ptr(nullptr)
7666{
7667 ptr = obj.copy();
7668}
7669
7670ast_node_list::ast_node_list(__isl_take isl_ast_node_list *ptr)
7671 : ptr(ptr) {}
7672
7673ast_node_list::ast_node_list(isl::ctx ctx, int n)
7674{
7675 auto res = isl_ast_node_list_alloc(ctx.release(), n);
7676 ptr = res;
7677}
7678
7679ast_node_list::ast_node_list(isl::ast_node el)
7680{
7681 auto res = isl_ast_node_list_from_ast_node(el.release());
7682 ptr = res;
7683}
7684
7686 std::swap(this->ptr, obj.ptr);
7687 return *this;
7688}
7689
7691 if (ptr)
7692 isl_ast_node_list_free(ptr);
7693}
7694
7695__isl_give isl_ast_node_list *ast_node_list::copy() const & {
7696 return isl_ast_node_list_copy(ptr);
7697}
7698
7699__isl_keep isl_ast_node_list *ast_node_list::get() const {
7700 return ptr;
7701}
7702
7703__isl_give isl_ast_node_list *ast_node_list::release() {
7704 isl_ast_node_list *tmp = ptr;
7705 ptr = nullptr;
7706 return tmp;
7707}
7708
7709bool ast_node_list::is_null() const {
7710 return ptr == nullptr;
7711}
7712
7713isl::ctx ast_node_list::ctx() const {
7714 return isl::ctx(isl_ast_node_list_get_ctx(ptr));
7715}
7716
7717isl::ast_node_list ast_node_list::add(isl::ast_node el) const
7718{
7719 auto res = isl_ast_node_list_add(copy(), el.release());
7720 return manage(res);
7721}
7722
7723isl::ast_node ast_node_list::at(int index) const
7724{
7725 auto res = isl_ast_node_list_get_at(get(), index);
7726 return manage(res);
7727}
7728
7729isl::ast_node ast_node_list::get_at(int index) const
7730{
7731 return at(index);
7732}
7733
7734isl::ast_node_list ast_node_list::clear() const
7735{
7736 auto res = isl_ast_node_list_clear(copy());
7737 return manage(res);
7738}
7739
7740isl::ast_node_list ast_node_list::concat(isl::ast_node_list list2) const
7741{
7742 auto res = isl_ast_node_list_concat(copy(), list2.release());
7743 return manage(res);
7744}
7745
7746isl::ast_node_list ast_node_list::drop(unsigned int first, unsigned int n) const
7747{
7748 auto res = isl_ast_node_list_drop(copy(), first, n);
7749 return manage(res);
7750}
7751
7752stat ast_node_list::foreach(const std::function<stat(isl::ast_node)> &fn) const
7753{
7754 struct fn_data {
7755 std::function<stat(isl::ast_node)> func;
7756 } fn_data = { fn };
7757 auto fn_lambda = [](isl_ast_node *arg_0, void *arg_1) -> isl_stat {
7758 auto *data = static_cast<struct fn_data *>(arg_1);
7759 auto ret = (data->func)(manage(arg_0));
7760 return ret.release();
7761 };
7762 auto res = isl_ast_node_list_foreach(get(), fn_lambda, &fn_data);
7763 return manage(res);
7764}
7765
7767{
7768 auto res = isl_ast_node_list_insert(copy(), pos, el.release());
7769 return manage(res);
7770}
7771
7772class size ast_node_list::size() const
7773{
7774 auto res = isl_ast_node_list_size(get());
7775 return manage(res);
7776}
7777
7778inline std::ostream &operator<<(std::ostream &os, const ast_node_list &obj)
7779{
7780 char *str = isl_ast_node_list_to_str(obj.get());
7781 if (!str) {
7782 os.setstate(std::ios_base::badbit);
7783 return os;
7784 }
7785 os << str;
7786 free(str);
7787 return os;
7788}
7789
7790// implementations for isl::ast_node_mark
7792 : ast_node() {}
7793
7795 : ast_node(obj)
7796{
7797}
7798
7800 : ast_node(ptr) {}
7801
7803 std::swap(this->ptr, obj.ptr);
7804 return *this;
7805}
7806
7807isl::ctx ast_node_mark::ctx() const {
7808 return isl::ctx(isl_ast_node_get_ctx(ptr));
7809}
7810
7811isl::id ast_node_mark::id() const
7812{
7814 return manage(res);
7815}
7816
7817isl::id ast_node_mark::get_id() const
7818{
7819 return id();
7820}
7821
7822isl::ast_node ast_node_mark::node() const
7823{
7825 return manage(res);
7826}
7827
7828isl::ast_node ast_node_mark::get_node() const
7829{
7830 return node();
7831}
7832
7833inline std::ostream &operator<<(std::ostream &os, const ast_node_mark &obj)
7834{
7835 char *str = isl_ast_node_to_str(obj.get());
7836 if (!str) {
7837 os.setstate(std::ios_base::badbit);
7838 return os;
7839 }
7840 os << str;
7841 free(str);
7842 return os;
7843}
7844
7845// implementations for isl::ast_node_user
7847 : ast_node() {}
7848
7850 : ast_node(obj)
7851{
7852}
7853
7855 : ast_node(ptr) {}
7856
7858 std::swap(this->ptr, obj.ptr);
7859 return *this;
7860}
7861
7862isl::ctx ast_node_user::ctx() const {
7863 return isl::ctx(isl_ast_node_get_ctx(ptr));
7864}
7865
7866isl::ast_expr ast_node_user::expr() const
7867{
7869 return manage(res);
7870}
7871
7872isl::ast_expr ast_node_user::get_expr() const
7873{
7874 return expr();
7875}
7876
7877inline std::ostream &operator<<(std::ostream &os, const ast_node_user &obj)
7878{
7879 char *str = isl_ast_node_to_str(obj.get());
7880 if (!str) {
7881 os.setstate(std::ios_base::badbit);
7882 return os;
7883 }
7884 os << str;
7885 free(str);
7886 return os;
7887}
7888
7889// implementations for isl::basic_map
7891 return basic_map(ptr);
7892}
7894 ptr = isl_basic_map_copy(ptr);
7895 return basic_map(ptr);
7896}
7897
7899 : ptr(nullptr) {}
7900
7902 : ptr(nullptr)
7903{
7904 ptr = obj.copy();
7905}
7906
7908 : ptr(ptr) {}
7909
7910basic_map::basic_map(isl::ctx ctx, const std::string &str)
7911{
7912 auto res = isl_basic_map_read_from_str(ctx.release(), str.c_str());
7913 ptr = res;
7914}
7915
7917 std::swap(this->ptr, obj.ptr);
7918 return *this;
7919}
7920
7922 if (ptr)
7924}
7925
7927 return isl_basic_map_copy(ptr);
7928}
7929
7931 return ptr;
7932}
7933
7935 isl_basic_map *tmp = ptr;
7936 ptr = nullptr;
7937 return tmp;
7938}
7939
7940bool basic_map::is_null() const {
7941 return ptr == nullptr;
7942}
7943
7944isl::ctx basic_map::ctx() const {
7945 return isl::ctx(isl_basic_map_get_ctx(ptr));
7946}
7947
7949{
7950 return isl::map(*this).add_constraint(constraint);
7951}
7952
7954{
7955 return isl::map(*this).add_dims(type, n);
7956}
7957
7959{
7961 return manage(res);
7962}
7963
7965{
7966 return isl::map(*this).align_params(model);
7967}
7968
7970{
7971 auto res = isl_basic_map_apply_domain(copy(), bmap2.release());
7972 return manage(res);
7973}
7974
7976{
7977 return isl::map(*this).apply_domain(map2);
7978}
7979
7980isl::union_map basic_map::apply_domain(const isl::union_map &umap2) const
7981{
7982 return isl::map(*this).apply_domain(umap2);
7983}
7984
7985isl::basic_map basic_map::apply_range(isl::basic_map bmap2) const
7986{
7987 auto res = isl_basic_map_apply_range(copy(), bmap2.release());
7988 return manage(res);
7989}
7990
7991isl::map basic_map::apply_range(const isl::map &map2) const
7992{
7993 return isl::map(*this).apply_range(map2);
7994}
7995
7996isl::union_map basic_map::apply_range(const isl::union_map &umap2) const
7997{
7998 return isl::map(*this).apply_range(umap2);
7999}
8000
8001isl::map basic_map::as_map() const
8002{
8003 return isl::map(*this).as_map();
8004}
8005
8006isl::multi_union_pw_aff basic_map::as_multi_union_pw_aff() const
8007{
8008 return isl::map(*this).as_multi_union_pw_aff();
8009}
8010
8011isl::pw_multi_aff basic_map::as_pw_multi_aff() const
8012{
8013 return isl::map(*this).as_pw_multi_aff();
8014}
8015
8016isl::union_pw_multi_aff basic_map::as_union_pw_multi_aff() const
8017{
8018 return isl::map(*this).as_union_pw_multi_aff();
8019}
8020
8022{
8023 return isl::map(*this).basic_map_list();
8024}
8025
8027{
8028 return isl::map(*this).bind_domain(tuple);
8029}
8030
8032{
8033 return isl::map(*this).bind_range(tuple);
8034}
8035
8037{
8038 return isl::map(*this).can_curry();
8039}
8040
8042{
8043 return isl::map(*this).coalesce();
8044}
8045
8047{
8048 return isl::map(*this).complement();
8049}
8050
8051isl::union_map basic_map::compute_divs() const
8052{
8053 return isl::map(*this).compute_divs();
8054}
8055
8056isl::map basic_map::curry() const
8057{
8058 return isl::map(*this).curry();
8059}
8060
8061isl::basic_set basic_map::deltas() const
8062{
8063 auto res = isl_basic_map_deltas(copy());
8064 return manage(res);
8065}
8066
8067isl::basic_map basic_map::detect_equalities() const
8068{
8070 return manage(res);
8071}
8072
8074{
8075 return isl::map(*this).dim(type);
8076}
8077
8079{
8080 return isl::map(*this).dim_max(pos);
8081}
8082
8084{
8085 return isl::map(*this).dim_min(pos);
8086}
8087
8089{
8090 auto res = isl_basic_map_domain(copy());
8091 return manage(res);
8092}
8093
8095{
8096 return isl::map(*this).domain_factor_domain();
8097}
8098
8099isl::map basic_map::domain_factor_range() const
8100{
8101 return isl::map(*this).domain_factor_range();
8102}
8103
8104isl::map basic_map::domain_map() const
8105{
8106 return isl::map(*this).domain_map();
8107}
8108
8109isl::union_pw_multi_aff basic_map::domain_map_union_pw_multi_aff() const
8110{
8111 return isl::map(*this).domain_map_union_pw_multi_aff();
8112}
8113
8114isl::map basic_map::domain_product(const isl::map &map2) const
8115{
8116 return isl::map(*this).domain_product(map2);
8117}
8118
8119isl::union_map basic_map::domain_product(const isl::union_map &umap2) const
8120{
8121 return isl::map(*this).domain_product(umap2);
8122}
8123
8125{
8126 return isl::map(*this).domain_tuple_dim();
8127}
8128
8129isl::id basic_map::domain_tuple_id() const
8130{
8131 return isl::map(*this).domain_tuple_id();
8132}
8133
8134isl::map basic_map::eq_at(const isl::multi_pw_aff &mpa) const
8135{
8136 return isl::map(*this).eq_at(mpa);
8137}
8138
8139isl::union_map basic_map::eq_at(const isl::multi_union_pw_aff &mupa) const
8140{
8141 return isl::map(*this).eq_at(mupa);
8142}
8143
8145{
8146 auto res = isl_basic_map_equal(space.release(), n_equal);
8147 return manage(res);
8148}
8149
8150isl::basic_map basic_map::equate(isl::dim type1, int pos1, isl::dim type2, int pos2) const
8151{
8152 auto res = isl_basic_map_equate(copy(), static_cast<enum isl_dim_type>(type1), pos1, static_cast<enum isl_dim_type>(type2), pos2);
8153 return manage(res);
8154}
8155
8156boolean basic_map::every_map(const std::function<boolean(isl::map)> &test) const
8157{
8158 return isl::map(*this).every_map(test);
8159}
8160
8162{
8163 return isl::map(*this).extract_map(space);
8164}
8165
8167{
8168 return isl::map(*this).factor_domain();
8169}
8170
8171isl::map basic_map::factor_range() const
8172{
8173 return isl::map(*this).factor_range();
8174}
8175
8176isl::basic_map basic_map::fix_si(isl::dim type, unsigned int pos, int value) const
8177{
8178 auto res = isl_basic_map_fix_si(copy(), static_cast<enum isl_dim_type>(type), pos, value);
8179 return manage(res);
8180}
8181
8183{
8184 auto res = isl_basic_map_fix_val(copy(), static_cast<enum isl_dim_type>(type), pos, v.release());
8185 return manage(res);
8186}
8187
8189{
8190 return this->fix_val(type, pos, isl::val(ctx(), v));
8191}
8192
8194{
8195 return isl::map(*this).fixed_power(exp);
8196}
8197
8199{
8200 return this->fixed_power(isl::val(ctx(), exp));
8201}
8202
8204{
8205 return isl::map(*this).flat_range_product(map2);
8206}
8207
8209{
8210 return isl::map(*this).flat_range_product(umap2);
8211}
8212
8214{
8215 auto res = isl_basic_map_flatten(copy());
8216 return manage(res);
8217}
8218
8220{
8222 return manage(res);
8223}
8224
8225isl::basic_map basic_map::flatten_range() const
8226{
8228 return manage(res);
8229}
8230
8232{
8233 return isl::map(*this).floordiv_val(d);
8234}
8235
8237{
8238 return this->floordiv_val(isl::val(ctx(), d));
8239}
8240
8242{
8243 return isl::map(*this).foreach_basic_map(fn);
8244}
8245
8246stat basic_map::foreach_map(const std::function<stat(isl::map)> &fn) const
8247{
8248 return isl::map(*this).foreach_map(fn);
8249}
8250
8256
8262
8264{
8265 auto res = isl_basic_map_gist(copy(), context.release());
8266 return manage(res);
8267}
8268
8270{
8271 return isl::map(*this).gist(context);
8272}
8273
8274isl::union_map basic_map::gist(const isl::union_map &context) const
8275{
8276 return isl::map(*this).gist(context);
8277}
8278
8279isl::map basic_map::gist_domain(const isl::set &context) const
8280{
8281 return isl::map(*this).gist_domain(context);
8282}
8283
8284isl::union_map basic_map::gist_domain(const isl::union_set &uset) const
8285{
8286 return isl::map(*this).gist_domain(uset);
8287}
8288
8289isl::map basic_map::gist_params(const isl::set &context) const
8290{
8291 return isl::map(*this).gist_params(context);
8292}
8293
8294isl::union_map basic_map::gist_range(const isl::union_set &uset) const
8295{
8296 return isl::map(*this).gist_range(uset);
8297}
8298
8299boolean basic_map::has_domain_tuple_id() const
8300{
8301 return isl::map(*this).has_domain_tuple_id();
8302}
8303
8305{
8306 return isl::map(*this).has_equal_space(map2);
8307}
8308
8309boolean basic_map::has_range_tuple_id() const
8310{
8311 return isl::map(*this).has_range_tuple_id();
8312}
8313
8315{
8316 return isl::map(*this).has_tuple_id(type);
8317}
8318
8320{
8321 return isl::map(*this).has_tuple_name(type);
8322}
8323
8325{
8326 auto res = isl_basic_map_intersect(copy(), bmap2.release());
8327 return manage(res);
8328}
8329
8331{
8332 return isl::map(*this).intersect(map2);
8333}
8334
8335isl::union_map basic_map::intersect(const isl::union_map &umap2) const
8336{
8337 return isl::map(*this).intersect(umap2);
8338}
8339
8340isl::basic_map basic_map::intersect_domain(isl::basic_set bset) const
8341{
8343 return manage(res);
8344}
8345
8346isl::map basic_map::intersect_domain(const isl::set &set) const
8347{
8348 return isl::map(*this).intersect_domain(set);
8349}
8350
8351isl::union_map basic_map::intersect_domain(const isl::space &space) const
8352{
8353 return isl::map(*this).intersect_domain(space);
8354}
8355
8356isl::union_map basic_map::intersect_domain(const isl::union_set &uset) const
8357{
8358 return isl::map(*this).intersect_domain(uset);
8359}
8360
8361isl::basic_map basic_map::intersect_domain(const isl::point &bset) const
8362{
8363 return this->intersect_domain(isl::basic_set(bset));
8364}
8365
8366isl::map basic_map::intersect_domain_factor_domain(const isl::map &factor) const
8367{
8368 return isl::map(*this).intersect_domain_factor_domain(factor);
8369}
8370
8371isl::union_map basic_map::intersect_domain_factor_domain(const isl::union_map &factor) const
8372{
8373 return isl::map(*this).intersect_domain_factor_domain(factor);
8374}
8375
8376isl::map basic_map::intersect_domain_factor_range(const isl::map &factor) const
8377{
8378 return isl::map(*this).intersect_domain_factor_range(factor);
8379}
8380
8381isl::union_map basic_map::intersect_domain_factor_range(const isl::union_map &factor) const
8382{
8383 return isl::map(*this).intersect_domain_factor_range(factor);
8384}
8385
8386isl::map basic_map::intersect_params(const isl::set &params) const
8387{
8388 return isl::map(*this).intersect_params(params);
8389}
8390
8391isl::basic_map basic_map::intersect_range(isl::basic_set bset) const
8392{
8394 return manage(res);
8395}
8396
8397isl::map basic_map::intersect_range(const isl::set &set) const
8398{
8399 return isl::map(*this).intersect_range(set);
8400}
8401
8402isl::union_map basic_map::intersect_range(const isl::space &space) const
8403{
8404 return isl::map(*this).intersect_range(space);
8405}
8406
8407isl::union_map basic_map::intersect_range(const isl::union_set &uset) const
8408{
8409 return isl::map(*this).intersect_range(uset);
8410}
8411
8412isl::basic_map basic_map::intersect_range(const isl::point &bset) const
8413{
8414 return this->intersect_range(isl::basic_set(bset));
8415}
8416
8417isl::map basic_map::intersect_range_factor_domain(const isl::map &factor) const
8418{
8419 return isl::map(*this).intersect_range_factor_domain(factor);
8420}
8421
8422isl::union_map basic_map::intersect_range_factor_domain(const isl::union_map &factor) const
8423{
8424 return isl::map(*this).intersect_range_factor_domain(factor);
8425}
8426
8427isl::map basic_map::intersect_range_factor_range(const isl::map &factor) const
8428{
8429 return isl::map(*this).intersect_range_factor_range(factor);
8430}
8431
8432isl::union_map basic_map::intersect_range_factor_range(const isl::union_map &factor) const
8433{
8434 return isl::map(*this).intersect_range_factor_range(factor);
8435}
8436
8437boolean basic_map::involves_dims(isl::dim type, unsigned int first, unsigned int n) const
8438{
8439 return isl::map(*this).involves_dims(type, first, n);
8440}
8441
8442boolean basic_map::is_bijective() const
8443{
8444 return isl::map(*this).is_bijective();
8445}
8446
8447boolean basic_map::is_disjoint(const isl::map &map2) const
8448{
8449 return isl::map(*this).is_disjoint(map2);
8450}
8451
8452boolean basic_map::is_disjoint(const isl::union_map &umap2) const
8453{
8454 return isl::map(*this).is_disjoint(umap2);
8455}
8456
8457boolean basic_map::is_empty() const
8458{
8459 auto res = isl_basic_map_is_empty(get());
8460 return manage(res);
8461}
8462
8463boolean basic_map::is_equal(const isl::basic_map &bmap2) const
8464{
8465 auto res = isl_basic_map_is_equal(get(), bmap2.get());
8466 return manage(res);
8467}
8468
8469boolean basic_map::is_equal(const isl::map &map2) const
8470{
8471 return isl::map(*this).is_equal(map2);
8472}
8473
8474boolean basic_map::is_equal(const isl::union_map &umap2) const
8475{
8476 return isl::map(*this).is_equal(umap2);
8477}
8478
8479boolean basic_map::is_injective() const
8480{
8481 return isl::map(*this).is_injective();
8482}
8483
8484boolean basic_map::is_single_valued() const
8485{
8486 return isl::map(*this).is_single_valued();
8487}
8488
8489boolean basic_map::is_strict_subset(const isl::map &map2) const
8490{
8491 return isl::map(*this).is_strict_subset(map2);
8492}
8493
8494boolean basic_map::is_strict_subset(const isl::union_map &umap2) const
8495{
8496 return isl::map(*this).is_strict_subset(umap2);
8497}
8498
8499boolean basic_map::is_subset(const isl::basic_map &bmap2) const
8500{
8501 auto res = isl_basic_map_is_subset(get(), bmap2.get());
8502 return manage(res);
8503}
8504
8505boolean basic_map::is_subset(const isl::map &map2) const
8506{
8507 return isl::map(*this).is_subset(map2);
8508}
8509
8510boolean basic_map::is_subset(const isl::union_map &umap2) const
8511{
8512 return isl::map(*this).is_subset(umap2);
8513}
8514
8515boolean basic_map::isa_map() const
8516{
8517 return isl::map(*this).isa_map();
8518}
8519
8520isl::map basic_map::lex_ge_at(const isl::multi_pw_aff &mpa) const
8521{
8522 return isl::map(*this).lex_ge_at(mpa);
8523}
8524
8525isl::map basic_map::lex_gt_at(const isl::multi_pw_aff &mpa) const
8526{
8527 return isl::map(*this).lex_gt_at(mpa);
8528}
8529
8530isl::map basic_map::lex_le_at(const isl::multi_pw_aff &mpa) const
8531{
8532 return isl::map(*this).lex_le_at(mpa);
8533}
8534
8535isl::map basic_map::lex_lt_at(const isl::multi_pw_aff &mpa) const
8536{
8537 return isl::map(*this).lex_lt_at(mpa);
8538}
8539
8540isl::map basic_map::lexmax() const
8541{
8542 auto res = isl_basic_map_lexmax(copy());
8543 return manage(res);
8544}
8545
8546isl::pw_multi_aff basic_map::lexmax_pw_multi_aff() const
8547{
8548 return isl::map(*this).lexmax_pw_multi_aff();
8549}
8550
8551isl::map basic_map::lexmin() const
8552{
8553 auto res = isl_basic_map_lexmin(copy());
8554 return manage(res);
8555}
8556
8557isl::pw_multi_aff basic_map::lexmin_pw_multi_aff() const
8558{
8559 return isl::map(*this).lexmin_pw_multi_aff();
8560}
8561
8562isl::map basic_map::lower_bound(const isl::multi_pw_aff &lower) const
8563{
8564 return isl::map(*this).lower_bound(lower);
8565}
8566
8567isl::map basic_map::lower_bound_si(isl::dim type, unsigned int pos, int value) const
8568{
8569 return isl::map(*this).lower_bound_si(type, pos, value);
8570}
8571
8573{
8574 return isl::map(*this).map_list();
8575}
8576
8578{
8579 return isl::map(*this).max_multi_pw_aff();
8580}
8581
8582isl::multi_pw_aff basic_map::min_multi_pw_aff() const
8583{
8584 return isl::map(*this).min_multi_pw_aff();
8585}
8586
8587isl::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
8588{
8589 return isl::map(*this).move_dims(dst_type, dst_pos, src_type, src_pos, n);
8590}
8591
8592class size basic_map::n_basic_map() const
8593{
8594 return isl::map(*this).n_basic_map();
8595}
8596
8597isl::map basic_map::order_lt(isl::dim type1, int pos1, isl::dim type2, int pos2) const
8598{
8599 return isl::map(*this).order_lt(type1, pos1, type2, pos2);
8600}
8601
8603{
8604 return isl::map(*this).params();
8605}
8606
8608{
8609 auto res = isl_basic_map_plain_get_val_if_fixed(get(), static_cast<enum isl_dim_type>(type), pos);
8610 return manage(res);
8611}
8612
8614{
8615 return isl::map(*this).polyhedral_hull();
8616}
8617
8619{
8620 return isl::map(*this).preimage_domain(ma);
8621}
8622
8623isl::map basic_map::preimage_domain(const isl::multi_pw_aff &mpa) const
8624{
8625 return isl::map(*this).preimage_domain(mpa);
8626}
8627
8628isl::map basic_map::preimage_domain(const isl::pw_multi_aff &pma) const
8629{
8630 return isl::map(*this).preimage_domain(pma);
8631}
8632
8633isl::union_map basic_map::preimage_domain(const isl::union_pw_multi_aff &upma) const
8634{
8635 return isl::map(*this).preimage_domain(upma);
8636}
8637
8638isl::map basic_map::preimage_range(const isl::multi_aff &ma) const
8639{
8640 return isl::map(*this).preimage_range(ma);
8641}
8642
8643isl::map basic_map::preimage_range(const isl::pw_multi_aff &pma) const
8644{
8645 return isl::map(*this).preimage_range(pma);
8646}
8647
8648isl::union_map basic_map::preimage_range(const isl::union_pw_multi_aff &upma) const
8649{
8650 return isl::map(*this).preimage_range(upma);
8651}
8652
8653isl::map basic_map::product(const isl::map &map2) const
8654{
8655 return isl::map(*this).product(map2);
8656}
8657
8658isl::union_map basic_map::product(const isl::union_map &umap2) const
8659{
8660 return isl::map(*this).product(umap2);
8661}
8662
8663isl::map basic_map::project_out(isl::dim type, unsigned int first, unsigned int n) const
8664{
8665 return isl::map(*this).project_out(type, first, n);
8666}
8667
8669{
8670 return isl::map(*this).project_out_all_params();
8671}
8672
8674{
8675 return isl::map(*this).range();
8676}
8677
8678isl::map basic_map::range_factor_domain() const
8679{
8680 return isl::map(*this).range_factor_domain();
8681}
8682
8683isl::map basic_map::range_factor_range() const
8684{
8685 return isl::map(*this).range_factor_range();
8686}
8687
8688isl::fixed_box basic_map::range_lattice_tile() const
8689{
8690 return isl::map(*this).range_lattice_tile();
8691}
8692
8693isl::map basic_map::range_map() const
8694{
8695 return isl::map(*this).range_map();
8696}
8697
8698isl::map basic_map::range_product(const isl::map &map2) const
8699{
8700 return isl::map(*this).range_product(map2);
8701}
8702
8703isl::union_map basic_map::range_product(const isl::union_map &umap2) const
8704{
8705 return isl::map(*this).range_product(umap2);
8706}
8707
8708isl::map basic_map::range_reverse() const
8709{
8710 return isl::map(*this).range_reverse();
8711}
8712
8713isl::fixed_box basic_map::range_simple_fixed_box_hull() const
8714{
8715 return isl::map(*this).range_simple_fixed_box_hull();
8716}
8717
8718class size basic_map::range_tuple_dim() const
8719{
8720 return isl::map(*this).range_tuple_dim();
8721}
8722
8723isl::id basic_map::range_tuple_id() const
8724{
8725 return isl::map(*this).range_tuple_id();
8726}
8727
8728isl::basic_map basic_map::reverse() const
8729{
8730 auto res = isl_basic_map_reverse(copy());
8731 return manage(res);
8732}
8733
8734isl::basic_map basic_map::sample() const
8735{
8736 auto res = isl_basic_map_sample(copy());
8737 return manage(res);
8738}
8739
8740isl::map basic_map::set_domain_tuple(const isl::id &id) const
8741{
8742 return isl::map(*this).set_domain_tuple(id);
8743}
8744
8745isl::map basic_map::set_domain_tuple(const std::string &id) const
8746{
8747 return this->set_domain_tuple(isl::id(ctx(), id));
8748}
8749
8750isl::map basic_map::set_range_tuple(const isl::id &id) const
8751{
8752 return isl::map(*this).set_range_tuple(id);
8753}
8754
8755isl::map basic_map::set_range_tuple(const std::string &id) const
8756{
8757 return this->set_range_tuple(isl::id(ctx(), id));
8758}
8759
8761{
8762 return isl::map(*this).set_tuple_id(type, id);
8763}
8764
8765isl::map basic_map::set_tuple_id(isl::dim type, const std::string &id) const
8766{
8767 return this->set_tuple_id(type, isl::id(ctx(), id));
8768}
8769
8771{
8772 return isl::map(*this).space();
8773}
8774
8776{
8777 return isl::map(*this).subtract(map2);
8778}
8779
8780isl::union_map basic_map::subtract(const isl::union_map &umap2) const
8781{
8782 return isl::map(*this).subtract(umap2);
8783}
8784
8785isl::union_map basic_map::subtract_domain(const isl::union_set &dom) const
8786{
8787 return isl::map(*this).subtract_domain(dom);
8788}
8789
8790isl::union_map basic_map::subtract_range(const isl::union_set &dom) const
8791{
8792 return isl::map(*this).subtract_range(dom);
8793}
8794
8796{
8797 return isl::map(*this).sum(map2);
8798}
8799
8801{
8802 auto res = isl_basic_map_to_list(copy());
8803 return manage(res);
8804}
8805
8807{
8808 return isl::map(*this).to_union_map();
8809}
8810
8812{
8813 return isl::map(*this).tuple_id(type);
8814}
8815
8817{
8818 return isl::map(*this).uncurry();
8819}
8820
8822{
8823 auto res = isl_basic_map_union(copy(), bmap2.release());
8824 return manage(res);
8825}
8826
8827isl::map basic_map::unite(const isl::map &map2) const
8828{
8829 return isl::map(*this).unite(map2);
8830}
8831
8832isl::union_map basic_map::unite(const isl::union_map &umap2) const
8833{
8834 return isl::map(*this).unite(umap2);
8835}
8836
8842
8844{
8845 return isl::map(*this).unshifted_simple_hull();
8846}
8847
8849{
8850 return isl::map(*this).upper_bound(upper);
8851}
8852
8853isl::map basic_map::upper_bound_si(isl::dim type, unsigned int pos, int value) const
8854{
8855 return isl::map(*this).upper_bound_si(type, pos, value);
8856}
8857
8859{
8860 return isl::map(*this).wrap();
8861}
8862
8864{
8865 return isl::map(*this).zip();
8866}
8867
8868inline std::ostream &operator<<(std::ostream &os, const basic_map &obj)
8869{
8870 char *str = isl_basic_map_to_str(obj.get());
8871 if (!str) {
8872 os.setstate(std::ios_base::badbit);
8873 return os;
8874 }
8875 os << str;
8876 free(str);
8877 return os;
8878}
8879
8880// implementations for isl::basic_map_list
8881basic_map_list manage(__isl_take isl_basic_map_list *ptr) {
8882 return basic_map_list(ptr);
8883}
8885 ptr = isl_basic_map_list_copy(ptr);
8886 return basic_map_list(ptr);
8887}
8888
8891
8893 : ptr(nullptr)
8894{
8895 ptr = obj.copy();
8896}
8897
8899 : ptr(ptr) {}
8900
8902{
8903 auto res = isl_basic_map_list_alloc(ctx.release(), n);
8904 ptr = res;
8905}
8906
8908{
8909 auto res = isl_basic_map_list_from_basic_map(el.release());
8910 ptr = res;
8911}
8912
8914 std::swap(this->ptr, obj.ptr);
8915 return *this;
8916}
8917
8919 if (ptr)
8920 isl_basic_map_list_free(ptr);
8921}
8922
8923__isl_give isl_basic_map_list *basic_map_list::copy() const & {
8924 return isl_basic_map_list_copy(ptr);
8925}
8926
8927__isl_keep isl_basic_map_list *basic_map_list::get() const {
8928 return ptr;
8929}
8930
8932 isl_basic_map_list *tmp = ptr;
8933 ptr = nullptr;
8934 return tmp;
8935}
8936
8938 return ptr == nullptr;
8939}
8940
8942 return isl::ctx(isl_basic_map_list_get_ctx(ptr));
8943}
8944
8946{
8947 auto res = isl_basic_map_list_add(copy(), el.release());
8948 return manage(res);
8949}
8950
8952{
8953 auto res = isl_basic_map_list_get_at(get(), index);
8954 return manage(res);
8955}
8956
8958{
8959 return at(index);
8960}
8961
8963{
8964 auto res = isl_basic_map_list_clear(copy());
8965 return manage(res);
8966}
8967
8969{
8970 auto res = isl_basic_map_list_concat(copy(), list2.release());
8971 return manage(res);
8972}
8973
8974isl::basic_map_list basic_map_list::drop(unsigned int first, unsigned int n) const
8975{
8976 auto res = isl_basic_map_list_drop(copy(), first, n);
8977 return manage(res);
8978}
8979
8981{
8982 struct fn_data {
8983 std::function<stat(isl::basic_map)> func;
8984 } fn_data = { fn };
8985 auto fn_lambda = [](isl_basic_map *arg_0, void *arg_1) -> isl_stat {
8986 auto *data = static_cast<struct fn_data *>(arg_1);
8987 auto ret = (data->func)(manage(arg_0));
8988 return ret.release();
8989 };
8990 auto res = isl_basic_map_list_foreach(get(), fn_lambda, &fn_data);
8991 return manage(res);
8992}
8993
8995{
8996 auto res = isl_basic_map_list_insert(copy(), pos, el.release());
8997 return manage(res);
8998}
8999
9001{
9002 auto res = isl_basic_map_list_size(get());
9003 return manage(res);
9004}
9005
9006inline std::ostream &operator<<(std::ostream &os, const basic_map_list &obj)
9007{
9008 char *str = isl_basic_map_list_to_str(obj.get());
9009 if (!str) {
9010 os.setstate(std::ios_base::badbit);
9011 return os;
9012 }
9013 os << str;
9014 free(str);
9015 return os;
9016}
9017
9018// implementations for isl::basic_set
9019basic_set manage(__isl_take isl_basic_set *ptr) {
9020 return basic_set(ptr);
9021}
9023 ptr = isl_basic_set_copy(ptr);
9024 return basic_set(ptr);
9025}
9026
9028 : ptr(nullptr) {}
9029
9030basic_set::basic_set(const basic_set &obj)
9031 : ptr(nullptr)
9032{
9033 ptr = obj.copy();
9034}
9035
9036basic_set::basic_set(__isl_take isl_basic_set *ptr)
9037 : ptr(ptr) {}
9038
9039basic_set::basic_set(isl::point pnt)
9040{
9041 auto res = isl_basic_set_from_point(pnt.release());
9042 ptr = res;
9043}
9044
9045basic_set::basic_set(isl::ctx ctx, const std::string &str)
9046{
9047 auto res = isl_basic_set_read_from_str(ctx.release(), str.c_str());
9048 ptr = res;
9049}
9050
9051basic_set &basic_set::operator=(basic_set obj) {
9052 std::swap(this->ptr, obj.ptr);
9053 return *this;
9054}
9055
9056basic_set::~basic_set() {
9057 if (ptr)
9058 isl_basic_set_free(ptr);
9059}
9060
9061__isl_give isl_basic_set *basic_set::copy() const & {
9062 return isl_basic_set_copy(ptr);
9063}
9064
9065__isl_keep isl_basic_set *basic_set::get() const {
9066 return ptr;
9067}
9068
9069__isl_give isl_basic_set *basic_set::release() {
9070 isl_basic_set *tmp = ptr;
9071 ptr = nullptr;
9072 return tmp;
9073}
9074
9075bool basic_set::is_null() const {
9076 return ptr == nullptr;
9077}
9078
9079isl::ctx basic_set::ctx() const {
9080 return isl::ctx(isl_basic_set_get_ctx(ptr));
9081}
9082
9084{
9085 return isl::set(*this).add_constraint(constraint);
9086}
9087
9089{
9090 return isl::set(*this).add_dims(type, n);
9091}
9092
9094{
9095 auto res = isl_basic_set_affine_hull(copy());
9096 return manage(res);
9097}
9098
9100{
9101 return isl::set(*this).align_params(model);
9102}
9103
9105{
9106 auto res = isl_basic_set_apply(copy(), bmap.release());
9107 return manage(res);
9108}
9109
9110isl::set basic_set::apply(const isl::map &map) const
9111{
9112 return isl::set(*this).apply(map);
9113}
9114
9115isl::union_set basic_set::apply(const isl::union_map &umap) const
9116{
9117 return isl::set(*this).apply(umap);
9118}
9119
9120isl::pw_multi_aff basic_set::as_pw_multi_aff() const
9121{
9122 return isl::set(*this).as_pw_multi_aff();
9123}
9124
9125isl::set basic_set::as_set() const
9126{
9127 return isl::set(*this).as_set();
9128}
9129
9131{
9132 return isl::set(*this).basic_set_list();
9133}
9134
9136{
9137 return isl::set(*this).bind(tuple);
9138}
9139
9140isl::set basic_set::coalesce() const
9141{
9142 return isl::set(*this).coalesce();
9143}
9144
9145isl::set basic_set::complement() const
9146{
9147 return isl::set(*this).complement();
9148}
9149
9150isl::union_set basic_set::compute_divs() const
9151{
9152 return isl::set(*this).compute_divs();
9153}
9154
9156{
9157 return isl::set(*this).contains(space);
9158}
9159
9161{
9162 return isl::set(*this).convex_hull();
9163}
9164
9166{
9167 auto res = isl_basic_set_detect_equalities(copy());
9168 return manage(res);
9169}
9170
9172{
9173 auto res = isl_basic_set_dim(get(), static_cast<enum isl_dim_type>(type));
9174 return manage(res);
9175}
9176
9178{
9179 return isl::set(*this).dim_has_any_lower_bound(type, pos);
9180}
9181
9183{
9184 return isl::set(*this).dim_id(type, pos);
9185}
9186
9188{
9189 return isl::set(*this).dim_max(pos);
9190}
9191
9193{
9194 auto res = isl_basic_set_dim_max_val(copy(), pos);
9195 return manage(res);
9196}
9197
9199{
9200 return isl::set(*this).dim_min(pos);
9201}
9202
9204{
9205 return isl::set(*this).dim_min_val(pos);
9206}
9207
9208std::string basic_set::dim_name(isl::dim type, unsigned int pos) const
9209{
9210 return isl::set(*this).dim_name(type, pos);
9211}
9212
9214{
9215 auto res = isl_basic_set_get_div(get(), pos);
9216 return manage(res);
9217}
9218
9220{
9221 return div(pos);
9222}
9223
9225{
9226 return isl::set(*this).drop_constraints_involving_dims(type, first, n);
9227}
9228
9229isl::set basic_set::eliminate(isl::dim type, unsigned int first, unsigned int n) const
9230{
9231 return isl::set(*this).eliminate(type, first, n);
9232}
9233
9234boolean basic_set::every_set(const std::function<boolean(isl::set)> &test) const
9235{
9236 return isl::set(*this).every_set(test);
9237}
9238
9240{
9241 return isl::set(*this).extract_set(space);
9242}
9243
9245{
9246 return isl::set(*this).find_dim_by_id(type, id);
9247}
9248
9249int basic_set::find_dim_by_id(isl::dim type, const std::string &id) const
9250{
9251 return this->find_dim_by_id(type, isl::id(ctx(), id));
9252}
9253
9254isl::basic_set basic_set::fix_si(isl::dim type, unsigned int pos, int value) const
9255{
9256 auto res = isl_basic_set_fix_si(copy(), static_cast<enum isl_dim_type>(type), pos, value);
9257 return manage(res);
9258}
9259
9261{
9262 auto res = isl_basic_set_fix_val(copy(), static_cast<enum isl_dim_type>(type), pos, v.release());
9263 return manage(res);
9264}
9265
9267{
9268 return this->fix_val(type, pos, isl::val(ctx(), v));
9269}
9270
9272{
9273 auto res = isl_basic_set_flatten(copy());
9274 return manage(res);
9275}
9276
9278{
9279 return isl::set(*this).foreach_basic_set(fn);
9280}
9281
9282stat basic_set::foreach_point(const std::function<stat(isl::point)> &fn) const
9283{
9284 return isl::set(*this).foreach_point(fn);
9285}
9286
9287stat basic_set::foreach_set(const std::function<stat(isl::set)> &fn) const
9288{
9289 return isl::set(*this).foreach_set(fn);
9290}
9291
9293{
9294 auto res = isl_basic_set_gist(copy(), context.release());
9295 return manage(res);
9296}
9297
9298isl::set basic_set::gist(const isl::set &context) const
9299{
9300 return isl::set(*this).gist(context);
9301}
9302
9303isl::union_set basic_set::gist(const isl::union_set &context) const
9304{
9305 return isl::set(*this).gist(context);
9306}
9307
9308isl::basic_set basic_set::gist(const isl::point &context) const
9309{
9310 return this->gist(isl::basic_set(context));
9311}
9312
9313isl::set basic_set::gist_params(const isl::set &context) const
9314{
9315 return isl::set(*this).gist_params(context);
9316}
9317
9319{
9320 return isl::set(*this).has_equal_space(set2);
9321}
9322
9324{
9325 return isl::set(*this).identity();
9326}
9327
9329{
9330 return isl::set(*this).identity_union_pw_multi_aff();
9331}
9332
9334{
9335 return isl::set(*this).indicator_function();
9336}
9337
9338isl::set basic_set::insert_dims(isl::dim type, unsigned int pos, unsigned int n) const
9339{
9340 return isl::set(*this).insert_dims(type, pos, n);
9341}
9342
9344{
9345 return isl::set(*this).insert_domain(domain);
9346}
9347
9348isl::basic_set basic_set::intersect(isl::basic_set bset2) const
9349{
9350 auto res = isl_basic_set_intersect(copy(), bset2.release());
9351 return manage(res);
9352}
9353
9354isl::set basic_set::intersect(const isl::set &set2) const
9355{
9356 return isl::set(*this).intersect(set2);
9357}
9358
9359isl::union_set basic_set::intersect(const isl::union_set &uset2) const
9360{
9361 return isl::set(*this).intersect(uset2);
9362}
9363
9364isl::basic_set basic_set::intersect(const isl::point &bset2) const
9365{
9366 return this->intersect(isl::basic_set(bset2));
9367}
9368
9369isl::basic_set basic_set::intersect_params(isl::basic_set bset2) const
9370{
9371 auto res = isl_basic_set_intersect_params(copy(), bset2.release());
9372 return manage(res);
9373}
9374
9375isl::set basic_set::intersect_params(const isl::set &params) const
9376{
9377 return isl::set(*this).intersect_params(params);
9378}
9379
9380isl::basic_set basic_set::intersect_params(const isl::point &bset2) const
9381{
9382 return this->intersect_params(isl::basic_set(bset2));
9383}
9384
9385boolean basic_set::involves_dims(isl::dim type, unsigned int first, unsigned int n) const
9386{
9387 return isl::set(*this).involves_dims(type, first, n);
9388}
9389
9390boolean basic_set::involves_locals() const
9391{
9392 return isl::set(*this).involves_locals();
9393}
9394
9396{
9398 return manage(res);
9399}
9400
9401boolean basic_set::is_disjoint(const isl::set &set2) const
9402{
9403 return isl::set(*this).is_disjoint(set2);
9404}
9405
9406boolean basic_set::is_disjoint(const isl::union_set &uset2) const
9407{
9408 return isl::set(*this).is_disjoint(uset2);
9409}
9410
9411boolean basic_set::is_empty() const
9412{
9413 auto res = isl_basic_set_is_empty(get());
9414 return manage(res);
9415}
9416
9417boolean basic_set::is_equal(const isl::basic_set &bset2) const
9418{
9419 auto res = isl_basic_set_is_equal(get(), bset2.get());
9420 return manage(res);
9421}
9422
9423boolean basic_set::is_equal(const isl::set &set2) const
9424{
9425 return isl::set(*this).is_equal(set2);
9426}
9427
9428boolean basic_set::is_equal(const isl::union_set &uset2) const
9429{
9430 return isl::set(*this).is_equal(uset2);
9431}
9432
9433boolean basic_set::is_equal(const isl::point &bset2) const
9434{
9435 return this->is_equal(isl::basic_set(bset2));
9436}
9437
9439{
9440 return isl::set(*this).is_params();
9441}
9442
9443boolean basic_set::is_singleton() const
9444{
9445 return isl::set(*this).is_singleton();
9446}
9447
9448boolean basic_set::is_strict_subset(const isl::set &set2) const
9449{
9450 return isl::set(*this).is_strict_subset(set2);
9451}
9452
9453boolean basic_set::is_strict_subset(const isl::union_set &uset2) const
9454{
9455 return isl::set(*this).is_strict_subset(uset2);
9456}
9457
9458boolean basic_set::is_subset(const isl::basic_set &bset2) const
9459{
9460 auto res = isl_basic_set_is_subset(get(), bset2.get());
9461 return manage(res);
9462}
9463
9464boolean basic_set::is_subset(const isl::set &set2) const
9465{
9466 return isl::set(*this).is_subset(set2);
9467}
9468
9469boolean basic_set::is_subset(const isl::union_set &uset2) const
9470{
9471 return isl::set(*this).is_subset(uset2);
9472}
9473
9474boolean basic_set::is_subset(const isl::point &bset2) const
9475{
9476 return this->is_subset(isl::basic_set(bset2));
9477}
9478
9479boolean basic_set::is_wrapping() const
9480{
9481 auto res = isl_basic_set_is_wrapping(get());
9482 return manage(res);
9483}
9484
9485boolean basic_set::isa_set() const
9486{
9487 return isl::set(*this).isa_set();
9488}
9489
9490isl::set basic_set::lexmax() const
9491{
9492 auto res = isl_basic_set_lexmax(copy());
9493 return manage(res);
9494}
9495
9496isl::pw_multi_aff basic_set::lexmax_pw_multi_aff() const
9497{
9498 return isl::set(*this).lexmax_pw_multi_aff();
9499}
9500
9501isl::set basic_set::lexmin() const
9502{
9503 auto res = isl_basic_set_lexmin(copy());
9504 return manage(res);
9505}
9506
9507isl::pw_multi_aff basic_set::lexmin_pw_multi_aff() const
9508{
9509 return isl::set(*this).lexmin_pw_multi_aff();
9510}
9511
9512isl::set basic_set::lower_bound(const isl::multi_pw_aff &lower) const
9513{
9514 return isl::set(*this).lower_bound(lower);
9515}
9516
9517isl::set basic_set::lower_bound(const isl::multi_val &lower) const
9518{
9519 return isl::set(*this).lower_bound(lower);
9520}
9521
9522isl::set basic_set::lower_bound_si(isl::dim type, unsigned int pos, int value) const
9523{
9524 return isl::set(*this).lower_bound_si(type, pos, value);
9525}
9526
9528{
9529 return isl::set(*this).lower_bound_val(type, pos, value);
9530}
9531
9532isl::set basic_set::lower_bound_val(isl::dim type, unsigned int pos, long value) const
9533{
9534 return this->lower_bound_val(type, pos, isl::val(ctx(), value));
9535}
9536
9538{
9539 return isl::set(*this).max_multi_pw_aff();
9540}
9541
9542isl::val basic_set::max_val(const isl::aff &obj) const
9543{
9544 return isl::set(*this).max_val(obj);
9545}
9546
9547isl::multi_pw_aff basic_set::min_multi_pw_aff() const
9548{
9549 return isl::set(*this).min_multi_pw_aff();
9550}
9551
9552isl::val basic_set::min_val(const isl::aff &obj) const
9553{
9554 return isl::set(*this).min_val(obj);
9555}
9556
9557class size basic_set::n_basic_set() const
9558{
9559 return isl::set(*this).n_basic_set();
9560}
9561
9562isl::basic_set basic_set::params() const
9563{
9564 auto res = isl_basic_set_params(copy());
9565 return manage(res);
9566}
9567
9569{
9570 return isl::set(*this).plain_get_val_if_fixed(type, pos);
9571}
9572
9574{
9575 return isl::set(*this).plain_multi_val_if_fixed();
9576}
9577
9578isl::basic_set basic_set::polyhedral_hull() const
9579{
9580 return isl::set(*this).polyhedral_hull();
9581}
9582
9583isl::set basic_set::preimage(const isl::multi_aff &ma) const
9584{
9585 return isl::set(*this).preimage(ma);
9586}
9587
9588isl::set basic_set::preimage(const isl::multi_pw_aff &mpa) const
9589{
9590 return isl::set(*this).preimage(mpa);
9591}
9592
9593isl::set basic_set::preimage(const isl::pw_multi_aff &pma) const
9594{
9595 return isl::set(*this).preimage(pma);
9596}
9597
9598isl::union_set basic_set::preimage(const isl::union_pw_multi_aff &upma) const
9599{
9600 return isl::set(*this).preimage(upma);
9601}
9602
9603isl::set basic_set::product(const isl::set &set2) const
9604{
9605 return isl::set(*this).product(set2);
9606}
9607
9608isl::basic_set basic_set::project_out(isl::dim type, unsigned int first, unsigned int n) const
9609{
9610 auto res = isl_basic_set_project_out(copy(), static_cast<enum isl_dim_type>(type), first, n);
9611 return manage(res);
9612}
9613
9615{
9616 return isl::set(*this).project_out_all_params();
9617}
9618
9619isl::set basic_set::project_out_param(const isl::id &id) const
9620{
9621 return isl::set(*this).project_out_param(id);
9622}
9623
9624isl::set basic_set::project_out_param(const std::string &id) const
9625{
9626 return this->project_out_param(isl::id(ctx(), id));
9627}
9628
9629isl::set basic_set::project_out_param(const isl::id_list &list) const
9630{
9631 return isl::set(*this).project_out_param(list);
9632}
9633
9634isl::pw_multi_aff basic_set::pw_multi_aff_on_domain(const isl::multi_val &mv) const
9635{
9636 return isl::set(*this).pw_multi_aff_on_domain(mv);
9637}
9638
9639isl::set basic_set::remove_dims(isl::dim type, unsigned int first, unsigned int n) const
9640{
9641 return isl::set(*this).remove_dims(type, first, n);
9642}
9643
9645{
9646 return isl::set(*this).remove_divs();
9647}
9648
9650{
9651 return isl::set(*this).remove_redundancies();
9652}
9653
9655{
9656 return isl::set(*this).reset_tuple_id();
9657}
9658
9660{
9661 auto res = isl_basic_set_sample(copy());
9662 return manage(res);
9663}
9664
9665isl::point basic_set::sample_point() const
9666{
9667 auto res = isl_basic_set_sample_point(copy());
9668 return manage(res);
9669}
9670
9672{
9673 return isl::set(*this).set_dim_id(type, pos, id);
9674}
9675
9676isl::set basic_set::set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const
9677{
9678 return this->set_dim_id(type, pos, isl::id(ctx(), id));
9679}
9680
9682{
9683 return isl::set(*this).set_list();
9684}
9685
9687{
9688 return isl::set(*this).set_tuple_id(id);
9689}
9690
9691isl::set basic_set::set_tuple_id(const std::string &id) const
9692{
9693 return this->set_tuple_id(isl::id(ctx(), id));
9694}
9695
9697{
9698 return isl::set(*this).simple_fixed_box_hull();
9699}
9700
9702{
9703 return isl::set(*this).simple_hull();
9704}
9705
9707{
9708 auto res = isl_basic_set_get_space(get());
9709 return manage(res);
9710}
9711
9713{
9714 return space();
9715}
9716
9718{
9719 return isl::set(*this).stride(pos);
9720}
9721
9722isl::set basic_set::subtract(const isl::set &set2) const
9723{
9724 return isl::set(*this).subtract(set2);
9725}
9726
9727isl::union_set basic_set::subtract(const isl::union_set &uset2) const
9728{
9729 return isl::set(*this).subtract(uset2);
9730}
9731
9732isl::basic_set_list basic_set::to_list() const
9733{
9734 auto res = isl_basic_set_to_list(copy());
9735 return manage(res);
9736}
9737
9738isl::set basic_set::to_set() const
9739{
9740 auto res = isl_basic_set_to_set(copy());
9741 return manage(res);
9742}
9743
9744isl::union_set basic_set::to_union_set() const
9745{
9746 return isl::set(*this).to_union_set();
9747}
9748
9749isl::map basic_set::translation() const
9750{
9751 return isl::set(*this).translation();
9752}
9753
9754class size basic_set::tuple_dim() const
9755{
9756 return isl::set(*this).tuple_dim();
9757}
9758
9760{
9761 return isl::set(*this).tuple_id();
9762}
9763
9764std::string basic_set::tuple_name() const
9765{
9766 return isl::set(*this).tuple_name();
9767}
9768
9770{
9771 return isl::set(*this).unbind_params(tuple);
9772}
9773
9774isl::map basic_set::unbind_params_insert_domain(const isl::multi_id &domain) const
9775{
9776 return isl::set(*this).unbind_params_insert_domain(domain);
9777}
9778
9779isl::set basic_set::unite(isl::basic_set bset2) const
9780{
9781 auto res = isl_basic_set_union(copy(), bset2.release());
9782 return manage(res);
9783}
9784
9785isl::set basic_set::unite(const isl::set &set2) const
9786{
9787 return isl::set(*this).unite(set2);
9788}
9789
9790isl::union_set basic_set::unite(const isl::union_set &uset2) const
9791{
9792 return isl::set(*this).unite(uset2);
9793}
9794
9795isl::set basic_set::unite(const isl::point &bset2) const
9796{
9797 return this->unite(isl::basic_set(bset2));
9798}
9799
9805
9807{
9808 return isl::set(*this).unshifted_simple_hull();
9809}
9810
9811isl::map basic_set::unwrap() const
9812{
9813 return isl::set(*this).unwrap();
9814}
9815
9816isl::set basic_set::upper_bound(const isl::multi_pw_aff &upper) const
9817{
9818 return isl::set(*this).upper_bound(upper);
9819}
9820
9821isl::set basic_set::upper_bound(const isl::multi_val &upper) const
9822{
9823 return isl::set(*this).upper_bound(upper);
9824}
9825
9827{
9828 return isl::set(*this).upper_bound_val(type, pos, value);
9829}
9830
9831isl::set basic_set::upper_bound_val(isl::dim type, unsigned int pos, long value) const
9832{
9833 return this->upper_bound_val(type, pos, isl::val(ctx(), value));
9834}
9835
9836inline std::ostream &operator<<(std::ostream &os, const basic_set &obj)
9837{
9838 char *str = isl_basic_set_to_str(obj.get());
9839 if (!str) {
9840 os.setstate(std::ios_base::badbit);
9841 return os;
9842 }
9843 os << str;
9844 free(str);
9845 return os;
9846}
9847
9848// implementations for isl::basic_set_list
9853 ptr = isl_basic_set_list_copy(ptr);
9854 return basic_set_list(ptr);
9855}
9856
9859
9861 : ptr(nullptr)
9862{
9863 ptr = obj.copy();
9864}
9865
9868
9870{
9871 auto res = isl_basic_set_list_alloc(ctx.release(), n);
9872 ptr = res;
9873}
9874
9876{
9877 auto res = isl_basic_set_list_from_basic_set(el.release());
9878 ptr = res;
9879}
9880
9882 std::swap(this->ptr, obj.ptr);
9883 return *this;
9884}
9885
9887 if (ptr)
9888 isl_basic_set_list_free(ptr);
9889}
9890
9892 return isl_basic_set_list_copy(ptr);
9893}
9894
9898
9900 isl_basic_set_list *tmp = ptr;
9901 ptr = nullptr;
9902 return tmp;
9903}
9904
9906 return ptr == nullptr;
9907}
9908
9910 return isl::ctx(isl_basic_set_list_get_ctx(ptr));
9911}
9912
9914{
9915 auto res = isl_basic_set_list_add(copy(), el.release());
9916 return manage(res);
9917}
9918
9920{
9921 auto res = isl_basic_set_list_get_at(get(), index);
9922 return manage(res);
9923}
9924
9926{
9927 return at(index);
9928}
9929
9931{
9932 auto res = isl_basic_set_list_clear(copy());
9933 return manage(res);
9934}
9935
9937{
9938 auto res = isl_basic_set_list_concat(copy(), list2.release());
9939 return manage(res);
9940}
9941
9942isl::basic_set_list basic_set_list::drop(unsigned int first, unsigned int n) const
9943{
9944 auto res = isl_basic_set_list_drop(copy(), first, n);
9945 return manage(res);
9946}
9947
9949{
9950 struct fn_data {
9951 std::function<stat(isl::basic_set)> func;
9952 } fn_data = { fn };
9953 auto fn_lambda = [](isl_basic_set *arg_0, void *arg_1) -> isl_stat {
9954 auto *data = static_cast<struct fn_data *>(arg_1);
9955 auto ret = (data->func)(manage(arg_0));
9956 return ret.release();
9957 };
9958 auto res = isl_basic_set_list_foreach(get(), fn_lambda, &fn_data);
9959 return manage(res);
9960}
9961
9963{
9964 auto res = isl_basic_set_list_insert(copy(), pos, el.release());
9965 return manage(res);
9966}
9967
9969{
9970 auto res = isl_basic_set_list_size(get());
9971 return manage(res);
9972}
9973
9974inline std::ostream &operator<<(std::ostream &os, const basic_set_list &obj)
9975{
9976 char *str = isl_basic_set_list_to_str(obj.get());
9977 if (!str) {
9978 os.setstate(std::ios_base::badbit);
9979 return os;
9980 }
9981 os << str;
9982 free(str);
9983 return os;
9984}
9985
9986// implementations for isl::constraint
9994
9996 : ptr(nullptr) {}
9997
9999 : ptr(nullptr)
10000{
10001 ptr = obj.copy();
10002}
10003
10006
10008 std::swap(this->ptr, obj.ptr);
10009 return *this;
10010}
10011
10016
10020
10022 return ptr;
10023}
10024
10026 isl_constraint *tmp = ptr;
10027 ptr = nullptr;
10028 return tmp;
10029}
10030
10032 return ptr == nullptr;
10033}
10034
10038
10044
10050
10052{
10053 auto res = isl_constraint_set_coefficient_si(copy(), static_cast<enum isl_dim_type>(type), pos, v);
10054 return manage(res);
10055}
10056
10058{
10060 return manage(res);
10061}
10062
10068
10070{
10071 return this->set_constant_val(isl::val(ctx(), v));
10072}
10073
10074// implementations for isl::fixed_box
10076 return fixed_box(ptr);
10077}
10078fixed_box manage_copy(__isl_keep isl_fixed_box *ptr) {
10079 ptr = isl_fixed_box_copy(ptr);
10080 return fixed_box(ptr);
10081}
10082
10084 : ptr(nullptr) {}
10085
10087 : ptr(nullptr)
10088{
10089 ptr = obj.copy();
10090}
10091
10093 : ptr(ptr) {}
10094
10096 std::swap(this->ptr, obj.ptr);
10097 return *this;
10098}
10099
10101 if (ptr)
10103}
10104
10106 return isl_fixed_box_copy(ptr);
10107}
10108
10110 return ptr;
10111}
10112
10114 isl_fixed_box *tmp = ptr;
10115 ptr = nullptr;
10116 return tmp;
10117}
10118
10119bool fixed_box::is_null() const {
10120 return ptr == nullptr;
10121}
10122
10123isl::ctx fixed_box::ctx() const {
10124 return isl::ctx(isl_fixed_box_get_ctx(ptr));
10125}
10126
10127boolean fixed_box::is_valid() const
10128{
10129 auto res = isl_fixed_box_is_valid(get());
10130 return manage(res);
10131}
10132
10133isl::multi_aff fixed_box::offset() const
10134{
10136 return manage(res);
10137}
10138
10139isl::multi_aff fixed_box::get_offset() const
10140{
10141 return offset();
10142}
10143
10144isl::multi_val fixed_box::size() const
10145{
10146 auto res = isl_fixed_box_get_size(get());
10147 return manage(res);
10148}
10149
10150isl::multi_val fixed_box::get_size() const
10151{
10152 return size();
10153}
10154
10155isl::space fixed_box::space() const
10156{
10158 return manage(res);
10159}
10160
10161isl::space fixed_box::get_space() const
10162{
10163 return space();
10164}
10165
10166inline std::ostream &operator<<(std::ostream &os, const fixed_box &obj)
10167{
10168 char *str = isl_fixed_box_to_str(obj.get());
10169 if (!str) {
10170 os.setstate(std::ios_base::badbit);
10171 return os;
10172 }
10173 os << str;
10174 free(str);
10175 return os;
10176}
10177
10178// implementations for isl::id
10179id manage(__isl_take isl_id *ptr) {
10180 return id(ptr);
10181}
10182id manage_copy(__isl_keep isl_id *ptr) {
10183 ptr = isl_id_copy(ptr);
10184 return id(ptr);
10185}
10186
10187id::id()
10188 : ptr(nullptr) {}
10189
10190id::id(const id &obj)
10191 : ptr(nullptr)
10192{
10193 ptr = obj.copy();
10194}
10195
10197 : ptr(ptr) {}
10198
10199id::id(isl::ctx ctx, const std::string &str)
10200{
10201 auto res = isl_id_read_from_str(ctx.release(), str.c_str());
10202 ptr = res;
10203}
10204
10205id &id::operator=(id obj) {
10206 std::swap(this->ptr, obj.ptr);
10207 return *this;
10208}
10209
10210id::~id() {
10211 if (ptr)
10213}
10214
10215__isl_give isl_id *id::copy() const & {
10216 return isl_id_copy(ptr);
10217}
10218
10219__isl_keep isl_id *id::get() const {
10220 return ptr;
10221}
10222
10224 isl_id *tmp = ptr;
10225 ptr = nullptr;
10226 return tmp;
10227}
10228
10229bool id::is_null() const {
10230 return ptr == nullptr;
10231}
10232
10233isl::ctx id::ctx() const {
10234 return isl::ctx(isl_id_get_ctx(ptr));
10235}
10236
10237isl::id id::alloc(isl::ctx ctx, const std::string &name, void * user)
10238{
10239 auto res = isl_id_alloc(ctx.release(), name.c_str(), user);
10240 return manage(res);
10241}
10242
10243std::string id::name() const
10244{
10245 auto res = isl_id_get_name(get());
10246 std::string tmp(res);
10247 return tmp;
10248}
10249
10250std::string id::get_name() const
10251{
10252 return name();
10253}
10254
10255isl::id_list id::to_list() const
10256{
10257 auto res = isl_id_to_list(copy());
10258 return manage(res);
10259}
10260
10261void * id::user() const
10262{
10263 auto res = isl_id_get_user(get());
10264 return res;
10265}
10266
10267void * id::get_user() const
10268{
10269 return user();
10270}
10271
10272inline std::ostream &operator<<(std::ostream &os, const id &obj)
10273{
10274 char *str = isl_id_to_str(obj.get());
10275 if (!str) {
10276 os.setstate(std::ios_base::badbit);
10277 return os;
10278 }
10279 os << str;
10280 free(str);
10281 return os;
10282}
10283
10284// implementations for isl::id_list
10285id_list manage(__isl_take isl_id_list *ptr) {
10286 return id_list(ptr);
10287}
10288id_list manage_copy(__isl_keep isl_id_list *ptr) {
10289 ptr = isl_id_list_copy(ptr);
10290 return id_list(ptr);
10291}
10292
10294 : ptr(nullptr) {}
10295
10297 : ptr(nullptr)
10298{
10299 ptr = obj.copy();
10300}
10301
10302id_list::id_list(__isl_take isl_id_list *ptr)
10303 : ptr(ptr) {}
10304
10305id_list::id_list(isl::ctx ctx, int n)
10306{
10307 auto res = isl_id_list_alloc(ctx.release(), n);
10308 ptr = res;
10309}
10310
10311id_list::id_list(isl::id el)
10312{
10313 auto res = isl_id_list_from_id(el.release());
10314 ptr = res;
10315}
10316
10317id_list::id_list(isl::ctx ctx, const std::string &str)
10318{
10319 auto res = isl_id_list_read_from_str(ctx.release(), str.c_str());
10320 ptr = res;
10321}
10322
10324 std::swap(this->ptr, obj.ptr);
10325 return *this;
10326}
10327
10329 if (ptr)
10330 isl_id_list_free(ptr);
10331}
10332
10333__isl_give isl_id_list *id_list::copy() const & {
10334 return isl_id_list_copy(ptr);
10335}
10336
10337__isl_keep isl_id_list *id_list::get() const {
10338 return ptr;
10339}
10340
10341__isl_give isl_id_list *id_list::release() {
10342 isl_id_list *tmp = ptr;
10343 ptr = nullptr;
10344 return tmp;
10345}
10346
10347bool id_list::is_null() const {
10348 return ptr == nullptr;
10349}
10350
10351isl::ctx id_list::ctx() const {
10352 return isl::ctx(isl_id_list_get_ctx(ptr));
10353}
10354
10355isl::id_list id_list::add(isl::id el) const
10356{
10357 auto res = isl_id_list_add(copy(), el.release());
10358 return manage(res);
10359}
10360
10361isl::id_list id_list::add(const std::string &el) const
10362{
10363 return this->add(isl::id(ctx(), el));
10364}
10365
10366isl::id id_list::at(int index) const
10367{
10368 auto res = isl_id_list_get_at(get(), index);
10369 return manage(res);
10370}
10371
10372isl::id id_list::get_at(int index) const
10373{
10374 return at(index);
10375}
10376
10377isl::id_list id_list::clear() const
10378{
10379 auto res = isl_id_list_clear(copy());
10380 return manage(res);
10381}
10382
10383isl::id_list id_list::concat(isl::id_list list2) const
10384{
10385 auto res = isl_id_list_concat(copy(), list2.release());
10386 return manage(res);
10387}
10388
10389isl::id_list id_list::drop(unsigned int first, unsigned int n) const
10390{
10391 auto res = isl_id_list_drop(copy(), first, n);
10392 return manage(res);
10393}
10394
10395stat id_list::foreach(const std::function<stat(isl::id)> &fn) const
10396{
10397 struct fn_data {
10398 std::function<stat(isl::id)> func;
10399 } fn_data = { fn };
10400 auto fn_lambda = [](isl_id *arg_0, void *arg_1) -> isl_stat {
10401 auto *data = static_cast<struct fn_data *>(arg_1);
10402 auto ret = (data->func)(manage(arg_0));
10403 return ret.release();
10404 };
10405 auto res = isl_id_list_foreach(get(), fn_lambda, &fn_data);
10406 return manage(res);
10407}
10408
10409isl::id_list id_list::insert(unsigned int pos, isl::id el) const
10410{
10411 auto res = isl_id_list_insert(copy(), pos, el.release());
10412 return manage(res);
10413}
10414
10415isl::id_list id_list::insert(unsigned int pos, const std::string &el) const
10416{
10417 return this->insert(pos, isl::id(ctx(), el));
10418}
10419
10420class size id_list::size() const
10421{
10422 auto res = isl_id_list_size(get());
10423 return manage(res);
10424}
10425
10426inline std::ostream &operator<<(std::ostream &os, const id_list &obj)
10427{
10428 char *str = isl_id_list_to_str(obj.get());
10429 if (!str) {
10430 os.setstate(std::ios_base::badbit);
10431 return os;
10432 }
10433 os << str;
10434 free(str);
10435 return os;
10436}
10437
10438// implementations for isl::id_to_ast_expr
10439id_to_ast_expr manage(__isl_take isl_id_to_ast_expr *ptr) {
10440 return id_to_ast_expr(ptr);
10441}
10442id_to_ast_expr manage_copy(__isl_keep isl_id_to_ast_expr *ptr) {
10443 ptr = isl_id_to_ast_expr_copy(ptr);
10444 return id_to_ast_expr(ptr);
10445}
10446
10448 : ptr(nullptr) {}
10449
10451 : ptr(nullptr)
10452{
10453 ptr = obj.copy();
10454}
10455
10456id_to_ast_expr::id_to_ast_expr(__isl_take isl_id_to_ast_expr *ptr)
10457 : ptr(ptr) {}
10458
10460 std::swap(this->ptr, obj.ptr);
10461 return *this;
10462}
10463
10465 if (ptr)
10466 isl_id_to_ast_expr_free(ptr);
10467}
10468
10469__isl_give isl_id_to_ast_expr *id_to_ast_expr::copy() const & {
10470 return isl_id_to_ast_expr_copy(ptr);
10471}
10472
10473__isl_keep isl_id_to_ast_expr *id_to_ast_expr::get() const {
10474 return ptr;
10475}
10476
10477__isl_give isl_id_to_ast_expr *id_to_ast_expr::release() {
10478 isl_id_to_ast_expr *tmp = ptr;
10479 ptr = nullptr;
10480 return tmp;
10481}
10482
10483bool id_to_ast_expr::is_null() const {
10484 return ptr == nullptr;
10485}
10486
10487isl::ctx id_to_ast_expr::ctx() const {
10488 return isl::ctx(isl_id_to_ast_expr_get_ctx(ptr));
10489}
10490
10492{
10493 auto res = isl_id_to_ast_expr_alloc(ctx.release(), min_size);
10494 return manage(res);
10495}
10496
10498{
10499 auto res = isl_id_to_ast_expr_set(copy(), key.release(), val.release());
10500 return manage(res);
10501}
10502
10503isl::id_to_ast_expr id_to_ast_expr::set(const std::string &key, const isl::ast_expr &val) const
10504{
10505 return this->set(isl::id(ctx(), key), val);
10506}
10507
10508// implementations for isl::local_space
10516
10518 : ptr(nullptr) {}
10519
10521 : ptr(nullptr)
10522{
10523 ptr = obj.copy();
10524}
10525
10528
10534
10536 std::swap(this->ptr, obj.ptr);
10537 return *this;
10538}
10539
10544
10548
10550 return ptr;
10551}
10552
10554 isl_local_space *tmp = ptr;
10555 ptr = nullptr;
10556 return tmp;
10557}
10558
10560 return ptr == nullptr;
10561}
10562
10566
10567// implementations for isl::map
10569 return map(ptr);
10570}
10572 ptr = isl_map_copy(ptr);
10573 return map(ptr);
10574}
10575
10576map::map()
10577 : ptr(nullptr) {}
10578
10579map::map(const map &obj)
10580 : ptr(nullptr)
10581{
10582 ptr = obj.copy();
10583}
10584
10586 : ptr(ptr) {}
10587
10588map::map(isl::basic_map bmap)
10589{
10590 auto res = isl_map_from_basic_map(bmap.release());
10591 ptr = res;
10592}
10593
10594map::map(isl::ctx ctx, const std::string &str)
10595{
10596 auto res = isl_map_read_from_str(ctx.release(), str.c_str());
10597 ptr = res;
10598}
10599
10601 std::swap(this->ptr, obj.ptr);
10602 return *this;
10603}
10604
10605map::~map() {
10606 if (ptr)
10608}
10609
10610__isl_give isl_map *map::copy() const & {
10611 return isl_map_copy(ptr);
10612}
10613
10614__isl_keep isl_map *map::get() const {
10615 return ptr;
10616}
10617
10619 isl_map *tmp = ptr;
10620 ptr = nullptr;
10621 return tmp;
10622}
10623
10624bool map::is_null() const {
10625 return ptr == nullptr;
10626}
10627
10628isl::ctx map::ctx() const {
10629 return isl::ctx(isl_map_get_ctx(ptr));
10630}
10631
10637
10639{
10640 auto res = isl_map_add_dims(copy(), static_cast<enum isl_dim_type>(type), n);
10641 return manage(res);
10642}
10643
10645{
10646 auto res = isl_map_affine_hull(copy());
10647 return manage(res);
10648}
10649
10651{
10652 auto res = isl_map_align_params(copy(), model.release());
10653 return manage(res);
10654}
10655
10657{
10658 auto res = isl_map_apply_domain(copy(), map2.release());
10659 return manage(res);
10660}
10661
10663{
10664 return isl::union_map(*this).apply_domain(umap2);
10665}
10666
10667isl::map map::apply_domain(const isl::basic_map &map2) const
10668{
10669 return this->apply_domain(isl::map(map2));
10670}
10671
10672isl::map map::apply_range(isl::map map2) const
10673{
10674 auto res = isl_map_apply_range(copy(), map2.release());
10675 return manage(res);
10676}
10677
10678isl::union_map map::apply_range(const isl::union_map &umap2) const
10679{
10680 return isl::union_map(*this).apply_range(umap2);
10681}
10682
10683isl::map map::apply_range(const isl::basic_map &map2) const
10684{
10685 return this->apply_range(isl::map(map2));
10686}
10687
10688isl::map map::as_map() const
10689{
10690 return isl::union_map(*this).as_map();
10691}
10692
10693isl::multi_union_pw_aff map::as_multi_union_pw_aff() const
10694{
10695 return isl::union_map(*this).as_multi_union_pw_aff();
10696}
10697
10698isl::pw_multi_aff map::as_pw_multi_aff() const
10699{
10701 return manage(res);
10702}
10703
10704isl::union_pw_multi_aff map::as_union_pw_multi_aff() const
10705{
10706 return isl::union_map(*this).as_union_pw_multi_aff();
10707}
10708
10710{
10712 return manage(res);
10713}
10714
10716{
10717 return basic_map_list();
10718}
10719
10721{
10722 auto res = isl_map_bind_domain(copy(), tuple.release());
10723 return manage(res);
10724}
10725
10727{
10728 auto res = isl_map_bind_range(copy(), tuple.release());
10729 return manage(res);
10730}
10731
10732boolean map::can_curry() const
10733{
10734 auto res = isl_map_can_curry(get());
10735 return manage(res);
10736}
10737
10738isl::map map::coalesce() const
10739{
10740 auto res = isl_map_coalesce(copy());
10741 return manage(res);
10742}
10743
10745{
10746 auto res = isl_map_complement(copy());
10747 return manage(res);
10748}
10749
10750isl::union_map map::compute_divs() const
10751{
10752 return isl::union_map(*this).compute_divs();
10753}
10754
10755isl::map map::curry() const
10756{
10757 auto res = isl_map_curry(copy());
10758 return manage(res);
10759}
10760
10761isl::set map::deltas() const
10762{
10763 auto res = isl_map_deltas(copy());
10764 return manage(res);
10765}
10766
10767isl::map map::detect_equalities() const
10768{
10770 return manage(res);
10771}
10772
10774{
10775 auto res = isl_map_dim(get(), static_cast<enum isl_dim_type>(type));
10776 return manage(res);
10777}
10778
10780{
10781 auto res = isl_map_dim_max(copy(), pos);
10782 return manage(res);
10783}
10784
10786{
10787 auto res = isl_map_dim_min(copy(), pos);
10788 return manage(res);
10789}
10790
10791isl::set map::domain() const
10792{
10793 auto res = isl_map_domain(copy());
10794 return manage(res);
10795}
10796
10798{
10800 return manage(res);
10801}
10802
10803isl::map map::domain_factor_range() const
10804{
10806 return manage(res);
10807}
10808
10809isl::map map::domain_map() const
10810{
10811 auto res = isl_map_domain_map(copy());
10812 return manage(res);
10813}
10814
10815isl::union_pw_multi_aff map::domain_map_union_pw_multi_aff() const
10816{
10817 return isl::union_map(*this).domain_map_union_pw_multi_aff();
10818}
10819
10820isl::map map::domain_product(isl::map map2) const
10821{
10822 auto res = isl_map_domain_product(copy(), map2.release());
10823 return manage(res);
10824}
10825
10826isl::union_map map::domain_product(const isl::union_map &umap2) const
10827{
10828 return isl::union_map(*this).domain_product(umap2);
10829}
10830
10831isl::map map::domain_product(const isl::basic_map &map2) const
10832{
10833 return this->domain_product(isl::map(map2));
10834}
10835
10836class size map::domain_tuple_dim() const
10837{
10839 return manage(res);
10840}
10841
10842isl::id map::domain_tuple_id() const
10843{
10845 return manage(res);
10846}
10847
10848isl::id map::get_domain_tuple_id() const
10849{
10850 return domain_tuple_id();
10851}
10852
10853isl::map map::empty(isl::space space)
10854{
10855 auto res = isl_map_empty(space.release());
10856 return manage(res);
10857}
10858
10859isl::map map::eq_at(isl::multi_pw_aff mpa) const
10860{
10861 auto res = isl_map_eq_at_multi_pw_aff(copy(), mpa.release());
10862 return manage(res);
10863}
10864
10865isl::union_map map::eq_at(const isl::multi_union_pw_aff &mupa) const
10866{
10867 return isl::union_map(*this).eq_at(mupa);
10868}
10869
10870isl::map map::eq_at(const isl::aff &mpa) const
10871{
10872 return this->eq_at(isl::multi_pw_aff(mpa));
10873}
10874
10875isl::map map::eq_at(const isl::multi_aff &mpa) const
10876{
10877 return this->eq_at(isl::multi_pw_aff(mpa));
10878}
10879
10880isl::map map::eq_at(const isl::pw_aff &mpa) const
10881{
10882 return this->eq_at(isl::multi_pw_aff(mpa));
10883}
10884
10885isl::map map::eq_at(const isl::pw_multi_aff &mpa) const
10886{
10887 return this->eq_at(isl::multi_pw_aff(mpa));
10888}
10889
10890isl::map map::equate(isl::dim type1, int pos1, isl::dim type2, int pos2) const
10891{
10892 auto res = isl_map_equate(copy(), static_cast<enum isl_dim_type>(type1), pos1, static_cast<enum isl_dim_type>(type2), pos2);
10893 return manage(res);
10894}
10895
10896boolean map::every_map(const std::function<boolean(isl::map)> &test) const
10897{
10898 return isl::union_map(*this).every_map(test);
10899}
10900
10902{
10903 return isl::union_map(*this).extract_map(space);
10904}
10905
10907{
10908 auto res = isl_map_factor_domain(copy());
10909 return manage(res);
10910}
10911
10912isl::map map::factor_range() const
10913{
10914 auto res = isl_map_factor_range(copy());
10915 return manage(res);
10916}
10917
10918isl::map map::fix_si(isl::dim type, unsigned int pos, int value) const
10919{
10920 auto res = isl_map_fix_si(copy(), static_cast<enum isl_dim_type>(type), pos, value);
10921 return manage(res);
10922}
10923
10925{
10926 return isl::union_map(*this).fixed_power(exp);
10927}
10928
10929isl::union_map map::fixed_power(long exp) const
10930{
10931 return this->fixed_power(isl::val(ctx(), exp));
10932}
10933
10935{
10936 auto res = isl_map_flat_range_product(copy(), map2.release());
10937 return manage(res);
10938}
10939
10941{
10942 return isl::union_map(*this).flat_range_product(umap2);
10943}
10944
10946{
10947 return this->flat_range_product(isl::map(map2));
10948}
10949
10950isl::map map::flatten() const
10951{
10952 auto res = isl_map_flatten(copy());
10953 return manage(res);
10954}
10955
10957{
10959 return manage(res);
10960}
10961
10962isl::map map::flatten_range() const
10963{
10964 auto res = isl_map_flatten_range(copy());
10965 return manage(res);
10966}
10967
10969{
10970 auto res = isl_map_floordiv_val(copy(), d.release());
10971 return manage(res);
10972}
10973
10975{
10976 return this->floordiv_val(isl::val(ctx(), d));
10977}
10978
10979stat map::foreach_basic_map(const std::function<stat(isl::basic_map)> &fn) const
10980{
10981 struct fn_data {
10982 std::function<stat(isl::basic_map)> func;
10983 } fn_data = { fn };
10984 auto fn_lambda = [](isl_basic_map *arg_0, void *arg_1) -> isl_stat {
10985 auto *data = static_cast<struct fn_data *>(arg_1);
10986 auto ret = (data->func)(manage(arg_0));
10987 return ret.release();
10988 };
10989 auto res = isl_map_foreach_basic_map(get(), fn_lambda, &fn_data);
10990 return manage(res);
10991}
10992
10993stat map::foreach_map(const std::function<stat(isl::map)> &fn) const
10994{
10995 return isl::union_map(*this).foreach_map(fn);
10996}
10997
10999{
11000 auto res = isl_map_from_aff(aff.release());
11001 return manage(res);
11002}
11003
11005{
11007 return manage(res);
11008}
11009
11011{
11012 auto res = isl_map_from_domain_and_range(domain.release(), range.release());
11013 return manage(res);
11014}
11015
11017{
11018 auto res = isl_map_from_multi_aff(maff.release());
11019 return manage(res);
11020}
11021
11023{
11024 auto res = isl_map_from_pw_aff(pwaff.release());
11025 return manage(res);
11026}
11027
11029{
11031 return manage(res);
11032}
11033
11035{
11036 auto res = isl_map_from_union_map(umap.release());
11037 return manage(res);
11038}
11039
11041{
11042 auto res = isl_map_gist(copy(), context.release());
11043 return manage(res);
11044}
11045
11047{
11048 return isl::union_map(*this).gist(context);
11049}
11050
11051isl::map map::gist(const isl::basic_map &context) const
11052{
11053 return this->gist(isl::map(context));
11054}
11055
11056isl::map map::gist_domain(isl::set context) const
11057{
11058 auto res = isl_map_gist_domain(copy(), context.release());
11059 return manage(res);
11060}
11061
11062isl::union_map map::gist_domain(const isl::union_set &uset) const
11063{
11064 return isl::union_map(*this).gist_domain(uset);
11065}
11066
11067isl::map map::gist_domain(const isl::basic_set &context) const
11068{
11069 return this->gist_domain(isl::set(context));
11070}
11071
11072isl::map map::gist_domain(const isl::point &context) const
11073{
11074 return this->gist_domain(isl::set(context));
11075}
11076
11077isl::map map::gist_params(isl::set context) const
11078{
11079 auto res = isl_map_gist_params(copy(), context.release());
11080 return manage(res);
11081}
11082
11083isl::union_map map::gist_range(const isl::union_set &uset) const
11084{
11085 return isl::union_map(*this).gist_range(uset);
11086}
11087
11088boolean map::has_domain_tuple_id() const
11089{
11091 return manage(res);
11092}
11093
11095{
11096 auto res = isl_map_has_equal_space(get(), map2.get());
11097 return manage(res);
11098}
11099
11100boolean map::has_range_tuple_id() const
11101{
11103 return manage(res);
11104}
11105
11107{
11108 auto res = isl_map_has_tuple_id(get(), static_cast<enum isl_dim_type>(type));
11109 return manage(res);
11110}
11111
11113{
11114 auto res = isl_map_has_tuple_name(get(), static_cast<enum isl_dim_type>(type));
11115 return manage(res);
11116}
11117
11119{
11120 auto res = isl_map_identity(space.release());
11121 return manage(res);
11122}
11123
11125{
11126 auto res = isl_map_intersect(copy(), map2.release());
11127 return manage(res);
11128}
11129
11131{
11132 return isl::union_map(*this).intersect(umap2);
11133}
11134
11135isl::map map::intersect(const isl::basic_map &map2) const
11136{
11137 return this->intersect(isl::map(map2));
11138}
11139
11140isl::map map::intersect_domain(isl::set set) const
11141{
11142 auto res = isl_map_intersect_domain(copy(), set.release());
11143 return manage(res);
11144}
11145
11146isl::union_map map::intersect_domain(const isl::space &space) const
11147{
11148 return isl::union_map(*this).intersect_domain(space);
11149}
11150
11151isl::union_map map::intersect_domain(const isl::union_set &uset) const
11152{
11153 return isl::union_map(*this).intersect_domain(uset);
11154}
11155
11156isl::map map::intersect_domain(const isl::basic_set &set) const
11157{
11158 return this->intersect_domain(isl::set(set));
11159}
11160
11161isl::map map::intersect_domain(const isl::point &set) const
11162{
11163 return this->intersect_domain(isl::set(set));
11164}
11165
11166isl::map map::intersect_domain_factor_domain(isl::map factor) const
11167{
11169 return manage(res);
11170}
11171
11172isl::union_map map::intersect_domain_factor_domain(const isl::union_map &factor) const
11173{
11174 return isl::union_map(*this).intersect_domain_factor_domain(factor);
11175}
11176
11177isl::map map::intersect_domain_factor_domain(const isl::basic_map &factor) const
11178{
11179 return this->intersect_domain_factor_domain(isl::map(factor));
11180}
11181
11182isl::map map::intersect_domain_factor_range(isl::map factor) const
11183{
11185 return manage(res);
11186}
11187
11188isl::union_map map::intersect_domain_factor_range(const isl::union_map &factor) const
11189{
11190 return isl::union_map(*this).intersect_domain_factor_range(factor);
11191}
11192
11193isl::map map::intersect_domain_factor_range(const isl::basic_map &factor) const
11194{
11195 return this->intersect_domain_factor_range(isl::map(factor));
11196}
11197
11199{
11200 auto res = isl_map_intersect_params(copy(), params.release());
11201 return manage(res);
11202}
11203
11204isl::map map::intersect_range(isl::set set) const
11205{
11206 auto res = isl_map_intersect_range(copy(), set.release());
11207 return manage(res);
11208}
11209
11210isl::union_map map::intersect_range(const isl::space &space) const
11211{
11212 return isl::union_map(*this).intersect_range(space);
11213}
11214
11215isl::union_map map::intersect_range(const isl::union_set &uset) const
11216{
11217 return isl::union_map(*this).intersect_range(uset);
11218}
11219
11220isl::map map::intersect_range(const isl::basic_set &set) const
11221{
11222 return this->intersect_range(isl::set(set));
11223}
11224
11225isl::map map::intersect_range(const isl::point &set) const
11226{
11227 return this->intersect_range(isl::set(set));
11228}
11229
11230isl::map map::intersect_range_factor_domain(isl::map factor) const
11231{
11233 return manage(res);
11234}
11235
11236isl::union_map map::intersect_range_factor_domain(const isl::union_map &factor) const
11237{
11238 return isl::union_map(*this).intersect_range_factor_domain(factor);
11239}
11240
11241isl::map map::intersect_range_factor_domain(const isl::basic_map &factor) const
11242{
11243 return this->intersect_range_factor_domain(isl::map(factor));
11244}
11245
11246isl::map map::intersect_range_factor_range(isl::map factor) const
11247{
11249 return manage(res);
11250}
11251
11252isl::union_map map::intersect_range_factor_range(const isl::union_map &factor) const
11253{
11254 return isl::union_map(*this).intersect_range_factor_range(factor);
11255}
11256
11257isl::map map::intersect_range_factor_range(const isl::basic_map &factor) const
11258{
11259 return this->intersect_range_factor_range(isl::map(factor));
11260}
11261
11262boolean map::involves_dims(isl::dim type, unsigned int first, unsigned int n) const
11263{
11264 auto res = isl_map_involves_dims(get(), static_cast<enum isl_dim_type>(type), first, n);
11265 return manage(res);
11266}
11267
11268boolean map::is_bijective() const
11269{
11270 auto res = isl_map_is_bijective(get());
11271 return manage(res);
11272}
11273
11274boolean map::is_disjoint(const isl::map &map2) const
11275{
11276 auto res = isl_map_is_disjoint(get(), map2.get());
11277 return manage(res);
11278}
11279
11280boolean map::is_disjoint(const isl::union_map &umap2) const
11281{
11282 return isl::union_map(*this).is_disjoint(umap2);
11283}
11284
11285boolean map::is_disjoint(const isl::basic_map &map2) const
11286{
11287 return this->is_disjoint(isl::map(map2));
11288}
11289
11290boolean map::is_empty() const
11291{
11292 auto res = isl_map_is_empty(get());
11293 return manage(res);
11294}
11295
11296boolean map::is_equal(const isl::map &map2) const
11297{
11298 auto res = isl_map_is_equal(get(), map2.get());
11299 return manage(res);
11300}
11301
11302boolean map::is_equal(const isl::union_map &umap2) const
11303{
11304 return isl::union_map(*this).is_equal(umap2);
11305}
11306
11307boolean map::is_equal(const isl::basic_map &map2) const
11308{
11309 return this->is_equal(isl::map(map2));
11310}
11311
11312boolean map::is_injective() const
11313{
11314 auto res = isl_map_is_injective(get());
11315 return manage(res);
11316}
11317
11318boolean map::is_single_valued() const
11319{
11321 return manage(res);
11322}
11323
11324boolean map::is_strict_subset(const isl::map &map2) const
11325{
11326 auto res = isl_map_is_strict_subset(get(), map2.get());
11327 return manage(res);
11328}
11329
11330boolean map::is_strict_subset(const isl::union_map &umap2) const
11331{
11332 return isl::union_map(*this).is_strict_subset(umap2);
11333}
11334
11335boolean map::is_strict_subset(const isl::basic_map &map2) const
11336{
11337 return this->is_strict_subset(isl::map(map2));
11338}
11339
11340boolean map::is_subset(const isl::map &map2) const
11341{
11342 auto res = isl_map_is_subset(get(), map2.get());
11343 return manage(res);
11344}
11345
11346boolean map::is_subset(const isl::union_map &umap2) const
11347{
11348 return isl::union_map(*this).is_subset(umap2);
11349}
11350
11351boolean map::is_subset(const isl::basic_map &map2) const
11352{
11353 return this->is_subset(isl::map(map2));
11354}
11355
11356boolean map::isa_map() const
11357{
11358 return isl::union_map(*this).isa_map();
11359}
11360
11362{
11363 auto res = isl_map_lex_ge(set_space.release());
11364 return manage(res);
11365}
11366
11368{
11370 return manage(res);
11371}
11372
11374{
11375 auto res = isl_map_lex_gt(set_space.release());
11376 return manage(res);
11377}
11378
11380{
11382 return manage(res);
11383}
11384
11386{
11387 auto res = isl_map_lex_le(set_space.release());
11388 return manage(res);
11389}
11390
11392{
11394 return manage(res);
11395}
11396
11398{
11399 auto res = isl_map_lex_lt(set_space.release());
11400 return manage(res);
11401}
11402
11404{
11406 return manage(res);
11407}
11408
11409isl::map map::lexmax() const
11410{
11411 auto res = isl_map_lexmax(copy());
11412 return manage(res);
11413}
11414
11415isl::pw_multi_aff map::lexmax_pw_multi_aff() const
11416{
11418 return manage(res);
11419}
11420
11421isl::map map::lexmin() const
11422{
11423 auto res = isl_map_lexmin(copy());
11424 return manage(res);
11425}
11426
11427isl::pw_multi_aff map::lexmin_pw_multi_aff() const
11428{
11430 return manage(res);
11431}
11432
11433isl::map map::lower_bound(isl::multi_pw_aff lower) const
11434{
11436 return manage(res);
11437}
11438
11439isl::map map::lower_bound_si(isl::dim type, unsigned int pos, int value) const
11440{
11441 auto res = isl_map_lower_bound_si(copy(), static_cast<enum isl_dim_type>(type), pos, value);
11442 return manage(res);
11443}
11444
11446{
11447 return isl::union_map(*this).map_list();
11448}
11449
11451{
11453 return manage(res);
11454}
11455
11456isl::multi_pw_aff map::min_multi_pw_aff() const
11457{
11459 return manage(res);
11460}
11461
11462isl::map map::move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const
11463{
11464 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);
11465 return manage(res);
11466}
11467
11468class size map::n_basic_map() const
11469{
11470 auto res = isl_map_n_basic_map(get());
11471 return manage(res);
11472}
11473
11474isl::map map::order_lt(isl::dim type1, int pos1, isl::dim type2, int pos2) const
11475{
11476 auto res = isl_map_order_lt(copy(), static_cast<enum isl_dim_type>(type1), pos1, static_cast<enum isl_dim_type>(type2), pos2);
11477 return manage(res);
11478}
11479
11480isl::set map::params() const
11481{
11482 return isl::union_map(*this).params();
11483}
11484
11486{
11488 return manage(res);
11489}
11490
11491isl::map map::preimage_domain(isl::multi_aff ma) const
11492{
11493 auto res = isl_map_preimage_domain_multi_aff(copy(), ma.release());
11494 return manage(res);
11495}
11496
11497isl::map map::preimage_domain(isl::multi_pw_aff mpa) const
11498{
11500 return manage(res);
11501}
11502
11503isl::map map::preimage_domain(isl::pw_multi_aff pma) const
11504{
11505 auto res = isl_map_preimage_domain_pw_multi_aff(copy(), pma.release());
11506 return manage(res);
11507}
11508
11509isl::union_map map::preimage_domain(const isl::union_pw_multi_aff &upma) const
11510{
11511 return isl::union_map(*this).preimage_domain(upma);
11512}
11513
11514isl::map map::preimage_range(isl::multi_aff ma) const
11515{
11516 auto res = isl_map_preimage_range_multi_aff(copy(), ma.release());
11517 return manage(res);
11518}
11519
11520isl::map map::preimage_range(isl::pw_multi_aff pma) const
11521{
11522 auto res = isl_map_preimage_range_pw_multi_aff(copy(), pma.release());
11523 return manage(res);
11524}
11525
11526isl::union_map map::preimage_range(const isl::union_pw_multi_aff &upma) const
11527{
11528 return isl::union_map(*this).preimage_range(upma);
11529}
11530
11531isl::map map::product(isl::map map2) const
11532{
11533 auto res = isl_map_product(copy(), map2.release());
11534 return manage(res);
11535}
11536
11537isl::union_map map::product(const isl::union_map &umap2) const
11538{
11539 return isl::union_map(*this).product(umap2);
11540}
11541
11542isl::map map::product(const isl::basic_map &map2) const
11543{
11544 return this->product(isl::map(map2));
11545}
11546
11547isl::map map::project_out(isl::dim type, unsigned int first, unsigned int n) const
11548{
11549 auto res = isl_map_project_out(copy(), static_cast<enum isl_dim_type>(type), first, n);
11550 return manage(res);
11551}
11552
11554{
11556 return manage(res);
11557}
11558
11559isl::set map::range() const
11560{
11561 auto res = isl_map_range(copy());
11562 return manage(res);
11563}
11564
11565isl::map map::range_factor_domain() const
11566{
11568 return manage(res);
11569}
11570
11571isl::map map::range_factor_range() const
11572{
11574 return manage(res);
11575}
11576
11577isl::fixed_box map::range_lattice_tile() const
11578{
11580 return manage(res);
11581}
11582
11583isl::fixed_box map::get_range_lattice_tile() const
11584{
11585 return range_lattice_tile();
11586}
11587
11588isl::map map::range_map() const
11589{
11590 auto res = isl_map_range_map(copy());
11591 return manage(res);
11592}
11593
11594isl::map map::range_product(isl::map map2) const
11595{
11596 auto res = isl_map_range_product(copy(), map2.release());
11597 return manage(res);
11598}
11599
11600isl::union_map map::range_product(const isl::union_map &umap2) const
11601{
11602 return isl::union_map(*this).range_product(umap2);
11603}
11604
11605isl::map map::range_product(const isl::basic_map &map2) const
11606{
11607 return this->range_product(isl::map(map2));
11608}
11609
11610isl::map map::range_reverse() const
11611{
11612 auto res = isl_map_range_reverse(copy());
11613 return manage(res);
11614}
11615
11616isl::fixed_box map::range_simple_fixed_box_hull() const
11617{
11619 return manage(res);
11620}
11621
11622isl::fixed_box map::get_range_simple_fixed_box_hull() const
11623{
11625}
11626
11627class size map::range_tuple_dim() const
11628{
11630 return manage(res);
11631}
11632
11633isl::id map::range_tuple_id() const
11634{
11636 return manage(res);
11637}
11638
11639isl::id map::get_range_tuple_id() const
11640{
11641 return range_tuple_id();
11642}
11643
11644isl::map map::reverse() const
11645{
11646 auto res = isl_map_reverse(copy());
11647 return manage(res);
11648}
11649
11650isl::basic_map map::sample() const
11651{
11652 auto res = isl_map_sample(copy());
11653 return manage(res);
11654}
11655
11656isl::map map::set_domain_tuple(isl::id id) const
11657{
11659 return manage(res);
11660}
11661
11662isl::map map::set_domain_tuple(const std::string &id) const
11663{
11664 return this->set_domain_tuple(isl::id(ctx(), id));
11665}
11666
11667isl::map map::set_range_tuple(isl::id id) const
11668{
11670 return manage(res);
11671}
11672
11673isl::map map::set_range_tuple(const std::string &id) const
11674{
11675 return this->set_range_tuple(isl::id(ctx(), id));
11676}
11677
11679{
11680 auto res = isl_map_set_tuple_id(copy(), static_cast<enum isl_dim_type>(type), id.release());
11681 return manage(res);
11682}
11683
11684isl::map map::set_tuple_id(isl::dim type, const std::string &id) const
11685{
11686 return this->set_tuple_id(type, isl::id(ctx(), id));
11687}
11688
11689isl::space map::space() const
11690{
11691 auto res = isl_map_get_space(get());
11692 return manage(res);
11693}
11694
11696{
11697 return space();
11698}
11699
11700isl::map map::subtract(isl::map map2) const
11701{
11702 auto res = isl_map_subtract(copy(), map2.release());
11703 return manage(res);
11704}
11705
11706isl::union_map map::subtract(const isl::union_map &umap2) const
11707{
11708 return isl::union_map(*this).subtract(umap2);
11709}
11710
11711isl::map map::subtract(const isl::basic_map &map2) const
11712{
11713 return this->subtract(isl::map(map2));
11714}
11715
11716isl::union_map map::subtract_domain(const isl::union_set &dom) const
11717{
11718 return isl::union_map(*this).subtract_domain(dom);
11719}
11720
11721isl::union_map map::subtract_range(const isl::union_set &dom) const
11722{
11723 return isl::union_map(*this).subtract_range(dom);
11724}
11725
11727{
11728 auto res = isl_map_sum(copy(), map2.release());
11729 return manage(res);
11730}
11731
11733{
11734 auto res = isl_map_to_list(copy());
11735 return manage(res);
11736}
11737
11739{
11740 auto res = isl_map_to_union_map(copy());
11741 return manage(res);
11742}
11743
11745{
11746 auto res = isl_map_get_tuple_id(get(), static_cast<enum isl_dim_type>(type));
11747 return manage(res);
11748}
11749
11751{
11752 return tuple_id(type);
11753}
11754
11755isl::map map::uncurry() const
11756{
11757 auto res = isl_map_uncurry(copy());
11758 return manage(res);
11759}
11760
11762{
11763 auto res = isl_map_union(copy(), map2.release());
11764 return manage(res);
11765}
11766
11767isl::union_map map::unite(const isl::union_map &umap2) const
11768{
11769 return isl::union_map(*this).unite(umap2);
11770}
11771
11772isl::map map::unite(const isl::basic_map &map2) const
11773{
11774 return this->unite(isl::map(map2));
11775}
11776
11777isl::map map::universe(isl::space space)
11778{
11779 auto res = isl_map_universe(space.release());
11780 return manage(res);
11781}
11782
11783isl::basic_map map::unshifted_simple_hull() const
11784{
11786 return manage(res);
11787}
11788
11789isl::map map::upper_bound(isl::multi_pw_aff upper) const
11790{
11792 return manage(res);
11793}
11794
11795isl::map map::upper_bound_si(isl::dim type, unsigned int pos, int value) const
11796{
11797 auto res = isl_map_upper_bound_si(copy(), static_cast<enum isl_dim_type>(type), pos, value);
11798 return manage(res);
11799}
11800
11801isl::set map::wrap() const
11802{
11803 auto res = isl_map_wrap(copy());
11804 return manage(res);
11805}
11806
11807isl::map map::zip() const
11808{
11809 auto res = isl_map_zip(copy());
11810 return manage(res);
11811}
11812
11813inline std::ostream &operator<<(std::ostream &os, const map &obj)
11814{
11815 char *str = isl_map_to_str(obj.get());
11816 if (!str) {
11817 os.setstate(std::ios_base::badbit);
11818 return os;
11819 }
11820 os << str;
11821 free(str);
11822 return os;
11823}
11824
11825// implementations for isl::map_list
11826map_list manage(__isl_take isl_map_list *ptr) {
11827 return map_list(ptr);
11828}
11829map_list manage_copy(__isl_keep isl_map_list *ptr) {
11830 ptr = isl_map_list_copy(ptr);
11831 return map_list(ptr);
11832}
11833
11835 : ptr(nullptr) {}
11836
11838 : ptr(nullptr)
11839{
11840 ptr = obj.copy();
11841}
11842
11843map_list::map_list(__isl_take isl_map_list *ptr)
11844 : ptr(ptr) {}
11845
11846map_list::map_list(isl::ctx ctx, int n)
11847{
11848 auto res = isl_map_list_alloc(ctx.release(), n);
11849 ptr = res;
11850}
11851
11852map_list::map_list(isl::map el)
11853{
11854 auto res = isl_map_list_from_map(el.release());
11855 ptr = res;
11856}
11857
11858map_list::map_list(isl::ctx ctx, const std::string &str)
11859{
11860 auto res = isl_map_list_read_from_str(ctx.release(), str.c_str());
11861 ptr = res;
11862}
11863
11865 std::swap(this->ptr, obj.ptr);
11866 return *this;
11867}
11868
11870 if (ptr)
11871 isl_map_list_free(ptr);
11872}
11873
11874__isl_give isl_map_list *map_list::copy() const & {
11875 return isl_map_list_copy(ptr);
11876}
11877
11878__isl_keep isl_map_list *map_list::get() const {
11879 return ptr;
11880}
11881
11882__isl_give isl_map_list *map_list::release() {
11883 isl_map_list *tmp = ptr;
11884 ptr = nullptr;
11885 return tmp;
11886}
11887
11888bool map_list::is_null() const {
11889 return ptr == nullptr;
11890}
11891
11892isl::ctx map_list::ctx() const {
11893 return isl::ctx(isl_map_list_get_ctx(ptr));
11894}
11895
11896isl::map_list map_list::add(isl::map el) const
11897{
11898 auto res = isl_map_list_add(copy(), el.release());
11899 return manage(res);
11900}
11901
11902isl::map map_list::at(int index) const
11903{
11904 auto res = isl_map_list_get_at(get(), index);
11905 return manage(res);
11906}
11907
11908isl::map map_list::get_at(int index) const
11909{
11910 return at(index);
11911}
11912
11913isl::map_list map_list::clear() const
11914{
11915 auto res = isl_map_list_clear(copy());
11916 return manage(res);
11917}
11918
11919isl::map_list map_list::concat(isl::map_list list2) const
11920{
11921 auto res = isl_map_list_concat(copy(), list2.release());
11922 return manage(res);
11923}
11924
11925isl::map_list map_list::drop(unsigned int first, unsigned int n) const
11926{
11927 auto res = isl_map_list_drop(copy(), first, n);
11928 return manage(res);
11929}
11930
11931stat map_list::foreach(const std::function<stat(isl::map)> &fn) const
11932{
11933 struct fn_data {
11934 std::function<stat(isl::map)> func;
11935 } fn_data = { fn };
11936 auto fn_lambda = [](isl_map *arg_0, void *arg_1) -> isl_stat {
11937 auto *data = static_cast<struct fn_data *>(arg_1);
11938 auto ret = (data->func)(manage(arg_0));
11939 return ret.release();
11940 };
11941 auto res = isl_map_list_foreach(get(), fn_lambda, &fn_data);
11942 return manage(res);
11943}
11944
11945isl::map_list map_list::insert(unsigned int pos, isl::map el) const
11946{
11947 auto res = isl_map_list_insert(copy(), pos, el.release());
11948 return manage(res);
11949}
11950
11951class size map_list::size() const
11952{
11953 auto res = isl_map_list_size(get());
11954 return manage(res);
11955}
11956
11957inline std::ostream &operator<<(std::ostream &os, const map_list &obj)
11958{
11959 char *str = isl_map_list_to_str(obj.get());
11960 if (!str) {
11961 os.setstate(std::ios_base::badbit);
11962 return os;
11963 }
11964 os << str;
11965 free(str);
11966 return os;
11967}
11968
11969// implementations for isl::multi_aff
11971 return multi_aff(ptr);
11972}
11974 ptr = isl_multi_aff_copy(ptr);
11975 return multi_aff(ptr);
11976}
11977
11979 : ptr(nullptr) {}
11980
11982 : ptr(nullptr)
11983{
11984 ptr = obj.copy();
11985}
11986
11988 : ptr(ptr) {}
11989
11990multi_aff::multi_aff(isl::aff aff)
11991{
11992 auto res = isl_multi_aff_from_aff(aff.release());
11993 ptr = res;
11994}
11995
11996multi_aff::multi_aff(isl::space space, isl::aff_list list)
11997{
11998 auto res = isl_multi_aff_from_aff_list(space.release(), list.release());
11999 ptr = res;
12000}
12001
12002multi_aff::multi_aff(isl::ctx ctx, const std::string &str)
12003{
12004 auto res = isl_multi_aff_read_from_str(ctx.release(), str.c_str());
12005 ptr = res;
12006}
12007
12009 std::swap(this->ptr, obj.ptr);
12010 return *this;
12011}
12012
12014 if (ptr)
12015 isl_multi_aff_free(ptr);
12016}
12017
12019 return isl_multi_aff_copy(ptr);
12020}
12021
12023 return ptr;
12024}
12025
12027 isl_multi_aff *tmp = ptr;
12028 ptr = nullptr;
12029 return tmp;
12030}
12031
12032bool multi_aff::is_null() const {
12033 return ptr == nullptr;
12034}
12035
12036isl::ctx multi_aff::ctx() const {
12037 return isl::ctx(isl_multi_aff_get_ctx(ptr));
12038}
12039
12040isl::multi_aff multi_aff::add(isl::multi_aff multi2) const
12041{
12042 auto res = isl_multi_aff_add(copy(), multi2.release());
12043 return manage(res);
12044}
12045
12046isl::multi_pw_aff multi_aff::add(const isl::multi_pw_aff &multi2) const
12047{
12048 return isl::pw_multi_aff(*this).add(multi2);
12049}
12050
12051isl::multi_union_pw_aff multi_aff::add(const isl::multi_union_pw_aff &multi2) const
12052{
12053 return isl::pw_multi_aff(*this).add(multi2);
12054}
12055
12056isl::pw_multi_aff multi_aff::add(const isl::pw_multi_aff &pma2) const
12057{
12058 return isl::pw_multi_aff(*this).add(pma2);
12059}
12060
12061isl::union_pw_multi_aff multi_aff::add(const isl::union_pw_multi_aff &upma2) const
12062{
12063 return isl::pw_multi_aff(*this).add(upma2);
12064}
12065
12066isl::multi_aff multi_aff::add(const isl::aff &multi2) const
12067{
12068 return this->add(isl::multi_aff(multi2));
12069}
12070
12071isl::multi_aff multi_aff::add_constant(isl::multi_val mv) const
12072{
12073 auto res = isl_multi_aff_add_constant_multi_val(copy(), mv.release());
12074 return manage(res);
12075}
12076
12077isl::multi_aff multi_aff::add_constant(isl::val v) const
12078{
12079 auto res = isl_multi_aff_add_constant_val(copy(), v.release());
12080 return manage(res);
12081}
12082
12083isl::multi_aff multi_aff::add_constant(long v) const
12084{
12085 return this->add_constant(isl::val(ctx(), v));
12086}
12087
12089{
12090 return isl::pw_multi_aff(*this).add_pw_multi_aff(pma);
12091}
12092
12094{
12095 return isl::pw_multi_aff(*this).apply(upma2);
12096}
12097
12099{
12100 auto res = isl_multi_aff_as_map(copy());
12101 return manage(res);
12102}
12103
12104isl::multi_aff multi_aff::as_multi_aff() const
12105{
12106 return isl::pw_multi_aff(*this).as_multi_aff();
12107}
12108
12109isl::multi_union_pw_aff multi_aff::as_multi_union_pw_aff() const
12110{
12111 return isl::pw_multi_aff(*this).as_multi_union_pw_aff();
12112}
12113
12114isl::pw_multi_aff multi_aff::as_pw_multi_aff() const
12115{
12116 return isl::pw_multi_aff(*this).as_pw_multi_aff();
12117}
12118
12120{
12121 auto res = isl_multi_aff_as_set(copy());
12122 return manage(res);
12123}
12124
12125isl::union_map multi_aff::as_union_map() const
12126{
12127 return isl::pw_multi_aff(*this).as_union_map();
12128}
12129
12130isl::aff multi_aff::at(int pos) const
12131{
12132 auto res = isl_multi_aff_get_at(get(), pos);
12133 return manage(res);
12134}
12135
12136isl::aff multi_aff::get_at(int pos) const
12137{
12138 return at(pos);
12139}
12140
12141isl::basic_set multi_aff::bind(isl::multi_id tuple) const
12142{
12143 auto res = isl_multi_aff_bind(copy(), tuple.release());
12144 return manage(res);
12145}
12146
12147isl::multi_aff multi_aff::bind_domain(isl::multi_id tuple) const
12148{
12149 auto res = isl_multi_aff_bind_domain(copy(), tuple.release());
12150 return manage(res);
12151}
12152
12153isl::multi_aff multi_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const
12154{
12155 auto res = isl_multi_aff_bind_domain_wrapped_domain(copy(), tuple.release());
12156 return manage(res);
12157}
12158
12159isl::pw_multi_aff multi_aff::coalesce() const
12160{
12161 return isl::pw_multi_aff(*this).coalesce();
12162}
12163
12164isl::multi_val multi_aff::constant_multi_val() const
12165{
12167 return manage(res);
12168}
12169
12170isl::multi_val multi_aff::get_constant_multi_val() const
12171{
12172 return constant_multi_val();
12173}
12174
12176{
12177 auto res = isl_multi_aff_dim(get(), static_cast<enum isl_dim_type>(type));
12178 return manage(res);
12179}
12180
12182{
12183 return isl::pw_multi_aff(*this).domain();
12184}
12185
12187{
12189 return manage(res);
12190}
12191
12192isl::pw_multi_aff multi_aff::drop_dims(isl::dim type, unsigned int first, unsigned int n) const
12193{
12194 return isl::pw_multi_aff(*this).drop_dims(type, first, n);
12195}
12196
12198{
12200}
12201
12203{
12204 auto res = isl_multi_aff_flat_range_product(copy(), multi2.release());
12205 return manage(res);
12206}
12207
12208isl::multi_pw_aff multi_aff::flat_range_product(const isl::multi_pw_aff &multi2) const
12209{
12210 return isl::pw_multi_aff(*this).flat_range_product(multi2);
12211}
12212
12213isl::multi_union_pw_aff multi_aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const
12214{
12215 return isl::pw_multi_aff(*this).flat_range_product(multi2);
12216}
12217
12218isl::pw_multi_aff multi_aff::flat_range_product(const isl::pw_multi_aff &pma2) const
12219{
12220 return isl::pw_multi_aff(*this).flat_range_product(pma2);
12221}
12222
12223isl::union_pw_multi_aff multi_aff::flat_range_product(const isl::union_pw_multi_aff &upma2) const
12224{
12225 return isl::pw_multi_aff(*this).flat_range_product(upma2);
12226}
12227
12228isl::multi_aff multi_aff::flat_range_product(const isl::aff &multi2) const
12229{
12230 return this->flat_range_product(isl::multi_aff(multi2));
12231}
12232
12233isl::multi_aff multi_aff::floor() const
12234{
12235 auto res = isl_multi_aff_floor(copy());
12236 return manage(res);
12237}
12238
12240{
12241 return isl::pw_multi_aff(*this).foreach_piece(fn);
12242}
12243
12245{
12246 auto res = isl_multi_aff_gist(copy(), context.release());
12247 return manage(res);
12248}
12249
12251{
12252 return isl::pw_multi_aff(*this).gist(context);
12253}
12254
12255isl::multi_aff multi_aff::gist(const isl::basic_set &context) const
12256{
12257 return this->gist(isl::set(context));
12258}
12259
12260isl::multi_aff multi_aff::gist(const isl::point &context) const
12261{
12262 return this->gist(isl::set(context));
12263}
12264
12265boolean multi_aff::has_range_tuple_id() const
12266{
12267 auto res = isl_multi_aff_has_range_tuple_id(get());
12268 return manage(res);
12269}
12270
12272{
12273 auto res = isl_multi_aff_identity(space.release());
12274 return manage(res);
12275}
12276
12278{
12279 auto res = isl_multi_aff_identity_multi_aff(copy());
12280 return manage(res);
12281}
12282
12284{
12285 auto res = isl_multi_aff_identity_on_domain_space(space.release());
12286 return manage(res);
12287}
12288
12289isl::multi_aff multi_aff::insert_domain(isl::space domain) const
12290{
12291 auto res = isl_multi_aff_insert_domain(copy(), domain.release());
12292 return manage(res);
12293}
12294
12295isl::pw_multi_aff multi_aff::intersect_domain(const isl::set &set) const
12296{
12297 return isl::pw_multi_aff(*this).intersect_domain(set);
12298}
12299
12300isl::union_pw_multi_aff multi_aff::intersect_domain(const isl::space &space) const
12301{
12302 return isl::pw_multi_aff(*this).intersect_domain(space);
12303}
12304
12305isl::union_pw_multi_aff multi_aff::intersect_domain(const isl::union_set &uset) const
12306{
12307 return isl::pw_multi_aff(*this).intersect_domain(uset);
12308}
12309
12310isl::union_pw_multi_aff multi_aff::intersect_domain_wrapped_domain(const isl::union_set &uset) const
12311{
12312 return isl::pw_multi_aff(*this).intersect_domain_wrapped_domain(uset);
12313}
12314
12315isl::union_pw_multi_aff multi_aff::intersect_domain_wrapped_range(const isl::union_set &uset) const
12316{
12317 return isl::pw_multi_aff(*this).intersect_domain_wrapped_range(uset);
12318}
12319
12320isl::pw_multi_aff multi_aff::intersect_params(const isl::set &set) const
12321{
12322 return isl::pw_multi_aff(*this).intersect_params(set);
12323}
12324
12325boolean multi_aff::involves_locals() const
12326{
12327 auto res = isl_multi_aff_involves_locals(get());
12328 return manage(res);
12329}
12330
12331boolean multi_aff::involves_nan() const
12332{
12333 auto res = isl_multi_aff_involves_nan(get());
12334 return manage(res);
12335}
12336
12337boolean multi_aff::involves_param(const isl::id &id) const
12338{
12339 return isl::pw_multi_aff(*this).involves_param(id);
12340}
12341
12342boolean multi_aff::involves_param(const std::string &id) const
12343{
12344 return this->involves_param(isl::id(ctx(), id));
12345}
12346
12347boolean multi_aff::involves_param(const isl::id_list &list) const
12348{
12349 return isl::pw_multi_aff(*this).involves_param(list);
12350}
12351
12352boolean multi_aff::isa_multi_aff() const
12353{
12354 return isl::pw_multi_aff(*this).isa_multi_aff();
12355}
12356
12357boolean multi_aff::isa_pw_multi_aff() const
12358{
12359 return isl::pw_multi_aff(*this).isa_pw_multi_aff();
12360}
12361
12362isl::aff_list multi_aff::list() const
12363{
12364 auto res = isl_multi_aff_get_list(get());
12365 return manage(res);
12366}
12367
12368isl::aff_list multi_aff::get_list() const
12369{
12370 return list();
12371}
12372
12373isl::multi_pw_aff multi_aff::max(const isl::multi_pw_aff &multi2) const
12374{
12375 return isl::pw_multi_aff(*this).max(multi2);
12376}
12377
12378isl::multi_val multi_aff::max_multi_val() const
12379{
12380 return isl::pw_multi_aff(*this).max_multi_val();
12381}
12382
12383isl::multi_pw_aff multi_aff::min(const isl::multi_pw_aff &multi2) const
12384{
12385 return isl::pw_multi_aff(*this).min(multi2);
12386}
12387
12388isl::multi_val multi_aff::min_multi_val() const
12389{
12390 return isl::pw_multi_aff(*this).min_multi_val();
12391}
12392
12393isl::multi_aff multi_aff::multi_val_on_domain(isl::space space, isl::multi_val mv)
12394{
12396 return manage(res);
12397}
12398
12399class size multi_aff::n_piece() const
12400{
12401 return isl::pw_multi_aff(*this).n_piece();
12402}
12403
12404isl::multi_aff multi_aff::neg() const
12405{
12406 auto res = isl_multi_aff_neg(copy());
12407 return manage(res);
12408}
12409
12410boolean multi_aff::plain_is_empty() const
12411{
12412 return isl::pw_multi_aff(*this).plain_is_empty();
12413}
12414
12415boolean multi_aff::plain_is_equal(const isl::multi_aff &multi2) const
12416{
12417 auto res = isl_multi_aff_plain_is_equal(get(), multi2.get());
12418 return manage(res);
12419}
12420
12421boolean multi_aff::plain_is_equal(const isl::multi_pw_aff &multi2) const
12422{
12423 return isl::pw_multi_aff(*this).plain_is_equal(multi2);
12424}
12425
12426boolean multi_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
12427{
12428 return isl::pw_multi_aff(*this).plain_is_equal(multi2);
12429}
12430
12431boolean multi_aff::plain_is_equal(const isl::aff &multi2) const
12432{
12433 return this->plain_is_equal(isl::multi_aff(multi2));
12434}
12435
12436isl::pw_multi_aff multi_aff::preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const
12437{
12438 return isl::pw_multi_aff(*this).preimage_domain_wrapped_domain(pma2);
12439}
12440
12441isl::union_pw_multi_aff multi_aff::preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const
12442{
12443 return isl::pw_multi_aff(*this).preimage_domain_wrapped_domain(upma2);
12444}
12445
12446isl::multi_aff multi_aff::product(isl::multi_aff multi2) const
12447{
12448 auto res = isl_multi_aff_product(copy(), multi2.release());
12449 return manage(res);
12450}
12451
12452isl::multi_pw_aff multi_aff::product(const isl::multi_pw_aff &multi2) const
12453{
12454 return isl::pw_multi_aff(*this).product(multi2);
12455}
12456
12457isl::pw_multi_aff multi_aff::product(const isl::pw_multi_aff &pma2) const
12458{
12459 return isl::pw_multi_aff(*this).product(pma2);
12460}
12461
12462isl::multi_aff multi_aff::product(const isl::aff &multi2) const
12463{
12464 return this->product(isl::multi_aff(multi2));
12465}
12466
12467isl::multi_aff multi_aff::pullback(isl::multi_aff ma2) const
12468{
12470 return manage(res);
12471}
12472
12473isl::multi_pw_aff multi_aff::pullback(const isl::multi_pw_aff &mpa2) const
12474{
12475 return isl::pw_multi_aff(*this).pullback(mpa2);
12476}
12477
12478isl::pw_multi_aff multi_aff::pullback(const isl::pw_multi_aff &pma2) const
12479{
12480 return isl::pw_multi_aff(*this).pullback(pma2);
12481}
12482
12483isl::union_pw_multi_aff multi_aff::pullback(const isl::union_pw_multi_aff &upma2) const
12484{
12485 return isl::pw_multi_aff(*this).pullback(upma2);
12486}
12487
12488isl::multi_aff multi_aff::pullback(const isl::aff &ma2) const
12489{
12490 return this->pullback(isl::multi_aff(ma2));
12491}
12492
12493isl::pw_multi_aff_list multi_aff::pw_multi_aff_list() const
12494{
12495 return isl::pw_multi_aff(*this).pw_multi_aff_list();
12496}
12497
12498isl::pw_multi_aff multi_aff::range_factor_domain() const
12499{
12500 return isl::pw_multi_aff(*this).range_factor_domain();
12501}
12502
12503isl::pw_multi_aff multi_aff::range_factor_range() const
12504{
12505 return isl::pw_multi_aff(*this).range_factor_range();
12506}
12507
12508isl::multi_aff multi_aff::range_map(isl::space space)
12509{
12510 auto res = isl_multi_aff_range_map(space.release());
12511 return manage(res);
12512}
12513
12514isl::multi_aff multi_aff::range_product(isl::multi_aff multi2) const
12515{
12516 auto res = isl_multi_aff_range_product(copy(), multi2.release());
12517 return manage(res);
12518}
12519
12520isl::multi_pw_aff multi_aff::range_product(const isl::multi_pw_aff &multi2) const
12521{
12522 return isl::pw_multi_aff(*this).range_product(multi2);
12523}
12524
12525isl::multi_union_pw_aff multi_aff::range_product(const isl::multi_union_pw_aff &multi2) const
12526{
12527 return isl::pw_multi_aff(*this).range_product(multi2);
12528}
12529
12530isl::pw_multi_aff multi_aff::range_product(const isl::pw_multi_aff &pma2) const
12531{
12532 return isl::pw_multi_aff(*this).range_product(pma2);
12533}
12534
12535isl::union_pw_multi_aff multi_aff::range_product(const isl::union_pw_multi_aff &upma2) const
12536{
12537 return isl::pw_multi_aff(*this).range_product(upma2);
12538}
12539
12540isl::multi_aff multi_aff::range_product(const isl::aff &multi2) const
12541{
12542 return this->range_product(isl::multi_aff(multi2));
12543}
12544
12545isl::id multi_aff::range_tuple_id() const
12546{
12547 auto res = isl_multi_aff_get_range_tuple_id(get());
12548 return manage(res);
12549}
12550
12551isl::id multi_aff::get_range_tuple_id() const
12552{
12553 return range_tuple_id();
12554}
12555
12556isl::multi_aff multi_aff::reset_range_tuple_id() const
12557{
12558 auto res = isl_multi_aff_reset_range_tuple_id(copy());
12559 return manage(res);
12560}
12561
12563{
12564 auto res = isl_multi_aff_reset_tuple_id(copy(), static_cast<enum isl_dim_type>(type));
12565 return manage(res);
12566}
12567
12569{
12570 auto res = isl_multi_aff_scale_multi_val(copy(), mv.release());
12571 return manage(res);
12572}
12573
12575{
12576 auto res = isl_multi_aff_scale_val(copy(), v.release());
12577 return manage(res);
12578}
12579
12580isl::multi_aff multi_aff::scale(long v) const
12581{
12582 return this->scale(isl::val(ctx(), v));
12583}
12584
12585isl::multi_aff multi_aff::scale_down(isl::multi_val mv) const
12586{
12587 auto res = isl_multi_aff_scale_down_multi_val(copy(), mv.release());
12588 return manage(res);
12589}
12590
12591isl::multi_aff multi_aff::scale_down(isl::val v) const
12592{
12593 auto res = isl_multi_aff_scale_down_val(copy(), v.release());
12594 return manage(res);
12595}
12596
12597isl::multi_aff multi_aff::scale_down(long v) const
12598{
12599 return this->scale_down(isl::val(ctx(), v));
12600}
12601
12603{
12604 auto res = isl_multi_aff_set_aff(copy(), pos, el.release());
12605 return manage(res);
12606}
12607
12609{
12610 auto res = isl_multi_aff_set_at(copy(), pos, el.release());
12611 return manage(res);
12612}
12613
12615{
12616 return isl::pw_multi_aff(*this).set_at(pos, el);
12617}
12618
12619isl::multi_union_pw_aff multi_aff::set_at(int pos, const isl::union_pw_aff &el) const
12620{
12621 return isl::pw_multi_aff(*this).set_at(pos, el);
12622}
12623
12625{
12626 return isl::pw_multi_aff(*this).set_pw_aff(pos, el);
12627}
12628
12630{
12631 return isl::pw_multi_aff(*this).set_pw_aff(pos, pa);
12632}
12633
12635{
12636 auto res = isl_multi_aff_set_range_tuple_id(copy(), id.release());
12637 return manage(res);
12638}
12639
12640isl::multi_aff multi_aff::set_range_tuple(const std::string &id) const
12641{
12642 return this->set_range_tuple(isl::id(ctx(), id));
12643}
12644
12646{
12647 return isl::pw_multi_aff(*this).set_union_pw_aff(pos, el);
12648}
12649
12650class size multi_aff::size() const
12651{
12652 auto res = isl_multi_aff_size(get());
12653 return manage(res);
12654}
12655
12657{
12658 auto res = isl_multi_aff_get_space(get());
12659 return manage(res);
12660}
12661
12662isl::space multi_aff::get_space() const
12663{
12664 return space();
12665}
12666
12667isl::multi_aff multi_aff::sub(isl::multi_aff multi2) const
12668{
12669 auto res = isl_multi_aff_sub(copy(), multi2.release());
12670 return manage(res);
12671}
12672
12673isl::multi_pw_aff multi_aff::sub(const isl::multi_pw_aff &multi2) const
12674{
12675 return isl::pw_multi_aff(*this).sub(multi2);
12676}
12677
12678isl::multi_union_pw_aff multi_aff::sub(const isl::multi_union_pw_aff &multi2) const
12679{
12680 return isl::pw_multi_aff(*this).sub(multi2);
12681}
12682
12683isl::pw_multi_aff multi_aff::sub(const isl::pw_multi_aff &pma2) const
12684{
12685 return isl::pw_multi_aff(*this).sub(pma2);
12686}
12687
12688isl::union_pw_multi_aff multi_aff::sub(const isl::union_pw_multi_aff &upma2) const
12689{
12690 return isl::pw_multi_aff(*this).sub(upma2);
12691}
12692
12693isl::multi_aff multi_aff::sub(const isl::aff &multi2) const
12694{
12695 return this->sub(isl::multi_aff(multi2));
12696}
12697
12698isl::pw_multi_aff multi_aff::subtract_domain(const isl::set &set) const
12699{
12700 return isl::pw_multi_aff(*this).subtract_domain(set);
12701}
12702
12703isl::union_pw_multi_aff multi_aff::subtract_domain(const isl::space &space) const
12704{
12705 return isl::pw_multi_aff(*this).subtract_domain(space);
12706}
12707
12708isl::union_pw_multi_aff multi_aff::subtract_domain(const isl::union_set &uset) const
12709{
12710 return isl::pw_multi_aff(*this).subtract_domain(uset);
12711}
12712
12713isl::pw_multi_aff_list multi_aff::to_list() const
12714{
12715 return isl::pw_multi_aff(*this).to_list();
12716}
12717
12718isl::multi_pw_aff multi_aff::to_multi_pw_aff() const
12719{
12721 return manage(res);
12722}
12723
12724isl::multi_union_pw_aff multi_aff::to_multi_union_pw_aff() const
12725{
12727 return manage(res);
12728}
12729
12730isl::pw_multi_aff multi_aff::to_pw_multi_aff() const
12731{
12733 return manage(res);
12734}
12735
12736isl::union_pw_multi_aff multi_aff::to_union_pw_multi_aff() const
12737{
12738 return isl::pw_multi_aff(*this).to_union_pw_multi_aff();
12739}
12740
12742{
12743 return isl::pw_multi_aff(*this).tuple_id(type);
12744}
12745
12747{
12748 auto res = isl_multi_aff_unbind_params_insert_domain(copy(), domain.release());
12749 return manage(res);
12750}
12751
12753{
12754 return isl::pw_multi_aff(*this).union_add(mpa2);
12755}
12756
12757isl::multi_union_pw_aff multi_aff::union_add(const isl::multi_union_pw_aff &mupa2) const
12758{
12759 return isl::pw_multi_aff(*this).union_add(mupa2);
12760}
12761
12762isl::pw_multi_aff multi_aff::union_add(const isl::pw_multi_aff &pma2) const
12763{
12764 return isl::pw_multi_aff(*this).union_add(pma2);
12765}
12766
12767isl::union_pw_multi_aff multi_aff::union_add(const isl::union_pw_multi_aff &upma2) const
12768{
12769 return isl::pw_multi_aff(*this).union_add(upma2);
12770}
12771
12772isl::multi_aff multi_aff::zero(isl::space space)
12773{
12774 auto res = isl_multi_aff_zero(space.release());
12775 return manage(res);
12776}
12777
12778inline std::ostream &operator<<(std::ostream &os, const multi_aff &obj)
12779{
12780 char *str = isl_multi_aff_to_str(obj.get());
12781 if (!str) {
12782 os.setstate(std::ios_base::badbit);
12783 return os;
12784 }
12785 os << str;
12786 free(str);
12787 return os;
12788}
12789
12790// implementations for isl::multi_id
12792 return multi_id(ptr);
12793}
12795 ptr = isl_multi_id_copy(ptr);
12796 return multi_id(ptr);
12797}
12798
12800 : ptr(nullptr) {}
12801
12803 : ptr(nullptr)
12804{
12805 ptr = obj.copy();
12806}
12807
12809 : ptr(ptr) {}
12810
12811multi_id::multi_id(isl::space space, isl::id_list list)
12812{
12813 auto res = isl_multi_id_from_id_list(space.release(), list.release());
12814 ptr = res;
12815}
12816
12817multi_id::multi_id(isl::ctx ctx, const std::string &str)
12818{
12819 auto res = isl_multi_id_read_from_str(ctx.release(), str.c_str());
12820 ptr = res;
12821}
12822
12824 std::swap(this->ptr, obj.ptr);
12825 return *this;
12826}
12827
12829 if (ptr)
12830 isl_multi_id_free(ptr);
12831}
12832
12834 return isl_multi_id_copy(ptr);
12835}
12836
12838 return ptr;
12839}
12840
12842 isl_multi_id *tmp = ptr;
12843 ptr = nullptr;
12844 return tmp;
12845}
12846
12847bool multi_id::is_null() const {
12848 return ptr == nullptr;
12849}
12850
12851isl::ctx multi_id::ctx() const {
12852 return isl::ctx(isl_multi_id_get_ctx(ptr));
12853}
12854
12855isl::id multi_id::at(int pos) const
12856{
12857 auto res = isl_multi_id_get_at(get(), pos);
12858 return manage(res);
12859}
12860
12861isl::id multi_id::get_at(int pos) const
12862{
12863 return at(pos);
12864}
12865
12866isl::multi_id multi_id::flat_range_product(isl::multi_id multi2) const
12867{
12868 auto res = isl_multi_id_flat_range_product(copy(), multi2.release());
12869 return manage(res);
12870}
12871
12872isl::id_list multi_id::list() const
12873{
12874 auto res = isl_multi_id_get_list(get());
12875 return manage(res);
12876}
12877
12878isl::id_list multi_id::get_list() const
12879{
12880 return list();
12881}
12882
12883boolean multi_id::plain_is_equal(const isl::multi_id &multi2) const
12884{
12885 auto res = isl_multi_id_plain_is_equal(get(), multi2.get());
12886 return manage(res);
12887}
12888
12889isl::multi_id multi_id::range_product(isl::multi_id multi2) const
12890{
12891 auto res = isl_multi_id_range_product(copy(), multi2.release());
12892 return manage(res);
12893}
12894
12895isl::multi_id multi_id::set_at(int pos, isl::id el) const
12896{
12897 auto res = isl_multi_id_set_at(copy(), pos, el.release());
12898 return manage(res);
12899}
12900
12901isl::multi_id multi_id::set_at(int pos, const std::string &el) const
12902{
12903 return this->set_at(pos, isl::id(ctx(), el));
12904}
12905
12907{
12908 auto res = isl_multi_id_set_id(copy(), pos, el.release());
12909 return manage(res);
12910}
12911
12912isl::multi_id multi_id::set_id(int pos, const std::string &el) const
12913{
12914 return this->set_id(pos, isl::id(ctx(), el));
12915}
12916
12917class size multi_id::size() const
12918{
12919 auto res = isl_multi_id_size(get());
12920 return manage(res);
12921}
12922
12924{
12925 auto res = isl_multi_id_get_space(get());
12926 return manage(res);
12927}
12928
12929isl::space multi_id::get_space() const
12930{
12931 return space();
12932}
12933
12934inline std::ostream &operator<<(std::ostream &os, const multi_id &obj)
12935{
12936 char *str = isl_multi_id_to_str(obj.get());
12937 if (!str) {
12938 os.setstate(std::ios_base::badbit);
12939 return os;
12940 }
12941 os << str;
12942 free(str);
12943 return os;
12944}
12945
12946// implementations for isl::multi_pw_aff
12948 return multi_pw_aff(ptr);
12949}
12951 ptr = isl_multi_pw_aff_copy(ptr);
12952 return multi_pw_aff(ptr);
12953}
12954
12956 : ptr(nullptr) {}
12957
12959 : ptr(nullptr)
12960{
12961 ptr = obj.copy();
12962}
12963
12965 : ptr(ptr) {}
12966
12968{
12969 auto res = isl_multi_pw_aff_from_aff(aff.release());
12970 ptr = res;
12971}
12972
12973multi_pw_aff::multi_pw_aff(isl::multi_aff ma)
12974{
12975 auto res = isl_multi_pw_aff_from_multi_aff(ma.release());
12976 ptr = res;
12977}
12978
12979multi_pw_aff::multi_pw_aff(isl::pw_aff pa)
12980{
12981 auto res = isl_multi_pw_aff_from_pw_aff(pa.release());
12982 ptr = res;
12983}
12984
12985multi_pw_aff::multi_pw_aff(isl::space space, isl::pw_aff_list list)
12986{
12987 auto res = isl_multi_pw_aff_from_pw_aff_list(space.release(), list.release());
12988 ptr = res;
12989}
12990
12991multi_pw_aff::multi_pw_aff(isl::pw_multi_aff pma)
12992{
12993 auto res = isl_multi_pw_aff_from_pw_multi_aff(pma.release());
12994 ptr = res;
12995}
12996
12997multi_pw_aff::multi_pw_aff(isl::ctx ctx, const std::string &str)
12998{
12999 auto res = isl_multi_pw_aff_read_from_str(ctx.release(), str.c_str());
13000 ptr = res;
13001}
13002
13004 std::swap(this->ptr, obj.ptr);
13005 return *this;
13006}
13007
13009 if (ptr)
13010 isl_multi_pw_aff_free(ptr);
13011}
13012
13014 return isl_multi_pw_aff_copy(ptr);
13015}
13016
13018 return ptr;
13019}
13020
13022 isl_multi_pw_aff *tmp = ptr;
13023 ptr = nullptr;
13024 return tmp;
13025}
13026
13027bool multi_pw_aff::is_null() const {
13028 return ptr == nullptr;
13029}
13030
13031isl::ctx multi_pw_aff::ctx() const {
13032 return isl::ctx(isl_multi_pw_aff_get_ctx(ptr));
13033}
13034
13035isl::multi_pw_aff multi_pw_aff::add(isl::multi_pw_aff multi2) const
13036{
13037 auto res = isl_multi_pw_aff_add(copy(), multi2.release());
13038 return manage(res);
13039}
13040
13041isl::multi_union_pw_aff multi_pw_aff::add(const isl::multi_union_pw_aff &multi2) const
13042{
13043 return isl::multi_union_pw_aff(*this).add(multi2);
13044}
13045
13046isl::multi_pw_aff multi_pw_aff::add(const isl::aff &multi2) const
13047{
13048 return this->add(isl::multi_pw_aff(multi2));
13049}
13050
13051isl::multi_pw_aff multi_pw_aff::add(const isl::multi_aff &multi2) const
13052{
13053 return this->add(isl::multi_pw_aff(multi2));
13054}
13055
13056isl::multi_pw_aff multi_pw_aff::add(const isl::pw_aff &multi2) const
13057{
13058 return this->add(isl::multi_pw_aff(multi2));
13059}
13060
13061isl::multi_pw_aff multi_pw_aff::add(const isl::pw_multi_aff &multi2) const
13062{
13063 return this->add(isl::multi_pw_aff(multi2));
13064}
13065
13066isl::multi_pw_aff multi_pw_aff::add_constant(isl::multi_val mv) const
13067{
13068 auto res = isl_multi_pw_aff_add_constant_multi_val(copy(), mv.release());
13069 return manage(res);
13070}
13071
13072isl::multi_pw_aff multi_pw_aff::add_constant(isl::val v) const
13073{
13074 auto res = isl_multi_pw_aff_add_constant_val(copy(), v.release());
13075 return manage(res);
13076}
13077
13078isl::multi_pw_aff multi_pw_aff::add_constant(long v) const
13079{
13080 return this->add_constant(isl::val(ctx(), v));
13081}
13082
13083isl::map multi_pw_aff::as_map() const
13084{
13086 return manage(res);
13087}
13088
13089isl::multi_aff multi_pw_aff::as_multi_aff() const
13090{
13092 return manage(res);
13093}
13094
13096{
13098 return manage(res);
13099}
13100
13101isl::pw_aff multi_pw_aff::at(int pos) const
13102{
13103 auto res = isl_multi_pw_aff_get_at(get(), pos);
13104 return manage(res);
13105}
13106
13107isl::pw_aff multi_pw_aff::get_at(int pos) const
13108{
13109 return at(pos);
13110}
13111
13112isl::set multi_pw_aff::bind(isl::multi_id tuple) const
13113{
13114 auto res = isl_multi_pw_aff_bind(copy(), tuple.release());
13115 return manage(res);
13116}
13117
13118isl::multi_pw_aff multi_pw_aff::bind_domain(isl::multi_id tuple) const
13119{
13120 auto res = isl_multi_pw_aff_bind_domain(copy(), tuple.release());
13121 return manage(res);
13122}
13123
13124isl::multi_pw_aff multi_pw_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const
13125{
13126 auto res = isl_multi_pw_aff_bind_domain_wrapped_domain(copy(), tuple.release());
13127 return manage(res);
13128}
13129
13130isl::multi_pw_aff multi_pw_aff::coalesce() const
13131{
13133 return manage(res);
13134}
13135
13137{
13138 auto res = isl_multi_pw_aff_dim(get(), static_cast<enum isl_dim_type>(type));
13139 return manage(res);
13140}
13141
13143{
13145 return manage(res);
13146}
13147
13149{
13150 auto res = isl_multi_pw_aff_flat_range_product(copy(), multi2.release());
13151 return manage(res);
13152}
13153
13154isl::multi_union_pw_aff multi_pw_aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const
13155{
13156 return isl::multi_union_pw_aff(*this).flat_range_product(multi2);
13157}
13158
13159isl::multi_pw_aff multi_pw_aff::flat_range_product(const isl::aff &multi2) const
13160{
13161 return this->flat_range_product(isl::multi_pw_aff(multi2));
13162}
13163
13164isl::multi_pw_aff multi_pw_aff::flat_range_product(const isl::multi_aff &multi2) const
13165{
13166 return this->flat_range_product(isl::multi_pw_aff(multi2));
13167}
13168
13169isl::multi_pw_aff multi_pw_aff::flat_range_product(const isl::pw_aff &multi2) const
13170{
13171 return this->flat_range_product(isl::multi_pw_aff(multi2));
13172}
13173
13174isl::multi_pw_aff multi_pw_aff::flat_range_product(const isl::pw_multi_aff &multi2) const
13175{
13176 return this->flat_range_product(isl::multi_pw_aff(multi2));
13177}
13178
13179isl::multi_pw_aff multi_pw_aff::gist(isl::set set) const
13180{
13181 auto res = isl_multi_pw_aff_gist(copy(), set.release());
13182 return manage(res);
13183}
13184
13185isl::multi_union_pw_aff multi_pw_aff::gist(const isl::union_set &context) const
13186{
13187 return isl::multi_union_pw_aff(*this).gist(context);
13188}
13189
13190isl::multi_pw_aff multi_pw_aff::gist(const isl::basic_set &set) const
13191{
13192 return this->gist(isl::set(set));
13193}
13194
13195isl::multi_pw_aff multi_pw_aff::gist(const isl::point &set) const
13196{
13197 return this->gist(isl::set(set));
13198}
13199
13201{
13202 auto res = isl_multi_pw_aff_has_range_tuple_id(get());
13203 return manage(res);
13204}
13205
13207{
13208 auto res = isl_multi_pw_aff_identity(space.release());
13209 return manage(res);
13210}
13211
13213{
13214 auto res = isl_multi_pw_aff_identity_multi_pw_aff(copy());
13215 return manage(res);
13216}
13217
13219{
13220 auto res = isl_multi_pw_aff_identity_on_domain_space(space.release());
13221 return manage(res);
13222}
13223
13224isl::multi_pw_aff multi_pw_aff::insert_domain(isl::space domain) const
13225{
13226 auto res = isl_multi_pw_aff_insert_domain(copy(), domain.release());
13227 return manage(res);
13228}
13229
13230isl::multi_pw_aff multi_pw_aff::intersect_domain(isl::set domain) const
13231{
13232 auto res = isl_multi_pw_aff_intersect_domain(copy(), domain.release());
13233 return manage(res);
13234}
13235
13236isl::multi_union_pw_aff multi_pw_aff::intersect_domain(const isl::union_set &uset) const
13237{
13238 return isl::multi_union_pw_aff(*this).intersect_domain(uset);
13239}
13240
13241isl::multi_pw_aff multi_pw_aff::intersect_domain(const isl::basic_set &domain) const
13242{
13243 return this->intersect_domain(isl::set(domain));
13244}
13245
13246isl::multi_pw_aff multi_pw_aff::intersect_domain(const isl::point &domain) const
13247{
13248 return this->intersect_domain(isl::set(domain));
13249}
13250
13251isl::multi_pw_aff multi_pw_aff::intersect_params(isl::set set) const
13252{
13253 auto res = isl_multi_pw_aff_intersect_params(copy(), set.release());
13254 return manage(res);
13255}
13256
13257boolean multi_pw_aff::involves_nan() const
13258{
13259 auto res = isl_multi_pw_aff_involves_nan(get());
13260 return manage(res);
13261}
13262
13263boolean multi_pw_aff::involves_param(const isl::id &id) const
13264{
13265 auto res = isl_multi_pw_aff_involves_param_id(get(), id.get());
13266 return manage(res);
13267}
13268
13269boolean multi_pw_aff::involves_param(const std::string &id) const
13270{
13271 return this->involves_param(isl::id(ctx(), id));
13272}
13273
13274boolean multi_pw_aff::involves_param(const isl::id_list &list) const
13275{
13276 auto res = isl_multi_pw_aff_involves_param_id_list(get(), list.get());
13277 return manage(res);
13278}
13279
13280boolean multi_pw_aff::isa_multi_aff() const
13281{
13283 return manage(res);
13284}
13285
13286isl::pw_aff_list multi_pw_aff::list() const
13287{
13288 auto res = isl_multi_pw_aff_get_list(get());
13289 return manage(res);
13290}
13291
13292isl::pw_aff_list multi_pw_aff::get_list() const
13293{
13294 return list();
13295}
13296
13297isl::multi_pw_aff multi_pw_aff::max(isl::multi_pw_aff multi2) const
13298{
13299 auto res = isl_multi_pw_aff_max(copy(), multi2.release());
13300 return manage(res);
13301}
13302
13303isl::multi_val multi_pw_aff::max_multi_val() const
13304{
13306 return manage(res);
13307}
13308
13309isl::multi_pw_aff multi_pw_aff::min(isl::multi_pw_aff multi2) const
13310{
13311 auto res = isl_multi_pw_aff_min(copy(), multi2.release());
13312 return manage(res);
13313}
13314
13315isl::multi_val multi_pw_aff::min_multi_val() const
13316{
13318 return manage(res);
13319}
13320
13321isl::multi_pw_aff multi_pw_aff::neg() const
13322{
13323 auto res = isl_multi_pw_aff_neg(copy());
13324 return manage(res);
13325}
13326
13327boolean multi_pw_aff::plain_is_equal(const isl::multi_pw_aff &multi2) const
13328{
13329 auto res = isl_multi_pw_aff_plain_is_equal(get(), multi2.get());
13330 return manage(res);
13331}
13332
13333boolean multi_pw_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
13334{
13335 return isl::multi_union_pw_aff(*this).plain_is_equal(multi2);
13336}
13337
13338boolean multi_pw_aff::plain_is_equal(const isl::aff &multi2) const
13339{
13340 return this->plain_is_equal(isl::multi_pw_aff(multi2));
13341}
13342
13343boolean multi_pw_aff::plain_is_equal(const isl::multi_aff &multi2) const
13344{
13345 return this->plain_is_equal(isl::multi_pw_aff(multi2));
13346}
13347
13348boolean multi_pw_aff::plain_is_equal(const isl::pw_aff &multi2) const
13349{
13350 return this->plain_is_equal(isl::multi_pw_aff(multi2));
13351}
13352
13353boolean multi_pw_aff::plain_is_equal(const isl::pw_multi_aff &multi2) const
13354{
13355 return this->plain_is_equal(isl::multi_pw_aff(multi2));
13356}
13357
13358isl::multi_pw_aff multi_pw_aff::product(isl::multi_pw_aff multi2) const
13359{
13360 auto res = isl_multi_pw_aff_product(copy(), multi2.release());
13361 return manage(res);
13362}
13363
13364isl::multi_pw_aff multi_pw_aff::pullback(isl::multi_aff ma) const
13365{
13366 auto res = isl_multi_pw_aff_pullback_multi_aff(copy(), ma.release());
13367 return manage(res);
13368}
13369
13370isl::multi_pw_aff multi_pw_aff::pullback(isl::multi_pw_aff mpa2) const
13371{
13373 return manage(res);
13374}
13375
13376isl::multi_pw_aff multi_pw_aff::pullback(isl::pw_multi_aff pma) const
13377{
13379 return manage(res);
13380}
13381
13382isl::multi_union_pw_aff multi_pw_aff::pullback(const isl::union_pw_multi_aff &upma) const
13383{
13384 return isl::multi_union_pw_aff(*this).pullback(upma);
13385}
13386
13387isl::multi_pw_aff multi_pw_aff::range_product(isl::multi_pw_aff multi2) const
13388{
13389 auto res = isl_multi_pw_aff_range_product(copy(), multi2.release());
13390 return manage(res);
13391}
13392
13393isl::multi_union_pw_aff multi_pw_aff::range_product(const isl::multi_union_pw_aff &multi2) const
13394{
13395 return isl::multi_union_pw_aff(*this).range_product(multi2);
13396}
13397
13398isl::multi_pw_aff multi_pw_aff::range_product(const isl::aff &multi2) const
13399{
13400 return this->range_product(isl::multi_pw_aff(multi2));
13401}
13402
13403isl::multi_pw_aff multi_pw_aff::range_product(const isl::multi_aff &multi2) const
13404{
13405 return this->range_product(isl::multi_pw_aff(multi2));
13406}
13407
13408isl::multi_pw_aff multi_pw_aff::range_product(const isl::pw_aff &multi2) const
13409{
13410 return this->range_product(isl::multi_pw_aff(multi2));
13411}
13412
13413isl::multi_pw_aff multi_pw_aff::range_product(const isl::pw_multi_aff &multi2) const
13414{
13415 return this->range_product(isl::multi_pw_aff(multi2));
13416}
13417
13418isl::id multi_pw_aff::range_tuple_id() const
13419{
13420 auto res = isl_multi_pw_aff_get_range_tuple_id(get());
13421 return manage(res);
13422}
13423
13425{
13426 return range_tuple_id();
13427}
13428
13429isl::multi_pw_aff multi_pw_aff::reset_range_tuple_id() const
13430{
13431 auto res = isl_multi_pw_aff_reset_range_tuple_id(copy());
13432 return manage(res);
13433}
13434
13436{
13437 auto res = isl_multi_pw_aff_reset_tuple_id(copy(), static_cast<enum isl_dim_type>(type));
13438 return manage(res);
13439}
13440
13442{
13443 auto res = isl_multi_pw_aff_scale_multi_val(copy(), mv.release());
13444 return manage(res);
13445}
13446
13448{
13449 auto res = isl_multi_pw_aff_scale_val(copy(), v.release());
13450 return manage(res);
13451}
13452
13453isl::multi_pw_aff multi_pw_aff::scale(long v) const
13454{
13455 return this->scale(isl::val(ctx(), v));
13456}
13457
13458isl::multi_pw_aff multi_pw_aff::scale_down(isl::multi_val mv) const
13459{
13460 auto res = isl_multi_pw_aff_scale_down_multi_val(copy(), mv.release());
13461 return manage(res);
13462}
13463
13464isl::multi_pw_aff multi_pw_aff::scale_down(isl::val v) const
13465{
13466 auto res = isl_multi_pw_aff_scale_down_val(copy(), v.release());
13467 return manage(res);
13468}
13469
13470isl::multi_pw_aff multi_pw_aff::scale_down(long v) const
13471{
13472 return this->scale_down(isl::val(ctx(), v));
13473}
13474
13475isl::multi_pw_aff multi_pw_aff::set_at(int pos, isl::pw_aff el) const
13476{
13477 auto res = isl_multi_pw_aff_set_at(copy(), pos, el.release());
13478 return manage(res);
13479}
13480
13481isl::multi_union_pw_aff multi_pw_aff::set_at(int pos, const isl::union_pw_aff &el) const
13482{
13483 return isl::multi_union_pw_aff(*this).set_at(pos, el);
13484}
13485
13487{
13488 auto res = isl_multi_pw_aff_set_pw_aff(copy(), pos, el.release());
13489 return manage(res);
13490}
13491
13493{
13494 auto res = isl_multi_pw_aff_set_range_tuple_id(copy(), id.release());
13495 return manage(res);
13496}
13497
13498isl::multi_pw_aff multi_pw_aff::set_range_tuple(const std::string &id) const
13499{
13500 return this->set_range_tuple(isl::id(ctx(), id));
13501}
13502
13504{
13505 return isl::multi_union_pw_aff(*this).set_union_pw_aff(pos, el);
13506}
13507
13508class size multi_pw_aff::size() const
13509{
13510 auto res = isl_multi_pw_aff_size(get());
13511 return manage(res);
13512}
13513
13515{
13516 auto res = isl_multi_pw_aff_get_space(get());
13517 return manage(res);
13518}
13519
13520isl::space multi_pw_aff::get_space() const
13521{
13522 return space();
13523}
13524
13525isl::multi_pw_aff multi_pw_aff::sub(isl::multi_pw_aff multi2) const
13526{
13527 auto res = isl_multi_pw_aff_sub(copy(), multi2.release());
13528 return manage(res);
13529}
13530
13531isl::multi_union_pw_aff multi_pw_aff::sub(const isl::multi_union_pw_aff &multi2) const
13532{
13533 return isl::multi_union_pw_aff(*this).sub(multi2);
13534}
13535
13536isl::multi_pw_aff multi_pw_aff::sub(const isl::aff &multi2) const
13537{
13538 return this->sub(isl::multi_pw_aff(multi2));
13539}
13540
13541isl::multi_pw_aff multi_pw_aff::sub(const isl::multi_aff &multi2) const
13542{
13543 return this->sub(isl::multi_pw_aff(multi2));
13544}
13545
13546isl::multi_pw_aff multi_pw_aff::sub(const isl::pw_aff &multi2) const
13547{
13548 return this->sub(isl::multi_pw_aff(multi2));
13549}
13550
13551isl::multi_pw_aff multi_pw_aff::sub(const isl::pw_multi_aff &multi2) const
13552{
13553 return this->sub(isl::multi_pw_aff(multi2));
13554}
13555
13556isl::multi_pw_aff multi_pw_aff::unbind_params_insert_domain(isl::multi_id domain) const
13557{
13558 auto res = isl_multi_pw_aff_unbind_params_insert_domain(copy(), domain.release());
13559 return manage(res);
13560}
13561
13562isl::multi_pw_aff multi_pw_aff::union_add(isl::multi_pw_aff mpa2) const
13563{
13564 auto res = isl_multi_pw_aff_union_add(copy(), mpa2.release());
13565 return manage(res);
13566}
13567
13568isl::multi_union_pw_aff multi_pw_aff::union_add(const isl::multi_union_pw_aff &mupa2) const
13569{
13570 return isl::multi_union_pw_aff(*this).union_add(mupa2);
13571}
13572
13573isl::multi_pw_aff multi_pw_aff::union_add(const isl::aff &mpa2) const
13574{
13575 return this->union_add(isl::multi_pw_aff(mpa2));
13576}
13577
13578isl::multi_pw_aff multi_pw_aff::union_add(const isl::multi_aff &mpa2) const
13579{
13580 return this->union_add(isl::multi_pw_aff(mpa2));
13581}
13582
13583isl::multi_pw_aff multi_pw_aff::union_add(const isl::pw_aff &mpa2) const
13584{
13585 return this->union_add(isl::multi_pw_aff(mpa2));
13586}
13587
13588isl::multi_pw_aff multi_pw_aff::union_add(const isl::pw_multi_aff &mpa2) const
13589{
13590 return this->union_add(isl::multi_pw_aff(mpa2));
13591}
13592
13593isl::multi_pw_aff multi_pw_aff::zero(isl::space space)
13594{
13595 auto res = isl_multi_pw_aff_zero(space.release());
13596 return manage(res);
13597}
13598
13599inline std::ostream &operator<<(std::ostream &os, const multi_pw_aff &obj)
13600{
13601 char *str = isl_multi_pw_aff_to_str(obj.get());
13602 if (!str) {
13603 os.setstate(std::ios_base::badbit);
13604 return os;
13605 }
13606 os << str;
13607 free(str);
13608 return os;
13609}
13610
13611// implementations for isl::multi_union_pw_aff
13613 return multi_union_pw_aff(ptr);
13614}
13616 ptr = isl_multi_union_pw_aff_copy(ptr);
13617 return multi_union_pw_aff(ptr);
13618}
13619
13621 : ptr(nullptr) {}
13622
13624 : ptr(nullptr)
13625{
13626 ptr = obj.copy();
13627}
13628
13630 : ptr(ptr) {}
13631
13632multi_union_pw_aff::multi_union_pw_aff(isl::multi_pw_aff mpa)
13633{
13635 ptr = res;
13636}
13637
13638multi_union_pw_aff::multi_union_pw_aff(isl::union_pw_aff upa)
13639{
13641 ptr = res;
13642}
13643
13644multi_union_pw_aff::multi_union_pw_aff(isl::space space, isl::union_pw_aff_list list)
13645{
13646 auto res = isl_multi_union_pw_aff_from_union_pw_aff_list(space.release(), list.release());
13647 ptr = res;
13648}
13649
13655
13657{
13659 ptr = res;
13660}
13661
13662multi_union_pw_aff &multi_union_pw_aff::operator=(multi_union_pw_aff obj) {
13663 std::swap(this->ptr, obj.ptr);
13664 return *this;
13665}
13666
13668 if (ptr)
13669 isl_multi_union_pw_aff_free(ptr);
13670}
13671
13673 return isl_multi_union_pw_aff_copy(ptr);
13674}
13675
13677 return ptr;
13678}
13679
13682 ptr = nullptr;
13683 return tmp;
13684}
13685
13686bool multi_union_pw_aff::is_null() const {
13687 return ptr == nullptr;
13688}
13689
13690isl::ctx multi_union_pw_aff::ctx() const {
13691 return isl::ctx(isl_multi_union_pw_aff_get_ctx(ptr));
13692}
13693
13694isl::multi_union_pw_aff multi_union_pw_aff::add(isl::multi_union_pw_aff multi2) const
13695{
13696 auto res = isl_multi_union_pw_aff_add(copy(), multi2.release());
13697 return manage(res);
13698}
13699
13700isl::union_pw_aff multi_union_pw_aff::at(int pos) const
13701{
13702 auto res = isl_multi_union_pw_aff_get_at(get(), pos);
13703 return manage(res);
13704}
13705
13706isl::union_pw_aff multi_union_pw_aff::get_at(int pos) const
13707{
13708 return at(pos);
13709}
13710
13711isl::union_set multi_union_pw_aff::bind(isl::multi_id tuple) const
13712{
13713 auto res = isl_multi_union_pw_aff_bind(copy(), tuple.release());
13714 return manage(res);
13715}
13716
13717isl::multi_union_pw_aff multi_union_pw_aff::coalesce() const
13718{
13720 return manage(res);
13721}
13722
13724{
13725 auto res = isl_multi_union_pw_aff_dim(get(), static_cast<enum isl_dim_type>(type));
13726 return manage(res);
13727}
13728
13730{
13732 return manage(res);
13733}
13734
13736{
13737 auto res = isl_multi_union_pw_aff_flat_range_product(copy(), multi2.release());
13738 return manage(res);
13739}
13740
13746
13748{
13749 auto res = isl_multi_union_pw_aff_gist(copy(), context.release());
13750 return manage(res);
13751}
13752
13754{
13755 auto res = isl_multi_union_pw_aff_has_range_tuple_id(get());
13756 return manage(res);
13757}
13758
13759isl::multi_union_pw_aff multi_union_pw_aff::intersect_domain(isl::union_set uset) const
13760{
13762 return manage(res);
13763}
13764
13765isl::multi_union_pw_aff multi_union_pw_aff::intersect_params(isl::set params) const
13766{
13768 return manage(res);
13769}
13770
13772{
13773 auto res = isl_multi_union_pw_aff_involves_nan(get());
13774 return manage(res);
13775}
13776
13777isl::union_pw_aff_list multi_union_pw_aff::list() const
13778{
13779 auto res = isl_multi_union_pw_aff_get_list(get());
13780 return manage(res);
13781}
13782
13783isl::union_pw_aff_list multi_union_pw_aff::get_list() const
13784{
13785 return list();
13786}
13787
13788isl::multi_union_pw_aff multi_union_pw_aff::neg() const
13789{
13790 auto res = isl_multi_union_pw_aff_neg(copy());
13791 return manage(res);
13792}
13793
13794boolean multi_union_pw_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
13795{
13796 auto res = isl_multi_union_pw_aff_plain_is_equal(get(), multi2.get());
13797 return manage(res);
13798}
13799
13800isl::multi_union_pw_aff multi_union_pw_aff::pullback(isl::union_pw_multi_aff upma) const
13801{
13803 return manage(res);
13804}
13805
13806isl::multi_union_pw_aff multi_union_pw_aff::range_product(isl::multi_union_pw_aff multi2) const
13807{
13808 auto res = isl_multi_union_pw_aff_range_product(copy(), multi2.release());
13809 return manage(res);
13810}
13811
13813{
13814 auto res = isl_multi_union_pw_aff_get_range_tuple_id(get());
13815 return manage(res);
13816}
13817
13819{
13820 return range_tuple_id();
13821}
13822
13823isl::multi_union_pw_aff multi_union_pw_aff::reset_range_tuple_id() const
13824{
13825 auto res = isl_multi_union_pw_aff_reset_range_tuple_id(copy());
13826 return manage(res);
13827}
13828
13830{
13831 auto res = isl_multi_union_pw_aff_reset_tuple_id(copy(), static_cast<enum isl_dim_type>(type));
13832 return manage(res);
13833}
13834
13836{
13837 auto res = isl_multi_union_pw_aff_scale_multi_val(copy(), mv.release());
13838 return manage(res);
13839}
13840
13842{
13843 auto res = isl_multi_union_pw_aff_scale_val(copy(), v.release());
13844 return manage(res);
13845}
13846
13847isl::multi_union_pw_aff multi_union_pw_aff::scale(long v) const
13848{
13849 return this->scale(isl::val(ctx(), v));
13850}
13851
13852isl::multi_union_pw_aff multi_union_pw_aff::scale_down(isl::multi_val mv) const
13853{
13854 auto res = isl_multi_union_pw_aff_scale_down_multi_val(copy(), mv.release());
13855 return manage(res);
13856}
13857
13858isl::multi_union_pw_aff multi_union_pw_aff::scale_down(isl::val v) const
13859{
13860 auto res = isl_multi_union_pw_aff_scale_down_val(copy(), v.release());
13861 return manage(res);
13862}
13863
13864isl::multi_union_pw_aff multi_union_pw_aff::scale_down(long v) const
13865{
13866 return this->scale_down(isl::val(ctx(), v));
13867}
13868
13869isl::multi_union_pw_aff multi_union_pw_aff::set_at(int pos, isl::union_pw_aff el) const
13870{
13871 auto res = isl_multi_union_pw_aff_set_at(copy(), pos, el.release());
13872 return manage(res);
13873}
13874
13875isl::multi_union_pw_aff multi_union_pw_aff::set_range_tuple(isl::id id) const
13876{
13877 auto res = isl_multi_union_pw_aff_set_range_tuple_id(copy(), id.release());
13878 return manage(res);
13879}
13880
13881isl::multi_union_pw_aff multi_union_pw_aff::set_range_tuple(const std::string &id) const
13882{
13883 return this->set_range_tuple(isl::id(ctx(), id));
13884}
13885
13887{
13888 auto res = isl_multi_union_pw_aff_set_union_pw_aff(copy(), pos, el.release());
13889 return manage(res);
13890}
13891
13892class size multi_union_pw_aff::size() const
13893{
13894 auto res = isl_multi_union_pw_aff_size(get());
13895 return manage(res);
13896}
13897
13899{
13900 auto res = isl_multi_union_pw_aff_get_space(get());
13901 return manage(res);
13902}
13903
13904isl::space multi_union_pw_aff::get_space() const
13905{
13906 return space();
13907}
13908
13909isl::multi_union_pw_aff multi_union_pw_aff::sub(isl::multi_union_pw_aff multi2) const
13910{
13911 auto res = isl_multi_union_pw_aff_sub(copy(), multi2.release());
13912 return manage(res);
13913}
13914
13915isl::multi_union_pw_aff multi_union_pw_aff::union_add(isl::multi_union_pw_aff mupa2) const
13916{
13918 return manage(res);
13919}
13920
13921isl::multi_union_pw_aff multi_union_pw_aff::zero(isl::space space)
13922{
13923 auto res = isl_multi_union_pw_aff_zero(space.release());
13924 return manage(res);
13925}
13926
13927inline std::ostream &operator<<(std::ostream &os, const multi_union_pw_aff &obj)
13928{
13929 char *str = isl_multi_union_pw_aff_to_str(obj.get());
13930 if (!str) {
13931 os.setstate(std::ios_base::badbit);
13932 return os;
13933 }
13934 os << str;
13935 free(str);
13936 return os;
13937}
13938
13939// implementations for isl::multi_val
13941 return multi_val(ptr);
13942}
13944 ptr = isl_multi_val_copy(ptr);
13945 return multi_val(ptr);
13946}
13947
13949 : ptr(nullptr) {}
13950
13952 : ptr(nullptr)
13953{
13954 ptr = obj.copy();
13955}
13956
13958 : ptr(ptr) {}
13959
13960multi_val::multi_val(isl::space space, isl::val_list list)
13961{
13962 auto res = isl_multi_val_from_val_list(space.release(), list.release());
13963 ptr = res;
13964}
13965
13966multi_val::multi_val(isl::ctx ctx, const std::string &str)
13967{
13968 auto res = isl_multi_val_read_from_str(ctx.release(), str.c_str());
13969 ptr = res;
13970}
13971
13973 std::swap(this->ptr, obj.ptr);
13974 return *this;
13975}
13976
13978 if (ptr)
13979 isl_multi_val_free(ptr);
13980}
13981
13983 return isl_multi_val_copy(ptr);
13984}
13985
13987 return ptr;
13988}
13989
13991 isl_multi_val *tmp = ptr;
13992 ptr = nullptr;
13993 return tmp;
13994}
13995
13996bool multi_val::is_null() const {
13997 return ptr == nullptr;
13998}
13999
14000isl::ctx multi_val::ctx() const {
14001 return isl::ctx(isl_multi_val_get_ctx(ptr));
14002}
14003
14004isl::multi_val multi_val::add(isl::multi_val multi2) const
14005{
14006 auto res = isl_multi_val_add(copy(), multi2.release());
14007 return manage(res);
14008}
14009
14010isl::multi_val multi_val::add(isl::val v) const
14011{
14012 auto res = isl_multi_val_add_val(copy(), v.release());
14013 return manage(res);
14014}
14015
14016isl::multi_val multi_val::add(long v) const
14017{
14018 return this->add(isl::val(ctx(), v));
14019}
14020
14021isl::val multi_val::at(int pos) const
14022{
14023 auto res = isl_multi_val_get_at(get(), pos);
14024 return manage(res);
14025}
14026
14027isl::val multi_val::get_at(int pos) const
14028{
14029 return at(pos);
14030}
14031
14033{
14034 auto res = isl_multi_val_dim(get(), static_cast<enum isl_dim_type>(type));
14035 return manage(res);
14036}
14037
14039{
14040 auto res = isl_multi_val_flat_range_product(copy(), multi2.release());
14041 return manage(res);
14042}
14043
14044boolean multi_val::has_range_tuple_id() const
14045{
14046 auto res = isl_multi_val_has_range_tuple_id(get());
14047 return manage(res);
14048}
14049
14050boolean multi_val::involves_nan() const
14051{
14052 auto res = isl_multi_val_involves_nan(get());
14053 return manage(res);
14054}
14055
14056isl::val_list multi_val::list() const
14057{
14058 auto res = isl_multi_val_get_list(get());
14059 return manage(res);
14060}
14061
14062isl::val_list multi_val::get_list() const
14063{
14064 return list();
14065}
14066
14067isl::multi_val multi_val::max(isl::multi_val multi2) const
14068{
14069 auto res = isl_multi_val_max(copy(), multi2.release());
14070 return manage(res);
14071}
14072
14073isl::multi_val multi_val::min(isl::multi_val multi2) const
14074{
14075 auto res = isl_multi_val_min(copy(), multi2.release());
14076 return manage(res);
14077}
14078
14079isl::multi_val multi_val::neg() const
14080{
14081 auto res = isl_multi_val_neg(copy());
14082 return manage(res);
14083}
14084
14085boolean multi_val::plain_is_equal(const isl::multi_val &multi2) const
14086{
14087 auto res = isl_multi_val_plain_is_equal(get(), multi2.get());
14088 return manage(res);
14089}
14090
14091isl::multi_val multi_val::product(isl::multi_val multi2) const
14092{
14093 auto res = isl_multi_val_product(copy(), multi2.release());
14094 return manage(res);
14095}
14096
14097isl::multi_val multi_val::range_product(isl::multi_val multi2) const
14098{
14099 auto res = isl_multi_val_range_product(copy(), multi2.release());
14100 return manage(res);
14101}
14102
14103isl::id multi_val::range_tuple_id() const
14104{
14105 auto res = isl_multi_val_get_range_tuple_id(get());
14106 return manage(res);
14107}
14108
14109isl::id multi_val::get_range_tuple_id() const
14110{
14111 return range_tuple_id();
14112}
14113
14114isl::multi_val multi_val::reset_range_tuple_id() const
14115{
14116 auto res = isl_multi_val_reset_range_tuple_id(copy());
14117 return manage(res);
14118}
14119
14121{
14122 auto res = isl_multi_val_reset_tuple_id(copy(), static_cast<enum isl_dim_type>(type));
14123 return manage(res);
14124}
14125
14127{
14128 auto res = isl_multi_val_scale_multi_val(copy(), mv.release());
14129 return manage(res);
14130}
14131
14133{
14134 auto res = isl_multi_val_scale_val(copy(), v.release());
14135 return manage(res);
14136}
14137
14138isl::multi_val multi_val::scale(long v) const
14139{
14140 return this->scale(isl::val(ctx(), v));
14141}
14142
14143isl::multi_val multi_val::scale_down(isl::multi_val mv) const
14144{
14145 auto res = isl_multi_val_scale_down_multi_val(copy(), mv.release());
14146 return manage(res);
14147}
14148
14149isl::multi_val multi_val::scale_down(isl::val v) const
14150{
14151 auto res = isl_multi_val_scale_down_val(copy(), v.release());
14152 return manage(res);
14153}
14154
14155isl::multi_val multi_val::scale_down(long v) const
14156{
14157 return this->scale_down(isl::val(ctx(), v));
14158}
14159
14160isl::multi_val multi_val::set_at(int pos, isl::val el) const
14161{
14162 auto res = isl_multi_val_set_at(copy(), pos, el.release());
14163 return manage(res);
14164}
14165
14166isl::multi_val multi_val::set_at(int pos, long el) const
14167{
14168 return this->set_at(pos, isl::val(ctx(), el));
14169}
14170
14171isl::multi_val multi_val::set_range_tuple(isl::id id) const
14172{
14173 auto res = isl_multi_val_set_range_tuple_id(copy(), id.release());
14174 return manage(res);
14175}
14176
14177isl::multi_val multi_val::set_range_tuple(const std::string &id) const
14178{
14179 return this->set_range_tuple(isl::id(ctx(), id));
14180}
14181
14183{
14184 auto res = isl_multi_val_set_val(copy(), pos, el.release());
14185 return manage(res);
14186}
14187
14189{
14190 return this->set_val(pos, isl::val(ctx(), el));
14191}
14192
14193class size multi_val::size() const
14194{
14195 auto res = isl_multi_val_size(get());
14196 return manage(res);
14197}
14198
14200{
14201 auto res = isl_multi_val_get_space(get());
14202 return manage(res);
14203}
14204
14205isl::space multi_val::get_space() const
14206{
14207 return space();
14208}
14209
14210isl::multi_val multi_val::sub(isl::multi_val multi2) const
14211{
14212 auto res = isl_multi_val_sub(copy(), multi2.release());
14213 return manage(res);
14214}
14215
14216isl::multi_val multi_val::zero(isl::space space)
14217{
14218 auto res = isl_multi_val_zero(space.release());
14219 return manage(res);
14220}
14221
14222inline std::ostream &operator<<(std::ostream &os, const multi_val &obj)
14223{
14224 char *str = isl_multi_val_to_str(obj.get());
14225 if (!str) {
14226 os.setstate(std::ios_base::badbit);
14227 return os;
14228 }
14229 os << str;
14230 free(str);
14231 return os;
14232}
14233
14234// implementations for isl::point
14236 return point(ptr);
14237}
14239 ptr = isl_point_copy(ptr);
14240 return point(ptr);
14241}
14242
14244 : ptr(nullptr) {}
14245
14246point::point(const point &obj)
14247 : ptr(nullptr)
14248{
14249 ptr = obj.copy();
14250}
14251
14253 : ptr(ptr) {}
14254
14256{
14257 auto res = isl_point_zero(space.release());
14258 ptr = res;
14259}
14260
14262 std::swap(this->ptr, obj.ptr);
14263 return *this;
14264}
14265
14266point::~point() {
14267 if (ptr)
14269}
14270
14271__isl_give isl_point *point::copy() const & {
14272 return isl_point_copy(ptr);
14273}
14274
14276 return ptr;
14277}
14278
14280 isl_point *tmp = ptr;
14281 ptr = nullptr;
14282 return tmp;
14283}
14284
14285bool point::is_null() const {
14286 return ptr == nullptr;
14287}
14288
14289isl::ctx point::ctx() const {
14290 return isl::ctx(isl_point_get_ctx(ptr));
14291}
14292
14294{
14295 return isl::basic_set(*this).add_constraint(constraint);
14296}
14297
14299{
14300 return isl::basic_set(*this).add_dims(type, n);
14301}
14302
14304{
14305 return isl::basic_set(*this).affine_hull();
14306}
14307
14309{
14310 return isl::basic_set(*this).align_params(model);
14311}
14312
14314{
14315 return isl::basic_set(*this).apply(bmap);
14316}
14317
14318isl::set point::apply(const isl::map &map) const
14319{
14320 return isl::basic_set(*this).apply(map);
14321}
14322
14323isl::union_set point::apply(const isl::union_map &umap) const
14324{
14325 return isl::basic_set(*this).apply(umap);
14326}
14327
14328isl::pw_multi_aff point::as_pw_multi_aff() const
14329{
14330 return isl::basic_set(*this).as_pw_multi_aff();
14331}
14332
14333isl::set point::as_set() const
14334{
14335 return isl::basic_set(*this).as_set();
14336}
14337
14339{
14340 return isl::basic_set(*this).basic_set_list();
14341}
14342
14344{
14345 return isl::basic_set(*this).bind(tuple);
14346}
14347
14349{
14350 return isl::basic_set(*this).coalesce();
14351}
14352
14354{
14355 return isl::basic_set(*this).complement();
14356}
14357
14358isl::union_set point::compute_divs() const
14359{
14360 return isl::basic_set(*this).compute_divs();
14361}
14362
14363boolean point::contains(const isl::space &space) const
14364{
14365 return isl::basic_set(*this).contains(space);
14366}
14367
14369{
14370 return isl::basic_set(*this).convex_hull();
14371}
14372
14374{
14375 auto res = isl_point_get_coordinate_val(get(), static_cast<enum isl_dim_type>(type), pos);
14376 return manage(res);
14377}
14378
14380{
14381 return coordinate_val(type, pos);
14382}
14383
14385{
14386 return isl::basic_set(*this).detect_equalities();
14387}
14388
14390{
14391 return isl::basic_set(*this).dim(type);
14392}
14393
14395{
14396 return isl::basic_set(*this).dim_has_any_lower_bound(type, pos);
14397}
14398
14400{
14401 return isl::basic_set(*this).dim_id(type, pos);
14402}
14403
14405{
14406 return isl::basic_set(*this).dim_max(pos);
14407}
14408
14410{
14411 return isl::basic_set(*this).dim_max_val(pos);
14412}
14413
14415{
14416 return isl::basic_set(*this).dim_min(pos);
14417}
14418
14420{
14421 return isl::basic_set(*this).dim_min_val(pos);
14422}
14423
14424std::string point::dim_name(isl::dim type, unsigned int pos) const
14425{
14426 return isl::basic_set(*this).dim_name(type, pos);
14427}
14428
14430{
14431 return isl::basic_set(*this).div(pos);
14432}
14433
14434isl::set point::drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const
14435{
14436 return isl::basic_set(*this).drop_constraints_involving_dims(type, first, n);
14437}
14438
14439isl::set point::eliminate(isl::dim type, unsigned int first, unsigned int n) const
14440{
14441 return isl::basic_set(*this).eliminate(type, first, n);
14442}
14443
14444boolean point::every_set(const std::function<boolean(isl::set)> &test) const
14445{
14446 return isl::basic_set(*this).every_set(test);
14447}
14448
14450{
14451 return isl::basic_set(*this).extract_set(space);
14452}
14453
14455{
14456 return isl::basic_set(*this).find_dim_by_id(type, id);
14457}
14458
14459int point::find_dim_by_id(isl::dim type, const std::string &id) const
14460{
14461 return this->find_dim_by_id(type, isl::id(ctx(), id));
14462}
14463
14464isl::basic_set point::fix_si(isl::dim type, unsigned int pos, int value) const
14465{
14466 return isl::basic_set(*this).fix_si(type, pos, value);
14467}
14468
14470{
14471 return isl::basic_set(*this).fix_val(type, pos, v);
14472}
14473
14474isl::basic_set point::fix_val(isl::dim type, unsigned int pos, long v) const
14475{
14476 return this->fix_val(type, pos, isl::val(ctx(), v));
14477}
14478
14480{
14481 return isl::basic_set(*this).flatten();
14482}
14483
14485{
14486 return isl::basic_set(*this).foreach_basic_set(fn);
14487}
14488
14489stat point::foreach_point(const std::function<stat(isl::point)> &fn) const
14490{
14491 return isl::basic_set(*this).foreach_point(fn);
14492}
14493
14494stat point::foreach_set(const std::function<stat(isl::set)> &fn) const
14495{
14496 return isl::basic_set(*this).foreach_set(fn);
14497}
14498
14500{
14501 return isl::basic_set(*this).gist(context);
14502}
14503
14505{
14506 return isl::basic_set(*this).gist(context);
14507}
14508
14509isl::union_set point::gist(const isl::union_set &context) const
14510{
14511 return isl::basic_set(*this).gist(context);
14512}
14513
14515{
14516 return isl::basic_set(*this).gist_params(context);
14517}
14518
14520{
14521 return isl::basic_set(*this).has_equal_space(set2);
14522}
14523
14525{
14526 return isl::basic_set(*this).identity();
14527}
14528
14530{
14531 return isl::basic_set(*this).identity_union_pw_multi_aff();
14532}
14533
14535{
14536 return isl::basic_set(*this).indicator_function();
14537}
14538
14539isl::set point::insert_dims(isl::dim type, unsigned int pos, unsigned int n) const
14540{
14541 return isl::basic_set(*this).insert_dims(type, pos, n);
14542}
14543
14545{
14546 return isl::basic_set(*this).insert_domain(domain);
14547}
14548
14550{
14551 return isl::basic_set(*this).intersect(bset2);
14552}
14553
14555{
14556 return isl::basic_set(*this).intersect(set2);
14557}
14558
14559isl::union_set point::intersect(const isl::union_set &uset2) const
14560{
14561 return isl::basic_set(*this).intersect(uset2);
14562}
14563
14564isl::basic_set point::intersect_params(const isl::basic_set &bset2) const
14565{
14566 return isl::basic_set(*this).intersect_params(bset2);
14567}
14568
14570{
14571 return isl::basic_set(*this).intersect_params(params);
14572}
14573
14574boolean point::involves_dims(isl::dim type, unsigned int first, unsigned int n) const
14575{
14576 return isl::basic_set(*this).involves_dims(type, first, n);
14577}
14578
14579boolean point::involves_locals() const
14580{
14581 return isl::basic_set(*this).involves_locals();
14582}
14583
14584boolean point::is_bounded() const
14585{
14586 return isl::basic_set(*this).is_bounded();
14587}
14588
14589boolean point::is_disjoint(const isl::set &set2) const
14590{
14591 return isl::basic_set(*this).is_disjoint(set2);
14592}
14593
14594boolean point::is_disjoint(const isl::union_set &uset2) const
14595{
14596 return isl::basic_set(*this).is_disjoint(uset2);
14597}
14598
14599boolean point::is_empty() const
14600{
14601 return isl::basic_set(*this).is_empty();
14602}
14603
14604boolean point::is_equal(const isl::basic_set &bset2) const
14605{
14606 return isl::basic_set(*this).is_equal(bset2);
14607}
14608
14609boolean point::is_equal(const isl::set &set2) const
14610{
14611 return isl::basic_set(*this).is_equal(set2);
14612}
14613
14614boolean point::is_equal(const isl::union_set &uset2) const
14615{
14616 return isl::basic_set(*this).is_equal(uset2);
14617}
14618
14619boolean point::is_params() const
14620{
14621 return isl::basic_set(*this).is_params();
14622}
14623
14624boolean point::is_singleton() const
14625{
14626 return isl::basic_set(*this).is_singleton();
14627}
14628
14629boolean point::is_strict_subset(const isl::set &set2) const
14630{
14631 return isl::basic_set(*this).is_strict_subset(set2);
14632}
14633
14634boolean point::is_strict_subset(const isl::union_set &uset2) const
14635{
14636 return isl::basic_set(*this).is_strict_subset(uset2);
14637}
14638
14639boolean point::is_subset(const isl::basic_set &bset2) const
14640{
14641 return isl::basic_set(*this).is_subset(bset2);
14642}
14643
14644boolean point::is_subset(const isl::set &set2) const
14645{
14646 return isl::basic_set(*this).is_subset(set2);
14647}
14648
14649boolean point::is_subset(const isl::union_set &uset2) const
14650{
14651 return isl::basic_set(*this).is_subset(uset2);
14652}
14653
14654boolean point::is_wrapping() const
14655{
14656 return isl::basic_set(*this).is_wrapping();
14657}
14658
14659boolean point::isa_set() const
14660{
14661 return isl::basic_set(*this).isa_set();
14662}
14663
14664isl::set point::lexmax() const
14665{
14666 return isl::basic_set(*this).lexmax();
14667}
14668
14669isl::pw_multi_aff point::lexmax_pw_multi_aff() const
14670{
14671 return isl::basic_set(*this).lexmax_pw_multi_aff();
14672}
14673
14674isl::set point::lexmin() const
14675{
14676 return isl::basic_set(*this).lexmin();
14677}
14678
14679isl::pw_multi_aff point::lexmin_pw_multi_aff() const
14680{
14681 return isl::basic_set(*this).lexmin_pw_multi_aff();
14682}
14683
14684isl::set point::lower_bound(const isl::multi_pw_aff &lower) const
14685{
14686 return isl::basic_set(*this).lower_bound(lower);
14687}
14688
14689isl::set point::lower_bound(const isl::multi_val &lower) const
14690{
14691 return isl::basic_set(*this).lower_bound(lower);
14692}
14693
14694isl::set point::lower_bound_si(isl::dim type, unsigned int pos, int value) const
14695{
14696 return isl::basic_set(*this).lower_bound_si(type, pos, value);
14697}
14698
14699isl::set point::lower_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const
14700{
14701 return isl::basic_set(*this).lower_bound_val(type, pos, value);
14702}
14703
14704isl::set point::lower_bound_val(isl::dim type, unsigned int pos, long value) const
14705{
14706 return this->lower_bound_val(type, pos, isl::val(ctx(), value));
14707}
14708
14710{
14711 return isl::basic_set(*this).max_multi_pw_aff();
14712}
14713
14714isl::val point::max_val(const isl::aff &obj) const
14715{
14716 return isl::basic_set(*this).max_val(obj);
14717}
14718
14719isl::multi_pw_aff point::min_multi_pw_aff() const
14720{
14721 return isl::basic_set(*this).min_multi_pw_aff();
14722}
14723
14724isl::val point::min_val(const isl::aff &obj) const
14725{
14726 return isl::basic_set(*this).min_val(obj);
14727}
14728
14729isl::multi_val point::multi_val() const
14730{
14732 return manage(res);
14733}
14734
14735isl::multi_val point::get_multi_val() const
14736{
14737 return multi_val();
14738}
14739
14740class size point::n_basic_set() const
14741{
14742 return isl::basic_set(*this).n_basic_set();
14743}
14744
14745isl::basic_set point::params() const
14746{
14747 return isl::basic_set(*this).params();
14748}
14749
14751{
14752 return isl::basic_set(*this).plain_get_val_if_fixed(type, pos);
14753}
14754
14756{
14758}
14759
14761{
14762 return isl::basic_set(*this).polyhedral_hull();
14763}
14764
14765isl::set point::preimage(const isl::multi_aff &ma) const
14766{
14767 return isl::basic_set(*this).preimage(ma);
14768}
14769
14770isl::set point::preimage(const isl::multi_pw_aff &mpa) const
14771{
14772 return isl::basic_set(*this).preimage(mpa);
14773}
14774
14775isl::set point::preimage(const isl::pw_multi_aff &pma) const
14776{
14777 return isl::basic_set(*this).preimage(pma);
14778}
14779
14780isl::union_set point::preimage(const isl::union_pw_multi_aff &upma) const
14781{
14782 return isl::basic_set(*this).preimage(upma);
14783}
14784
14786{
14787 return isl::basic_set(*this).product(set2);
14788}
14789
14790isl::basic_set point::project_out(isl::dim type, unsigned int first, unsigned int n) const
14791{
14792 return isl::basic_set(*this).project_out(type, first, n);
14793}
14794
14796{
14797 return isl::basic_set(*this).project_out_all_params();
14798}
14799
14801{
14802 return isl::basic_set(*this).project_out_param(id);
14803}
14804
14805isl::set point::project_out_param(const std::string &id) const
14806{
14807 return this->project_out_param(isl::id(ctx(), id));
14808}
14809
14810isl::set point::project_out_param(const isl::id_list &list) const
14811{
14812 return isl::basic_set(*this).project_out_param(list);
14813}
14814
14815isl::pw_multi_aff point::pw_multi_aff_on_domain(const isl::multi_val &mv) const
14816{
14817 return isl::basic_set(*this).pw_multi_aff_on_domain(mv);
14818}
14819
14820isl::set point::remove_dims(isl::dim type, unsigned int first, unsigned int n) const
14821{
14822 return isl::basic_set(*this).remove_dims(type, first, n);
14823}
14824
14826{
14827 return isl::basic_set(*this).remove_divs();
14828}
14829
14831{
14832 return isl::basic_set(*this).remove_redundancies();
14833}
14834
14836{
14837 return isl::basic_set(*this).reset_tuple_id();
14838}
14839
14841{
14842 return isl::basic_set(*this).sample();
14843}
14844
14846{
14847 return isl::basic_set(*this).sample_point();
14848}
14849
14850isl::set point::set_dim_id(isl::dim type, unsigned int pos, const isl::id &id) const
14851{
14852 return isl::basic_set(*this).set_dim_id(type, pos, id);
14853}
14854
14855isl::set point::set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const
14856{
14857 return this->set_dim_id(type, pos, isl::id(ctx(), id));
14858}
14859
14861{
14862 return isl::basic_set(*this).set_list();
14863}
14864
14866{
14867 return isl::basic_set(*this).set_tuple_id(id);
14868}
14869
14870isl::set point::set_tuple_id(const std::string &id) const
14871{
14872 return this->set_tuple_id(isl::id(ctx(), id));
14873}
14874
14876{
14877 return isl::basic_set(*this).simple_fixed_box_hull();
14878}
14879
14881{
14882 return isl::basic_set(*this).simple_hull();
14883}
14884
14886{
14887 return isl::basic_set(*this).space();
14888}
14889
14890isl::val point::stride(int pos) const
14891{
14892 return isl::basic_set(*this).stride(pos);
14893}
14894
14896{
14897 return isl::basic_set(*this).subtract(set2);
14898}
14899
14900isl::union_set point::subtract(const isl::union_set &uset2) const
14901{
14902 return isl::basic_set(*this).subtract(uset2);
14903}
14904
14905isl::basic_set_list point::to_list() const
14906{
14907 return isl::basic_set(*this).to_list();
14908}
14909
14910isl::set point::to_set() const
14911{
14912 auto res = isl_point_to_set(copy());
14913 return manage(res);
14914}
14915
14916isl::union_set point::to_union_set() const
14917{
14918 return isl::basic_set(*this).to_union_set();
14919}
14920
14921isl::map point::translation() const
14922{
14923 return isl::basic_set(*this).translation();
14924}
14925
14926class size point::tuple_dim() const
14927{
14928 return isl::basic_set(*this).tuple_dim();
14929}
14930
14932{
14933 return isl::basic_set(*this).tuple_id();
14934}
14935
14936std::string point::tuple_name() const
14937{
14938 return isl::basic_set(*this).tuple_name();
14939}
14940
14942{
14943 return isl::basic_set(*this).unbind_params(tuple);
14944}
14945
14947{
14949}
14950
14951isl::set point::unite(const isl::basic_set &bset2) const
14952{
14953 return isl::basic_set(*this).unite(bset2);
14954}
14955
14956isl::set point::unite(const isl::set &set2) const
14957{
14958 return isl::basic_set(*this).unite(set2);
14959}
14960
14961isl::union_set point::unite(const isl::union_set &uset2) const
14962{
14963 return isl::basic_set(*this).unite(uset2);
14964}
14965
14966isl::basic_set point::unshifted_simple_hull() const
14967{
14968 return isl::basic_set(*this).unshifted_simple_hull();
14969}
14970
14971isl::map point::unwrap() const
14972{
14973 return isl::basic_set(*this).unwrap();
14974}
14975
14976isl::set point::upper_bound(const isl::multi_pw_aff &upper) const
14977{
14978 return isl::basic_set(*this).upper_bound(upper);
14979}
14980
14981isl::set point::upper_bound(const isl::multi_val &upper) const
14982{
14983 return isl::basic_set(*this).upper_bound(upper);
14984}
14985
14986isl::set point::upper_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const
14987{
14988 return isl::basic_set(*this).upper_bound_val(type, pos, value);
14989}
14990
14991isl::set point::upper_bound_val(isl::dim type, unsigned int pos, long value) const
14992{
14993 return this->upper_bound_val(type, pos, isl::val(ctx(), value));
14994}
14995
14996inline std::ostream &operator<<(std::ostream &os, const point &obj)
14997{
14998 char *str = isl_point_to_str(obj.get());
14999 if (!str) {
15000 os.setstate(std::ios_base::badbit);
15001 return os;
15002 }
15003 os << str;
15004 free(str);
15005 return os;
15006}
15007
15008// implementations for isl::pw_aff
15010 return pw_aff(ptr);
15011}
15013 ptr = isl_pw_aff_copy(ptr);
15014 return pw_aff(ptr);
15015}
15016
15018 : ptr(nullptr) {}
15019
15021 : ptr(nullptr)
15022{
15023 ptr = obj.copy();
15024}
15025
15027 : ptr(ptr) {}
15028
15029pw_aff::pw_aff(isl::aff aff)
15030{
15031 auto res = isl_pw_aff_from_aff(aff.release());
15032 ptr = res;
15033}
15034
15035pw_aff::pw_aff(isl::ctx ctx, const std::string &str)
15036{
15037 auto res = isl_pw_aff_read_from_str(ctx.release(), str.c_str());
15038 ptr = res;
15039}
15040
15042{
15043 auto res = isl_pw_aff_val_on_domain(domain.release(), v.release());
15044 ptr = res;
15045}
15046
15048{
15050 ptr = res;
15051}
15052
15054 std::swap(this->ptr, obj.ptr);
15055 return *this;
15056}
15057
15059 if (ptr)
15061}
15062
15064 return isl_pw_aff_copy(ptr);
15065}
15066
15068 return ptr;
15069}
15070
15072 isl_pw_aff *tmp = ptr;
15073 ptr = nullptr;
15074 return tmp;
15075}
15076
15077bool pw_aff::is_null() const {
15078 return ptr == nullptr;
15079}
15080
15081isl::ctx pw_aff::ctx() const {
15082 return isl::ctx(isl_pw_aff_get_ctx(ptr));
15083}
15084
15085isl::multi_pw_aff pw_aff::add(const isl::multi_pw_aff &multi2) const
15086{
15087 return isl::pw_multi_aff(*this).add(multi2);
15088}
15089
15090isl::multi_union_pw_aff pw_aff::add(const isl::multi_union_pw_aff &multi2) const
15091{
15092 return isl::union_pw_aff(*this).add(multi2);
15093}
15094
15095isl::pw_aff pw_aff::add(isl::pw_aff pwaff2) const
15096{
15097 auto res = isl_pw_aff_add(copy(), pwaff2.release());
15098 return manage(res);
15099}
15100
15101isl::pw_multi_aff pw_aff::add(const isl::pw_multi_aff &pma2) const
15102{
15103 return isl::pw_multi_aff(*this).add(pma2);
15104}
15105
15106isl::union_pw_aff pw_aff::add(const isl::union_pw_aff &upa2) const
15107{
15108 return isl::union_pw_aff(*this).add(upa2);
15109}
15110
15111isl::union_pw_multi_aff pw_aff::add(const isl::union_pw_multi_aff &upma2) const
15112{
15113 return isl::union_pw_aff(*this).add(upma2);
15114}
15115
15116isl::pw_aff pw_aff::add(const isl::aff &pwaff2) const
15117{
15118 return this->add(isl::pw_aff(pwaff2));
15119}
15120
15121isl::pw_aff pw_aff::add_constant(isl::val v) const
15122{
15124 return manage(res);
15125}
15126
15127isl::pw_aff pw_aff::add_constant(long v) const
15128{
15129 return this->add_constant(isl::val(ctx(), v));
15130}
15131
15132isl::pw_multi_aff pw_aff::add_constant(const isl::multi_val &mv) const
15133{
15134 return isl::pw_multi_aff(*this).add_constant(mv);
15135}
15136
15138{
15139 auto res = isl_pw_aff_add_dims(copy(), static_cast<enum isl_dim_type>(type), n);
15140 return manage(res);
15141}
15142
15144{
15145 return isl::union_pw_aff(*this).add_pw_multi_aff(pma);
15146}
15147
15149{
15150 return isl::union_pw_aff(*this).apply(upma2);
15151}
15152
15154{
15155 auto res = isl_pw_aff_as_aff(copy());
15156 return manage(res);
15157}
15158
15159isl::map pw_aff::as_map() const
15160{
15161 auto res = isl_pw_aff_as_map(copy());
15162 return manage(res);
15163}
15164
15165isl::multi_aff pw_aff::as_multi_aff() const
15166{
15167 return isl::pw_multi_aff(*this).as_multi_aff();
15168}
15169
15170isl::multi_union_pw_aff pw_aff::as_multi_union_pw_aff() const
15171{
15172 return isl::union_pw_aff(*this).as_multi_union_pw_aff();
15173}
15174
15175isl::pw_multi_aff pw_aff::as_pw_multi_aff() const
15176{
15177 return isl::union_pw_aff(*this).as_pw_multi_aff();
15178}
15179
15181{
15182 return isl::pw_multi_aff(*this).as_set();
15183}
15184
15185isl::union_map pw_aff::as_union_map() const
15186{
15187 return isl::union_pw_aff(*this).as_union_map();
15188}
15189
15190isl::pw_aff pw_aff::at(int pos) const
15191{
15192 return isl::pw_multi_aff(*this).at(pos);
15193}
15194
15195isl::set pw_aff::bind(const isl::multi_id &tuple) const
15196{
15197 return isl::multi_pw_aff(*this).bind(tuple);
15198}
15199
15200isl::set pw_aff::bind(isl::id id) const
15201{
15202 auto res = isl_pw_aff_bind_id(copy(), id.release());
15203 return manage(res);
15204}
15205
15206isl::set pw_aff::bind(const std::string &id) const
15207{
15208 return this->bind(isl::id(ctx(), id));
15209}
15210
15211isl::pw_aff pw_aff::bind_domain(isl::multi_id tuple) const
15212{
15213 auto res = isl_pw_aff_bind_domain(copy(), tuple.release());
15214 return manage(res);
15215}
15216
15217isl::pw_aff pw_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const
15218{
15220 return manage(res);
15221}
15222
15223isl::pw_aff pw_aff::ceil() const
15224{
15225 auto res = isl_pw_aff_ceil(copy());
15226 return manage(res);
15227}
15228
15229isl::pw_aff pw_aff::coalesce() const
15230{
15231 auto res = isl_pw_aff_coalesce(copy());
15232 return manage(res);
15233}
15234
15235isl::pw_aff pw_aff::cond(isl::pw_aff pwaff_true, isl::pw_aff pwaff_false) const
15236{
15237 auto res = isl_pw_aff_cond(copy(), pwaff_true.release(), pwaff_false.release());
15238 return manage(res);
15239}
15240
15242{
15243 return isl::pw_multi_aff(*this).dim(type);
15244}
15245
15247{
15248 auto res = isl_pw_aff_get_dim_id(get(), static_cast<enum isl_dim_type>(type), pos);
15249 return manage(res);
15250}
15251
15253{
15254 return dim_id(type, pos);
15255}
15256
15258{
15259 auto res = isl_pw_aff_div(copy(), pa2.release());
15260 return manage(res);
15261}
15262
15264{
15265 auto res = isl_pw_aff_domain(copy());
15266 return manage(res);
15267}
15268
15270{
15272 return manage(res);
15273}
15274
15276{
15277 return domain_space();
15278}
15279
15280isl::pw_multi_aff pw_aff::drop_dims(isl::dim type, unsigned int first, unsigned int n) const
15281{
15282 return isl::pw_multi_aff(*this).drop_dims(type, first, n);
15283}
15284
15286{
15287 auto res = isl_pw_aff_eq_set(copy(), pwaff2.release());
15288 return manage(res);
15289}
15290
15292{
15293 auto res = isl_pw_aff_eval(copy(), pnt.release());
15294 return manage(res);
15295}
15296
15297isl::pw_multi_aff pw_aff::extract_pw_multi_aff(const isl::space &space) const
15298{
15299 return isl::union_pw_aff(*this).extract_pw_multi_aff(space);
15300}
15301
15302isl::multi_pw_aff pw_aff::flat_range_product(const isl::multi_pw_aff &multi2) const
15303{
15304 return isl::pw_multi_aff(*this).flat_range_product(multi2);
15305}
15306
15307isl::multi_union_pw_aff pw_aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const
15308{
15309 return isl::union_pw_aff(*this).flat_range_product(multi2);
15310}
15311
15312isl::pw_multi_aff pw_aff::flat_range_product(const isl::pw_multi_aff &pma2) const
15313{
15314 return isl::pw_multi_aff(*this).flat_range_product(pma2);
15315}
15316
15317isl::union_pw_multi_aff pw_aff::flat_range_product(const isl::union_pw_multi_aff &upma2) const
15318{
15319 return isl::union_pw_aff(*this).flat_range_product(upma2);
15320}
15321
15322isl::pw_aff pw_aff::floor() const
15323{
15324 auto res = isl_pw_aff_floor(copy());
15325 return manage(res);
15326}
15327
15328stat pw_aff::foreach_piece(const std::function<stat(isl::set, isl::aff)> &fn) const
15329{
15330 struct fn_data {
15331 std::function<stat(isl::set, isl::aff)> func;
15332 } fn_data = { fn };
15333 auto fn_lambda = [](isl_set *arg_0, isl_aff *arg_1, void *arg_2) -> isl_stat {
15334 auto *data = static_cast<struct fn_data *>(arg_2);
15335 auto ret = (data->func)(manage(arg_0), manage(arg_1));
15336 return ret.release();
15337 };
15338 auto res = isl_pw_aff_foreach_piece(get(), fn_lambda, &fn_data);
15339 return manage(res);
15340}
15341
15343{
15344 return isl::pw_multi_aff(*this).foreach_piece(fn);
15345}
15346
15347stat pw_aff::foreach_pw_aff(const std::function<stat(isl::pw_aff)> &fn) const
15348{
15349 return isl::union_pw_aff(*this).foreach_pw_aff(fn);
15350}
15351
15353{
15354 auto res = isl_pw_aff_ge_set(copy(), pwaff2.release());
15355 return manage(res);
15356}
15357
15359{
15360 auto res = isl_pw_aff_gist(copy(), context.release());
15361 return manage(res);
15362}
15363
15364isl::union_pw_aff pw_aff::gist(const isl::union_set &context) const
15365{
15366 return isl::union_pw_aff(*this).gist(context);
15367}
15368
15369isl::pw_aff pw_aff::gist(const isl::basic_set &context) const
15370{
15371 return this->gist(isl::set(context));
15372}
15373
15374isl::pw_aff pw_aff::gist(const isl::point &context) const
15375{
15376 return this->gist(isl::set(context));
15377}
15378
15379isl::set pw_aff::gt_set(isl::pw_aff pwaff2) const
15380{
15381 auto res = isl_pw_aff_gt_set(copy(), pwaff2.release());
15382 return manage(res);
15383}
15384
15385boolean pw_aff::has_range_tuple_id() const
15386{
15387 return isl::pw_multi_aff(*this).has_range_tuple_id();
15388}
15389
15390isl::multi_pw_aff pw_aff::identity() const
15391{
15392 return isl::pw_multi_aff(*this).identity();
15393}
15394
15395isl::pw_aff pw_aff::insert_domain(isl::space domain) const
15396{
15397 auto res = isl_pw_aff_insert_domain(copy(), domain.release());
15398 return manage(res);
15399}
15400
15401isl::pw_aff pw_aff::intersect_domain(isl::set set) const
15402{
15403 auto res = isl_pw_aff_intersect_domain(copy(), set.release());
15404 return manage(res);
15405}
15406
15407isl::union_pw_aff pw_aff::intersect_domain(const isl::space &space) const
15408{
15409 return isl::union_pw_aff(*this).intersect_domain(space);
15410}
15411
15412isl::union_pw_aff pw_aff::intersect_domain(const isl::union_set &uset) const
15413{
15414 return isl::union_pw_aff(*this).intersect_domain(uset);
15415}
15416
15417isl::pw_aff pw_aff::intersect_domain(const isl::basic_set &set) const
15418{
15419 return this->intersect_domain(isl::set(set));
15420}
15421
15422isl::pw_aff pw_aff::intersect_domain(const isl::point &set) const
15423{
15424 return this->intersect_domain(isl::set(set));
15425}
15426
15427isl::union_pw_aff pw_aff::intersect_domain_wrapped_domain(const isl::union_set &uset) const
15428{
15429 return isl::union_pw_aff(*this).intersect_domain_wrapped_domain(uset);
15430}
15431
15432isl::union_pw_aff pw_aff::intersect_domain_wrapped_range(const isl::union_set &uset) const
15433{
15434 return isl::union_pw_aff(*this).intersect_domain_wrapped_range(uset);
15435}
15436
15437isl::pw_aff pw_aff::intersect_params(isl::set set) const
15438{
15439 auto res = isl_pw_aff_intersect_params(copy(), set.release());
15440 return manage(res);
15441}
15442
15443boolean pw_aff::involves_locals() const
15444{
15445 return isl::pw_multi_aff(*this).involves_locals();
15446}
15447
15448boolean pw_aff::involves_nan() const
15449{
15450 return isl::multi_pw_aff(*this).involves_nan();
15451}
15452
15453boolean pw_aff::involves_param(const isl::id &id) const
15454{
15455 return isl::pw_multi_aff(*this).involves_param(id);
15456}
15457
15458boolean pw_aff::involves_param(const std::string &id) const
15459{
15460 return this->involves_param(isl::id(ctx(), id));
15461}
15462
15463boolean pw_aff::involves_param(const isl::id_list &list) const
15464{
15465 return isl::pw_multi_aff(*this).involves_param(list);
15466}
15467
15468boolean pw_aff::is_cst() const
15469{
15470 auto res = isl_pw_aff_is_cst(get());
15471 return manage(res);
15472}
15473
15474boolean pw_aff::is_equal(const isl::pw_aff &pa2) const
15475{
15476 auto res = isl_pw_aff_is_equal(get(), pa2.get());
15477 return manage(res);
15478}
15479
15480boolean pw_aff::isa_aff() const
15481{
15482 auto res = isl_pw_aff_isa_aff(get());
15483 return manage(res);
15484}
15485
15486boolean pw_aff::isa_multi_aff() const
15487{
15488 return isl::pw_multi_aff(*this).isa_multi_aff();
15489}
15490
15491boolean pw_aff::isa_pw_multi_aff() const
15492{
15493 return isl::union_pw_aff(*this).isa_pw_multi_aff();
15494}
15495
15496isl::set pw_aff::le_set(isl::pw_aff pwaff2) const
15497{
15498 auto res = isl_pw_aff_le_set(copy(), pwaff2.release());
15499 return manage(res);
15500}
15501
15502isl::pw_aff_list pw_aff::list() const
15503{
15504 return isl::multi_pw_aff(*this).list();
15505}
15506
15507isl::set pw_aff::lt_set(isl::pw_aff pwaff2) const
15508{
15509 auto res = isl_pw_aff_lt_set(copy(), pwaff2.release());
15510 return manage(res);
15511}
15512
15513isl::multi_pw_aff pw_aff::max(const isl::multi_pw_aff &multi2) const
15514{
15515 return isl::pw_multi_aff(*this).max(multi2);
15516}
15517
15518isl::pw_aff pw_aff::max(isl::pw_aff pwaff2) const
15519{
15520 auto res = isl_pw_aff_max(copy(), pwaff2.release());
15521 return manage(res);
15522}
15523
15524isl::pw_aff pw_aff::max(const isl::aff &pwaff2) const
15525{
15526 return this->max(isl::pw_aff(pwaff2));
15527}
15528
15529isl::multi_val pw_aff::max_multi_val() const
15530{
15531 return isl::pw_multi_aff(*this).max_multi_val();
15532}
15533
15534isl::multi_pw_aff pw_aff::min(const isl::multi_pw_aff &multi2) const
15535{
15536 return isl::pw_multi_aff(*this).min(multi2);
15537}
15538
15539isl::pw_aff pw_aff::min(isl::pw_aff pwaff2) const
15540{
15541 auto res = isl_pw_aff_min(copy(), pwaff2.release());
15542 return manage(res);
15543}
15544
15545isl::pw_aff pw_aff::min(const isl::aff &pwaff2) const
15546{
15547 return this->min(isl::pw_aff(pwaff2));
15548}
15549
15550isl::multi_val pw_aff::min_multi_val() const
15551{
15552 return isl::pw_multi_aff(*this).min_multi_val();
15553}
15554
15555isl::pw_aff pw_aff::mod(isl::val mod) const
15556{
15557 auto res = isl_pw_aff_mod_val(copy(), mod.release());
15558 return manage(res);
15559}
15560
15561isl::pw_aff pw_aff::mod(long mod) const
15562{
15563 return this->mod(isl::val(ctx(), mod));
15564}
15565
15566isl::pw_aff pw_aff::mul(isl::pw_aff pwaff2) const
15567{
15568 auto res = isl_pw_aff_mul(copy(), pwaff2.release());
15569 return manage(res);
15570}
15571
15572class size pw_aff::n_piece() const
15573{
15574 return isl::pw_multi_aff(*this).n_piece();
15575}
15576
15577isl::set pw_aff::ne_set(isl::pw_aff pwaff2) const
15578{
15579 auto res = isl_pw_aff_ne_set(copy(), pwaff2.release());
15580 return manage(res);
15581}
15582
15583isl::pw_aff pw_aff::neg() const
15584{
15585 auto res = isl_pw_aff_neg(copy());
15586 return manage(res);
15587}
15588
15589isl::pw_aff pw_aff::param_on_domain(isl::set domain, isl::id id)
15590{
15591 auto res = isl_pw_aff_param_on_domain_id(domain.release(), id.release());
15592 return manage(res);
15593}
15594
15595boolean pw_aff::plain_is_empty() const
15596{
15597 return isl::union_pw_aff(*this).plain_is_empty();
15598}
15599
15600boolean pw_aff::plain_is_equal(const isl::multi_pw_aff &multi2) const
15601{
15602 return isl::pw_multi_aff(*this).plain_is_equal(multi2);
15603}
15604
15605boolean pw_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
15606{
15607 return isl::union_pw_aff(*this).plain_is_equal(multi2);
15608}
15609
15610isl::pw_multi_aff pw_aff::preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const
15611{
15612 return isl::pw_multi_aff(*this).preimage_domain_wrapped_domain(pma2);
15613}
15614
15615isl::union_pw_multi_aff pw_aff::preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const
15616{
15617 return isl::union_pw_aff(*this).preimage_domain_wrapped_domain(upma2);
15618}
15619
15620isl::multi_pw_aff pw_aff::product(const isl::multi_pw_aff &multi2) const
15621{
15622 return isl::pw_multi_aff(*this).product(multi2);
15623}
15624
15625isl::pw_multi_aff pw_aff::product(const isl::pw_multi_aff &pma2) const
15626{
15627 return isl::pw_multi_aff(*this).product(pma2);
15628}
15629
15630isl::pw_aff pw_aff::pullback(isl::multi_aff ma) const
15631{
15632 auto res = isl_pw_aff_pullback_multi_aff(copy(), ma.release());
15633 return manage(res);
15634}
15635
15636isl::pw_aff pw_aff::pullback(isl::multi_pw_aff mpa) const
15637{
15639 return manage(res);
15640}
15641
15642isl::pw_aff pw_aff::pullback(isl::pw_multi_aff pma) const
15643{
15644 auto res = isl_pw_aff_pullback_pw_multi_aff(copy(), pma.release());
15645 return manage(res);
15646}
15647
15648isl::union_pw_aff pw_aff::pullback(const isl::union_pw_multi_aff &upma) const
15649{
15650 return isl::union_pw_aff(*this).pullback(upma);
15651}
15652
15653isl::pw_multi_aff_list pw_aff::pw_multi_aff_list() const
15654{
15655 return isl::union_pw_aff(*this).pw_multi_aff_list();
15656}
15657
15658isl::pw_multi_aff pw_aff::range_factor_domain() const
15659{
15660 return isl::pw_multi_aff(*this).range_factor_domain();
15661}
15662
15663isl::pw_multi_aff pw_aff::range_factor_range() const
15664{
15665 return isl::pw_multi_aff(*this).range_factor_range();
15666}
15667
15668isl::multi_pw_aff pw_aff::range_product(const isl::multi_pw_aff &multi2) const
15669{
15670 return isl::pw_multi_aff(*this).range_product(multi2);
15671}
15672
15673isl::multi_union_pw_aff pw_aff::range_product(const isl::multi_union_pw_aff &multi2) const
15674{
15675 return isl::union_pw_aff(*this).range_product(multi2);
15676}
15677
15678isl::pw_multi_aff pw_aff::range_product(const isl::pw_multi_aff &pma2) const
15679{
15680 return isl::pw_multi_aff(*this).range_product(pma2);
15681}
15682
15683isl::union_pw_multi_aff pw_aff::range_product(const isl::union_pw_multi_aff &upma2) const
15684{
15685 return isl::union_pw_aff(*this).range_product(upma2);
15686}
15687
15688isl::id pw_aff::range_tuple_id() const
15689{
15690 return isl::pw_multi_aff(*this).range_tuple_id();
15691}
15692
15693isl::multi_pw_aff pw_aff::reset_range_tuple_id() const
15694{
15695 return isl::multi_pw_aff(*this).reset_range_tuple_id();
15696}
15697
15699{
15700 return isl::multi_pw_aff(*this).reset_tuple_id(type);
15701}
15702
15704{
15705 return isl::multi_pw_aff(*this).scale(mv);
15706}
15707
15709{
15710 auto res = isl_pw_aff_scale_val(copy(), v.release());
15711 return manage(res);
15712}
15713
15714isl::pw_aff pw_aff::scale(long v) const
15715{
15716 return this->scale(isl::val(ctx(), v));
15717}
15718
15719isl::multi_pw_aff pw_aff::scale_down(const isl::multi_val &mv) const
15720{
15721 return isl::multi_pw_aff(*this).scale_down(mv);
15722}
15723
15724isl::pw_aff pw_aff::scale_down(isl::val f) const
15725{
15726 auto res = isl_pw_aff_scale_down_val(copy(), f.release());
15727 return manage(res);
15728}
15729
15730isl::pw_aff pw_aff::scale_down(long f) const
15731{
15732 return this->scale_down(isl::val(ctx(), f));
15733}
15734
15735isl::multi_pw_aff pw_aff::set_at(int pos, const isl::pw_aff &el) const
15736{
15737 return isl::pw_multi_aff(*this).set_at(pos, el);
15738}
15739
15740isl::multi_union_pw_aff pw_aff::set_at(int pos, const isl::union_pw_aff &el) const
15741{
15742 return isl::union_pw_aff(*this).set_at(pos, el);
15743}
15744
15746{
15747 return isl::pw_multi_aff(*this).set_pw_aff(pos, el);
15748}
15749
15751{
15752 return isl::pw_multi_aff(*this).set_pw_aff(pos, pa);
15753}
15754
15756{
15757 return isl::pw_multi_aff(*this).set_range_tuple(id);
15758}
15759
15760isl::pw_multi_aff pw_aff::set_range_tuple(const std::string &id) const
15761{
15762 return this->set_range_tuple(isl::id(ctx(), id));
15763}
15764
15766{
15767 auto res = isl_pw_aff_set_tuple_id(copy(), static_cast<enum isl_dim_type>(type), id.release());
15768 return manage(res);
15769}
15770
15771isl::pw_aff pw_aff::set_tuple_id(isl::dim type, const std::string &id) const
15772{
15773 return this->set_tuple_id(type, isl::id(ctx(), id));
15774}
15775
15777{
15778 return isl::union_pw_aff(*this).set_union_pw_aff(pos, el);
15779}
15780
15781class size pw_aff::size() const
15782{
15783 return isl::multi_pw_aff(*this).size();
15784}
15785
15787{
15788 auto res = isl_pw_aff_get_space(get());
15789 return manage(res);
15790}
15791
15792isl::space pw_aff::get_space() const
15793{
15794 return space();
15795}
15796
15797isl::multi_pw_aff pw_aff::sub(const isl::multi_pw_aff &multi2) const
15798{
15799 return isl::pw_multi_aff(*this).sub(multi2);
15800}
15801
15802isl::multi_union_pw_aff pw_aff::sub(const isl::multi_union_pw_aff &multi2) const
15803{
15804 return isl::union_pw_aff(*this).sub(multi2);
15805}
15806
15807isl::pw_aff pw_aff::sub(isl::pw_aff pwaff2) const
15808{
15809 auto res = isl_pw_aff_sub(copy(), pwaff2.release());
15810 return manage(res);
15811}
15812
15813isl::pw_multi_aff pw_aff::sub(const isl::pw_multi_aff &pma2) const
15814{
15815 return isl::pw_multi_aff(*this).sub(pma2);
15816}
15817
15818isl::union_pw_aff pw_aff::sub(const isl::union_pw_aff &upa2) const
15819{
15820 return isl::union_pw_aff(*this).sub(upa2);
15821}
15822
15823isl::union_pw_multi_aff pw_aff::sub(const isl::union_pw_multi_aff &upma2) const
15824{
15825 return isl::union_pw_aff(*this).sub(upma2);
15826}
15827
15828isl::pw_aff pw_aff::sub(const isl::aff &pwaff2) const
15829{
15830 return this->sub(isl::pw_aff(pwaff2));
15831}
15832
15833isl::pw_aff pw_aff::subtract_domain(isl::set set) const
15834{
15835 auto res = isl_pw_aff_subtract_domain(copy(), set.release());
15836 return manage(res);
15837}
15838
15839isl::union_pw_aff pw_aff::subtract_domain(const isl::space &space) const
15840{
15841 return isl::union_pw_aff(*this).subtract_domain(space);
15842}
15843
15844isl::union_pw_aff pw_aff::subtract_domain(const isl::union_set &uset) const
15845{
15846 return isl::union_pw_aff(*this).subtract_domain(uset);
15847}
15848
15849isl::pw_aff pw_aff::subtract_domain(const isl::basic_set &set) const
15850{
15851 return this->subtract_domain(isl::set(set));
15852}
15853
15854isl::pw_aff pw_aff::subtract_domain(const isl::point &set) const
15855{
15856 return this->subtract_domain(isl::set(set));
15857}
15858
15859isl::pw_aff pw_aff::tdiv_q(isl::pw_aff pa2) const
15860{
15861 auto res = isl_pw_aff_tdiv_q(copy(), pa2.release());
15862 return manage(res);
15863}
15864
15865isl::pw_aff pw_aff::tdiv_r(isl::pw_aff pa2) const
15866{
15867 auto res = isl_pw_aff_tdiv_r(copy(), pa2.release());
15868 return manage(res);
15869}
15870
15871isl::pw_aff_list pw_aff::to_list() const
15872{
15873 auto res = isl_pw_aff_to_list(copy());
15874 return manage(res);
15875}
15876
15877isl::multi_pw_aff pw_aff::to_multi_pw_aff() const
15878{
15879 return isl::pw_multi_aff(*this).to_multi_pw_aff();
15880}
15881
15882isl::union_pw_aff pw_aff::to_union_pw_aff() const
15883{
15885 return manage(res);
15886}
15887
15888isl::union_pw_multi_aff pw_aff::to_union_pw_multi_aff() const
15889{
15890 return isl::pw_multi_aff(*this).to_union_pw_multi_aff();
15891}
15892
15894{
15895 auto res = isl_pw_aff_get_tuple_id(get(), static_cast<enum isl_dim_type>(type));
15896 return manage(res);
15897}
15898
15900{
15901 return tuple_id(type);
15902}
15903
15905{
15907}
15908
15910{
15911 return isl::pw_multi_aff(*this).union_add(mpa2);
15912}
15913
15914isl::multi_union_pw_aff pw_aff::union_add(const isl::multi_union_pw_aff &mupa2) const
15915{
15916 return isl::union_pw_aff(*this).union_add(mupa2);
15917}
15918
15919isl::pw_aff pw_aff::union_add(isl::pw_aff pwaff2) const
15920{
15921 auto res = isl_pw_aff_union_add(copy(), pwaff2.release());
15922 return manage(res);
15923}
15924
15925isl::pw_multi_aff pw_aff::union_add(const isl::pw_multi_aff &pma2) const
15926{
15927 return isl::pw_multi_aff(*this).union_add(pma2);
15928}
15929
15930isl::union_pw_aff pw_aff::union_add(const isl::union_pw_aff &upa2) const
15931{
15932 return isl::union_pw_aff(*this).union_add(upa2);
15933}
15934
15935isl::union_pw_multi_aff pw_aff::union_add(const isl::union_pw_multi_aff &upma2) const
15936{
15937 return isl::union_pw_aff(*this).union_add(upma2);
15938}
15939
15940isl::pw_aff pw_aff::union_add(const isl::aff &pwaff2) const
15941{
15942 return this->union_add(isl::pw_aff(pwaff2));
15943}
15944
15946{
15947 auto res = isl_pw_aff_var_on_domain(ls.release(), static_cast<enum isl_dim_type>(type), pos);
15948 return manage(res);
15949}
15950
15951inline std::ostream &operator<<(std::ostream &os, const pw_aff &obj)
15952{
15953 char *str = isl_pw_aff_to_str(obj.get());
15954 if (!str) {
15955 os.setstate(std::ios_base::badbit);
15956 return os;
15957 }
15958 os << str;
15959 free(str);
15960 return os;
15961}
15962
15963// implementations for isl::pw_aff_list
15964pw_aff_list manage(__isl_take isl_pw_aff_list *ptr) {
15965 return pw_aff_list(ptr);
15966}
15967pw_aff_list manage_copy(__isl_keep isl_pw_aff_list *ptr) {
15968 ptr = isl_pw_aff_list_copy(ptr);
15969 return pw_aff_list(ptr);
15970}
15971
15973 : ptr(nullptr) {}
15974
15976 : ptr(nullptr)
15977{
15978 ptr = obj.copy();
15979}
15980
15981pw_aff_list::pw_aff_list(__isl_take isl_pw_aff_list *ptr)
15982 : ptr(ptr) {}
15983
15984pw_aff_list::pw_aff_list(isl::ctx ctx, int n)
15985{
15986 auto res = isl_pw_aff_list_alloc(ctx.release(), n);
15987 ptr = res;
15988}
15989
15990pw_aff_list::pw_aff_list(isl::pw_aff el)
15991{
15992 auto res = isl_pw_aff_list_from_pw_aff(el.release());
15993 ptr = res;
15994}
15995
15996pw_aff_list::pw_aff_list(isl::ctx ctx, const std::string &str)
15997{
15998 auto res = isl_pw_aff_list_read_from_str(ctx.release(), str.c_str());
15999 ptr = res;
16000}
16001
16003 std::swap(this->ptr, obj.ptr);
16004 return *this;
16005}
16006
16008 if (ptr)
16009 isl_pw_aff_list_free(ptr);
16010}
16011
16012__isl_give isl_pw_aff_list *pw_aff_list::copy() const & {
16013 return isl_pw_aff_list_copy(ptr);
16014}
16015
16016__isl_keep isl_pw_aff_list *pw_aff_list::get() const {
16017 return ptr;
16018}
16019
16020__isl_give isl_pw_aff_list *pw_aff_list::release() {
16021 isl_pw_aff_list *tmp = ptr;
16022 ptr = nullptr;
16023 return tmp;
16024}
16025
16026bool pw_aff_list::is_null() const {
16027 return ptr == nullptr;
16028}
16029
16030isl::ctx pw_aff_list::ctx() const {
16031 return isl::ctx(isl_pw_aff_list_get_ctx(ptr));
16032}
16033
16034isl::pw_aff_list pw_aff_list::add(isl::pw_aff el) const
16035{
16036 auto res = isl_pw_aff_list_add(copy(), el.release());
16037 return manage(res);
16038}
16039
16040isl::pw_aff pw_aff_list::at(int index) const
16041{
16042 auto res = isl_pw_aff_list_get_at(get(), index);
16043 return manage(res);
16044}
16045
16046isl::pw_aff pw_aff_list::get_at(int index) const
16047{
16048 return at(index);
16049}
16050
16051isl::pw_aff_list pw_aff_list::clear() const
16052{
16053 auto res = isl_pw_aff_list_clear(copy());
16054 return manage(res);
16055}
16056
16057isl::pw_aff_list pw_aff_list::concat(isl::pw_aff_list list2) const
16058{
16059 auto res = isl_pw_aff_list_concat(copy(), list2.release());
16060 return manage(res);
16061}
16062
16063isl::pw_aff_list pw_aff_list::drop(unsigned int first, unsigned int n) const
16064{
16065 auto res = isl_pw_aff_list_drop(copy(), first, n);
16066 return manage(res);
16067}
16068
16069stat pw_aff_list::foreach(const std::function<stat(isl::pw_aff)> &fn) const
16070{
16071 struct fn_data {
16072 std::function<stat(isl::pw_aff)> func;
16073 } fn_data = { fn };
16074 auto fn_lambda = [](isl_pw_aff *arg_0, void *arg_1) -> isl_stat {
16075 auto *data = static_cast<struct fn_data *>(arg_1);
16076 auto ret = (data->func)(manage(arg_0));
16077 return ret.release();
16078 };
16079 auto res = isl_pw_aff_list_foreach(get(), fn_lambda, &fn_data);
16080 return manage(res);
16081}
16082
16084{
16085 auto res = isl_pw_aff_list_insert(copy(), pos, el.release());
16086 return manage(res);
16087}
16088
16089class size pw_aff_list::size() const
16090{
16091 auto res = isl_pw_aff_list_size(get());
16092 return manage(res);
16093}
16094
16095inline std::ostream &operator<<(std::ostream &os, const pw_aff_list &obj)
16096{
16097 char *str = isl_pw_aff_list_to_str(obj.get());
16098 if (!str) {
16099 os.setstate(std::ios_base::badbit);
16100 return os;
16101 }
16102 os << str;
16103 free(str);
16104 return os;
16105}
16106
16107// implementations for isl::pw_multi_aff
16109 return pw_multi_aff(ptr);
16110}
16112 ptr = isl_pw_multi_aff_copy(ptr);
16113 return pw_multi_aff(ptr);
16114}
16115
16117 : ptr(nullptr) {}
16118
16120 : ptr(nullptr)
16121{
16122 ptr = obj.copy();
16123}
16124
16126 : ptr(ptr) {}
16127
16128pw_multi_aff::pw_multi_aff(isl::multi_aff ma)
16129{
16130 auto res = isl_pw_multi_aff_from_multi_aff(ma.release());
16131 ptr = res;
16132}
16133
16134pw_multi_aff::pw_multi_aff(isl::pw_aff pa)
16135{
16136 auto res = isl_pw_multi_aff_from_pw_aff(pa.release());
16137 ptr = res;
16138}
16139
16140pw_multi_aff::pw_multi_aff(isl::ctx ctx, const std::string &str)
16141{
16142 auto res = isl_pw_multi_aff_read_from_str(ctx.release(), str.c_str());
16143 ptr = res;
16144}
16145
16147 std::swap(this->ptr, obj.ptr);
16148 return *this;
16149}
16150
16152 if (ptr)
16154}
16155
16157 return isl_pw_multi_aff_copy(ptr);
16158}
16159
16161 return ptr;
16162}
16163
16165 isl_pw_multi_aff *tmp = ptr;
16166 ptr = nullptr;
16167 return tmp;
16168}
16169
16170bool pw_multi_aff::is_null() const {
16171 return ptr == nullptr;
16172}
16173
16174isl::ctx pw_multi_aff::ctx() const {
16175 return isl::ctx(isl_pw_multi_aff_get_ctx(ptr));
16176}
16177
16178isl::multi_pw_aff pw_multi_aff::add(const isl::multi_pw_aff &multi2) const
16179{
16180 return isl::multi_pw_aff(*this).add(multi2);
16181}
16182
16183isl::multi_union_pw_aff pw_multi_aff::add(const isl::multi_union_pw_aff &multi2) const
16184{
16185 return isl::multi_pw_aff(*this).add(multi2);
16186}
16187
16188isl::pw_multi_aff pw_multi_aff::add(isl::pw_multi_aff pma2) const
16189{
16190 auto res = isl_pw_multi_aff_add(copy(), pma2.release());
16191 return manage(res);
16192}
16193
16194isl::union_pw_multi_aff pw_multi_aff::add(const isl::union_pw_multi_aff &upma2) const
16195{
16196 return isl::union_pw_multi_aff(*this).add(upma2);
16197}
16198
16199isl::pw_multi_aff pw_multi_aff::add(const isl::multi_aff &pma2) const
16200{
16201 return this->add(isl::pw_multi_aff(pma2));
16202}
16203
16204isl::pw_multi_aff pw_multi_aff::add(const isl::pw_aff &pma2) const
16205{
16206 return this->add(isl::pw_multi_aff(pma2));
16207}
16208
16209isl::pw_multi_aff pw_multi_aff::add_constant(isl::multi_val mv) const
16210{
16212 return manage(res);
16213}
16214
16215isl::pw_multi_aff pw_multi_aff::add_constant(isl::val v) const
16216{
16218 return manage(res);
16219}
16220
16221isl::pw_multi_aff pw_multi_aff::add_constant(long v) const
16222{
16223 return this->add_constant(isl::val(ctx(), v));
16224}
16225
16227{
16228 return isl::union_pw_multi_aff(*this).add_pw_multi_aff(pma);
16229}
16230
16232{
16233 return isl::union_pw_multi_aff(*this).apply(upma2);
16234}
16235
16237{
16239 return manage(res);
16240}
16241
16242isl::multi_aff pw_multi_aff::as_multi_aff() const
16243{
16245 return manage(res);
16246}
16247
16248isl::multi_union_pw_aff pw_multi_aff::as_multi_union_pw_aff() const
16249{
16250 return isl::union_pw_multi_aff(*this).as_multi_union_pw_aff();
16251}
16252
16253isl::pw_multi_aff pw_multi_aff::as_pw_multi_aff() const
16254{
16255 return isl::union_pw_multi_aff(*this).as_pw_multi_aff();
16256}
16257
16259{
16261 return manage(res);
16262}
16263
16264isl::union_map pw_multi_aff::as_union_map() const
16265{
16266 return isl::union_pw_multi_aff(*this).as_union_map();
16267}
16268
16269isl::pw_aff pw_multi_aff::at(int pos) const
16270{
16272 return manage(res);
16273}
16274
16275isl::pw_aff pw_multi_aff::get_at(int pos) const
16276{
16277 return at(pos);
16278}
16279
16280isl::set pw_multi_aff::bind(const isl::multi_id &tuple) const
16281{
16282 return isl::multi_pw_aff(*this).bind(tuple);
16283}
16284
16285isl::pw_multi_aff pw_multi_aff::bind_domain(isl::multi_id tuple) const
16286{
16287 auto res = isl_pw_multi_aff_bind_domain(copy(), tuple.release());
16288 return manage(res);
16289}
16290
16291isl::pw_multi_aff pw_multi_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const
16292{
16294 return manage(res);
16295}
16296
16297isl::pw_multi_aff pw_multi_aff::coalesce() const
16298{
16300 return manage(res);
16301}
16302
16304{
16305 auto res = isl_pw_multi_aff_dim(get(), static_cast<enum isl_dim_type>(type));
16306 return manage(res);
16307}
16308
16310{
16312 return manage(res);
16313}
16314
16316{
16318 return manage(res);
16319}
16320
16321isl::pw_multi_aff pw_multi_aff::drop_dims(isl::dim type, unsigned int first, unsigned int n) const
16322{
16323 auto res = isl_pw_multi_aff_drop_dims(copy(), static_cast<enum isl_dim_type>(type), first, n);
16324 return manage(res);
16325}
16326
16328{
16330}
16331
16333{
16334 return isl::multi_pw_aff(*this).flat_range_product(multi2);
16335}
16336
16337isl::multi_union_pw_aff pw_multi_aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const
16338{
16339 return isl::multi_pw_aff(*this).flat_range_product(multi2);
16340}
16341
16342isl::pw_multi_aff pw_multi_aff::flat_range_product(isl::pw_multi_aff pma2) const
16343{
16345 return manage(res);
16346}
16347
16348isl::union_pw_multi_aff pw_multi_aff::flat_range_product(const isl::union_pw_multi_aff &upma2) const
16349{
16350 return isl::union_pw_multi_aff(*this).flat_range_product(upma2);
16351}
16352
16353isl::pw_multi_aff pw_multi_aff::flat_range_product(const isl::multi_aff &pma2) const
16354{
16355 return this->flat_range_product(isl::pw_multi_aff(pma2));
16356}
16357
16358isl::pw_multi_aff pw_multi_aff::flat_range_product(const isl::pw_aff &pma2) const
16359{
16360 return this->flat_range_product(isl::pw_multi_aff(pma2));
16361}
16362
16364{
16365 struct fn_data {
16366 std::function<stat(isl::set, isl::multi_aff)> func;
16367 } fn_data = { fn };
16368 auto fn_lambda = [](isl_set *arg_0, isl_multi_aff *arg_1, void *arg_2) -> isl_stat {
16369 auto *data = static_cast<struct fn_data *>(arg_2);
16370 auto ret = (data->func)(manage(arg_0), manage(arg_1));
16371 return ret.release();
16372 };
16373 auto res = isl_pw_multi_aff_foreach_piece(get(), fn_lambda, &fn_data);
16374 return manage(res);
16375}
16376
16382
16388
16390{
16392 return manage(res);
16393}
16394
16396{
16397 auto res = isl_pw_multi_aff_gist_params(copy(), set.release());
16398 return manage(res);
16399}
16400
16401isl::union_pw_multi_aff pw_multi_aff::gist(const isl::union_set &context) const
16402{
16403 return isl::union_pw_multi_aff(*this).gist(context);
16404}
16405
16406isl::pw_multi_aff pw_multi_aff::gist(const isl::basic_set &set) const
16407{
16408 return this->gist(isl::set(set));
16409}
16410
16411isl::pw_multi_aff pw_multi_aff::gist(const isl::point &set) const
16412{
16413 return this->gist(isl::set(set));
16414}
16415
16417{
16419 return manage(res);
16420}
16421
16422isl::multi_pw_aff pw_multi_aff::identity() const
16423{
16424 return isl::multi_pw_aff(*this).identity();
16425}
16426
16427isl::pw_multi_aff pw_multi_aff::identity_on_domain(isl::space space)
16428{
16430 return manage(res);
16431}
16432
16433isl::pw_multi_aff pw_multi_aff::insert_domain(isl::space domain) const
16434{
16435 auto res = isl_pw_multi_aff_insert_domain(copy(), domain.release());
16436 return manage(res);
16437}
16438
16439isl::pw_multi_aff pw_multi_aff::intersect_domain(isl::set set) const
16440{
16441 auto res = isl_pw_multi_aff_intersect_domain(copy(), set.release());
16442 return manage(res);
16443}
16444
16445isl::union_pw_multi_aff pw_multi_aff::intersect_domain(const isl::space &space) const
16446{
16447 return isl::union_pw_multi_aff(*this).intersect_domain(space);
16448}
16449
16450isl::union_pw_multi_aff pw_multi_aff::intersect_domain(const isl::union_set &uset) const
16451{
16452 return isl::union_pw_multi_aff(*this).intersect_domain(uset);
16453}
16454
16455isl::pw_multi_aff pw_multi_aff::intersect_domain(const isl::basic_set &set) const
16456{
16457 return this->intersect_domain(isl::set(set));
16458}
16459
16460isl::pw_multi_aff pw_multi_aff::intersect_domain(const isl::point &set) const
16461{
16462 return this->intersect_domain(isl::set(set));
16463}
16464
16465isl::union_pw_multi_aff pw_multi_aff::intersect_domain_wrapped_domain(const isl::union_set &uset) const
16466{
16467 return isl::union_pw_multi_aff(*this).intersect_domain_wrapped_domain(uset);
16468}
16469
16470isl::union_pw_multi_aff pw_multi_aff::intersect_domain_wrapped_range(const isl::union_set &uset) const
16471{
16472 return isl::union_pw_multi_aff(*this).intersect_domain_wrapped_range(uset);
16473}
16474
16475isl::pw_multi_aff pw_multi_aff::intersect_params(isl::set set) const
16476{
16477 auto res = isl_pw_multi_aff_intersect_params(copy(), set.release());
16478 return manage(res);
16479}
16480
16481boolean pw_multi_aff::involves_locals() const
16482{
16484 return manage(res);
16485}
16486
16487boolean pw_multi_aff::involves_nan() const
16488{
16489 return isl::multi_pw_aff(*this).involves_nan();
16490}
16491
16492boolean pw_multi_aff::involves_param(const isl::id &id) const
16493{
16494 return isl::multi_pw_aff(*this).involves_param(id);
16495}
16496
16497boolean pw_multi_aff::involves_param(const std::string &id) const
16498{
16499 return this->involves_param(isl::id(ctx(), id));
16500}
16501
16502boolean pw_multi_aff::involves_param(const isl::id_list &list) const
16503{
16504 return isl::multi_pw_aff(*this).involves_param(list);
16505}
16506
16507boolean pw_multi_aff::isa_multi_aff() const
16508{
16510 return manage(res);
16511}
16512
16513boolean pw_multi_aff::isa_pw_multi_aff() const
16514{
16515 return isl::union_pw_multi_aff(*this).isa_pw_multi_aff();
16516}
16517
16518isl::pw_aff_list pw_multi_aff::list() const
16519{
16520 return isl::multi_pw_aff(*this).list();
16521}
16522
16523isl::multi_pw_aff pw_multi_aff::max(const isl::multi_pw_aff &multi2) const
16524{
16525 return isl::multi_pw_aff(*this).max(multi2);
16526}
16527
16528isl::multi_val pw_multi_aff::max_multi_val() const
16529{
16531 return manage(res);
16532}
16533
16534isl::multi_pw_aff pw_multi_aff::min(const isl::multi_pw_aff &multi2) const
16535{
16536 return isl::multi_pw_aff(*this).min(multi2);
16537}
16538
16539isl::multi_val pw_multi_aff::min_multi_val() const
16540{
16542 return manage(res);
16543}
16544
16545isl::pw_multi_aff pw_multi_aff::multi_val_on_domain(isl::set domain, isl::multi_val mv)
16546{
16548 return manage(res);
16549}
16550
16551class size pw_multi_aff::n_piece() const
16552{
16554 return manage(res);
16555}
16556
16557isl::multi_pw_aff pw_multi_aff::neg() const
16558{
16559 return isl::multi_pw_aff(*this).neg();
16560}
16561
16562boolean pw_multi_aff::plain_is_empty() const
16563{
16564 return isl::union_pw_multi_aff(*this).plain_is_empty();
16565}
16566
16567boolean pw_multi_aff::plain_is_equal(const isl::multi_pw_aff &multi2) const
16568{
16569 return isl::multi_pw_aff(*this).plain_is_equal(multi2);
16570}
16571
16572boolean pw_multi_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
16573{
16574 return isl::multi_pw_aff(*this).plain_is_equal(multi2);
16575}
16576
16577isl::pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(isl::pw_multi_aff pma2) const
16578{
16580 return manage(res);
16581}
16582
16583isl::union_pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const
16584{
16585 return isl::union_pw_multi_aff(*this).preimage_domain_wrapped_domain(upma2);
16586}
16587
16588isl::pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(const isl::multi_aff &pma2) const
16589{
16590 return this->preimage_domain_wrapped_domain(isl::pw_multi_aff(pma2));
16591}
16592
16593isl::pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(const isl::pw_aff &pma2) const
16594{
16595 return this->preimage_domain_wrapped_domain(isl::pw_multi_aff(pma2));
16596}
16597
16598isl::multi_pw_aff pw_multi_aff::product(const isl::multi_pw_aff &multi2) const
16599{
16600 return isl::multi_pw_aff(*this).product(multi2);
16601}
16602
16603isl::pw_multi_aff pw_multi_aff::product(isl::pw_multi_aff pma2) const
16604{
16605 auto res = isl_pw_multi_aff_product(copy(), pma2.release());
16606 return manage(res);
16607}
16608
16609isl::pw_multi_aff pw_multi_aff::product(const isl::multi_aff &pma2) const
16610{
16611 return this->product(isl::pw_multi_aff(pma2));
16612}
16613
16614isl::pw_multi_aff pw_multi_aff::product(const isl::pw_aff &pma2) const
16615{
16616 return this->product(isl::pw_multi_aff(pma2));
16617}
16618
16620{
16621 auto res = isl_pw_multi_aff_project_out_map(space.release(), static_cast<enum isl_dim_type>(type), first, n);
16622 return manage(res);
16623}
16624
16626{
16627 return isl::multi_pw_aff(*this).pullback(mpa2);
16628}
16629
16631{
16632 auto res = isl_pw_multi_aff_pullback_multi_aff(copy(), ma.release());
16633 return manage(res);
16634}
16635
16636isl::pw_multi_aff pw_multi_aff::pullback(isl::pw_multi_aff pma2) const
16637{
16639 return manage(res);
16640}
16641
16642isl::union_pw_multi_aff pw_multi_aff::pullback(const isl::union_pw_multi_aff &upma2) const
16643{
16644 return isl::union_pw_multi_aff(*this).pullback(upma2);
16645}
16646
16647isl::pw_multi_aff_list pw_multi_aff::pw_multi_aff_list() const
16648{
16649 return isl::union_pw_multi_aff(*this).pw_multi_aff_list();
16650}
16651
16652isl::pw_multi_aff pw_multi_aff::range_factor_domain() const
16653{
16655 return manage(res);
16656}
16657
16658isl::pw_multi_aff pw_multi_aff::range_factor_range() const
16659{
16661 return manage(res);
16662}
16663
16664isl::pw_multi_aff pw_multi_aff::range_map(isl::space space)
16665{
16666 auto res = isl_pw_multi_aff_range_map(space.release());
16667 return manage(res);
16668}
16669
16670isl::multi_pw_aff pw_multi_aff::range_product(const isl::multi_pw_aff &multi2) const
16671{
16672 return isl::multi_pw_aff(*this).range_product(multi2);
16673}
16674
16675isl::multi_union_pw_aff pw_multi_aff::range_product(const isl::multi_union_pw_aff &multi2) const
16676{
16677 return isl::multi_pw_aff(*this).range_product(multi2);
16678}
16679
16680isl::pw_multi_aff pw_multi_aff::range_product(isl::pw_multi_aff pma2) const
16681{
16683 return manage(res);
16684}
16685
16686isl::union_pw_multi_aff pw_multi_aff::range_product(const isl::union_pw_multi_aff &upma2) const
16687{
16688 return isl::union_pw_multi_aff(*this).range_product(upma2);
16689}
16690
16691isl::pw_multi_aff pw_multi_aff::range_product(const isl::multi_aff &pma2) const
16692{
16693 return this->range_product(isl::pw_multi_aff(pma2));
16694}
16695
16696isl::pw_multi_aff pw_multi_aff::range_product(const isl::pw_aff &pma2) const
16697{
16698 return this->range_product(isl::pw_multi_aff(pma2));
16699}
16700
16701isl::id pw_multi_aff::range_tuple_id() const
16702{
16704 return manage(res);
16705}
16706
16708{
16709 return range_tuple_id();
16710}
16711
16712isl::multi_pw_aff pw_multi_aff::reset_range_tuple_id() const
16713{
16714 return isl::multi_pw_aff(*this).reset_range_tuple_id();
16715}
16716
16718{
16719 return isl::multi_pw_aff(*this).reset_tuple_id(type);
16720}
16721
16723{
16724 return isl::multi_pw_aff(*this).scale(mv);
16725}
16726
16728{
16730 return manage(res);
16731}
16732
16734{
16735 return this->scale(isl::val(ctx(), v));
16736}
16737
16739{
16740 return isl::multi_pw_aff(*this).scale_down(mv);
16741}
16742
16744{
16746 return manage(res);
16747}
16748
16750{
16751 return this->scale_down(isl::val(ctx(), v));
16752}
16753
16754isl::multi_pw_aff pw_multi_aff::set_at(int pos, const isl::pw_aff &el) const
16755{
16756 return isl::multi_pw_aff(*this).set_at(pos, el);
16757}
16758
16759isl::multi_union_pw_aff pw_multi_aff::set_at(int pos, const isl::union_pw_aff &el) const
16760{
16761 return isl::multi_pw_aff(*this).set_at(pos, el);
16762}
16763
16765{
16766 return isl::multi_pw_aff(*this).set_pw_aff(pos, el);
16767}
16768
16770{
16771 auto res = isl_pw_multi_aff_set_pw_aff(copy(), pos, pa.release());
16772 return manage(res);
16773}
16774
16776{
16778 return manage(res);
16779}
16780
16781isl::pw_multi_aff pw_multi_aff::set_range_tuple(const std::string &id) const
16782{
16783 return this->set_range_tuple(isl::id(ctx(), id));
16784}
16785
16787{
16788 return isl::multi_pw_aff(*this).set_union_pw_aff(pos, el);
16789}
16790
16791class size pw_multi_aff::size() const
16792{
16793 return isl::multi_pw_aff(*this).size();
16794}
16795
16797{
16799 return manage(res);
16800}
16801
16802isl::space pw_multi_aff::get_space() const
16803{
16804 return space();
16805}
16806
16807isl::multi_pw_aff pw_multi_aff::sub(const isl::multi_pw_aff &multi2) const
16808{
16809 return isl::multi_pw_aff(*this).sub(multi2);
16810}
16811
16812isl::multi_union_pw_aff pw_multi_aff::sub(const isl::multi_union_pw_aff &multi2) const
16813{
16814 return isl::multi_pw_aff(*this).sub(multi2);
16815}
16816
16817isl::pw_multi_aff pw_multi_aff::sub(isl::pw_multi_aff pma2) const
16818{
16819 auto res = isl_pw_multi_aff_sub(copy(), pma2.release());
16820 return manage(res);
16821}
16822
16823isl::union_pw_multi_aff pw_multi_aff::sub(const isl::union_pw_multi_aff &upma2) const
16824{
16825 return isl::union_pw_multi_aff(*this).sub(upma2);
16826}
16827
16828isl::pw_multi_aff pw_multi_aff::sub(const isl::multi_aff &pma2) const
16829{
16830 return this->sub(isl::pw_multi_aff(pma2));
16831}
16832
16833isl::pw_multi_aff pw_multi_aff::sub(const isl::pw_aff &pma2) const
16834{
16835 return this->sub(isl::pw_multi_aff(pma2));
16836}
16837
16838isl::pw_multi_aff pw_multi_aff::subtract_domain(isl::set set) const
16839{
16840 auto res = isl_pw_multi_aff_subtract_domain(copy(), set.release());
16841 return manage(res);
16842}
16843
16844isl::union_pw_multi_aff pw_multi_aff::subtract_domain(const isl::space &space) const
16845{
16846 return isl::union_pw_multi_aff(*this).subtract_domain(space);
16847}
16848
16849isl::union_pw_multi_aff pw_multi_aff::subtract_domain(const isl::union_set &uset) const
16850{
16851 return isl::union_pw_multi_aff(*this).subtract_domain(uset);
16852}
16853
16854isl::pw_multi_aff pw_multi_aff::subtract_domain(const isl::basic_set &set) const
16855{
16856 return this->subtract_domain(isl::set(set));
16857}
16858
16859isl::pw_multi_aff pw_multi_aff::subtract_domain(const isl::point &set) const
16860{
16861 return this->subtract_domain(isl::set(set));
16862}
16863
16864isl::pw_multi_aff_list pw_multi_aff::to_list() const
16865{
16866 auto res = isl_pw_multi_aff_to_list(copy());
16867 return manage(res);
16868}
16869
16870isl::multi_pw_aff pw_multi_aff::to_multi_pw_aff() const
16871{
16873 return manage(res);
16874}
16875
16876isl::union_pw_multi_aff pw_multi_aff::to_union_pw_multi_aff() const
16877{
16879 return manage(res);
16880}
16881
16883{
16884 auto res = isl_pw_multi_aff_get_tuple_id(get(), static_cast<enum isl_dim_type>(type));
16885 return manage(res);
16886}
16887
16889{
16890 return tuple_id(type);
16891}
16892
16894{
16896}
16897
16899{
16900 return isl::multi_pw_aff(*this).union_add(mpa2);
16901}
16902
16903isl::multi_union_pw_aff pw_multi_aff::union_add(const isl::multi_union_pw_aff &mupa2) const
16904{
16905 return isl::multi_pw_aff(*this).union_add(mupa2);
16906}
16907
16908isl::pw_multi_aff pw_multi_aff::union_add(isl::pw_multi_aff pma2) const
16909{
16910 auto res = isl_pw_multi_aff_union_add(copy(), pma2.release());
16911 return manage(res);
16912}
16913
16914isl::union_pw_multi_aff pw_multi_aff::union_add(const isl::union_pw_multi_aff &upma2) const
16915{
16916 return isl::union_pw_multi_aff(*this).union_add(upma2);
16917}
16918
16919isl::pw_multi_aff pw_multi_aff::union_add(const isl::multi_aff &pma2) const
16920{
16921 return this->union_add(isl::pw_multi_aff(pma2));
16922}
16923
16924isl::pw_multi_aff pw_multi_aff::union_add(const isl::pw_aff &pma2) const
16925{
16926 return this->union_add(isl::pw_multi_aff(pma2));
16927}
16928
16929isl::pw_multi_aff pw_multi_aff::zero(isl::space space)
16930{
16931 auto res = isl_pw_multi_aff_zero(space.release());
16932 return manage(res);
16933}
16934
16935inline std::ostream &operator<<(std::ostream &os, const pw_multi_aff &obj)
16936{
16937 char *str = isl_pw_multi_aff_to_str(obj.get());
16938 if (!str) {
16939 os.setstate(std::ios_base::badbit);
16940 return os;
16941 }
16942 os << str;
16943 free(str);
16944 return os;
16945}
16946
16947// implementations for isl::pw_multi_aff_list
16948pw_multi_aff_list manage(__isl_take isl_pw_multi_aff_list *ptr) {
16949 return pw_multi_aff_list(ptr);
16950}
16951pw_multi_aff_list manage_copy(__isl_keep isl_pw_multi_aff_list *ptr) {
16952 ptr = isl_pw_multi_aff_list_copy(ptr);
16953 return pw_multi_aff_list(ptr);
16954}
16955
16957 : ptr(nullptr) {}
16958
16960 : ptr(nullptr)
16961{
16962 ptr = obj.copy();
16963}
16964
16965pw_multi_aff_list::pw_multi_aff_list(__isl_take isl_pw_multi_aff_list *ptr)
16966 : ptr(ptr) {}
16967
16969{
16970 auto res = isl_pw_multi_aff_list_alloc(ctx.release(), n);
16971 ptr = res;
16972}
16973
16974pw_multi_aff_list::pw_multi_aff_list(isl::pw_multi_aff el)
16975{
16976 auto res = isl_pw_multi_aff_list_from_pw_multi_aff(el.release());
16977 ptr = res;
16978}
16979
16980pw_multi_aff_list::pw_multi_aff_list(isl::ctx ctx, const std::string &str)
16981{
16982 auto res = isl_pw_multi_aff_list_read_from_str(ctx.release(), str.c_str());
16983 ptr = res;
16984}
16985
16987 std::swap(this->ptr, obj.ptr);
16988 return *this;
16989}
16990
16992 if (ptr)
16993 isl_pw_multi_aff_list_free(ptr);
16994}
16995
16996__isl_give isl_pw_multi_aff_list *pw_multi_aff_list::copy() const & {
16997 return isl_pw_multi_aff_list_copy(ptr);
16998}
16999
17000__isl_keep isl_pw_multi_aff_list *pw_multi_aff_list::get() const {
17001 return ptr;
17002}
17003
17004__isl_give isl_pw_multi_aff_list *pw_multi_aff_list::release() {
17005 isl_pw_multi_aff_list *tmp = ptr;
17006 ptr = nullptr;
17007 return tmp;
17008}
17009
17010bool pw_multi_aff_list::is_null() const {
17011 return ptr == nullptr;
17012}
17013
17014isl::ctx pw_multi_aff_list::ctx() const {
17015 return isl::ctx(isl_pw_multi_aff_list_get_ctx(ptr));
17016}
17017
17018isl::pw_multi_aff_list pw_multi_aff_list::add(isl::pw_multi_aff el) const
17019{
17020 auto res = isl_pw_multi_aff_list_add(copy(), el.release());
17021 return manage(res);
17022}
17023
17024isl::pw_multi_aff pw_multi_aff_list::at(int index) const
17025{
17026 auto res = isl_pw_multi_aff_list_get_at(get(), index);
17027 return manage(res);
17028}
17029
17030isl::pw_multi_aff pw_multi_aff_list::get_at(int index) const
17031{
17032 return at(index);
17033}
17034
17035isl::pw_multi_aff_list pw_multi_aff_list::clear() const
17036{
17037 auto res = isl_pw_multi_aff_list_clear(copy());
17038 return manage(res);
17039}
17040
17041isl::pw_multi_aff_list pw_multi_aff_list::concat(isl::pw_multi_aff_list list2) const
17042{
17043 auto res = isl_pw_multi_aff_list_concat(copy(), list2.release());
17044 return manage(res);
17045}
17046
17047isl::pw_multi_aff_list pw_multi_aff_list::drop(unsigned int first, unsigned int n) const
17048{
17049 auto res = isl_pw_multi_aff_list_drop(copy(), first, n);
17050 return manage(res);
17051}
17052
17054{
17055 struct fn_data {
17056 std::function<stat(isl::pw_multi_aff)> func;
17057 } fn_data = { fn };
17058 auto fn_lambda = [](isl_pw_multi_aff *arg_0, void *arg_1) -> isl_stat {
17059 auto *data = static_cast<struct fn_data *>(arg_1);
17060 auto ret = (data->func)(manage(arg_0));
17061 return ret.release();
17062 };
17063 auto res = isl_pw_multi_aff_list_foreach(get(), fn_lambda, &fn_data);
17064 return manage(res);
17065}
17066
17068{
17069 auto res = isl_pw_multi_aff_list_insert(copy(), pos, el.release());
17070 return manage(res);
17071}
17072
17073class size pw_multi_aff_list::size() const
17074{
17075 auto res = isl_pw_multi_aff_list_size(get());
17076 return manage(res);
17077}
17078
17079inline std::ostream &operator<<(std::ostream &os, const pw_multi_aff_list &obj)
17080{
17081 char *str = isl_pw_multi_aff_list_to_str(obj.get());
17082 if (!str) {
17083 os.setstate(std::ios_base::badbit);
17084 return os;
17085 }
17086 os << str;
17087 free(str);
17088 return os;
17089}
17090
17091// implementations for isl::schedule
17093 return schedule(ptr);
17094}
17096 ptr = isl_schedule_copy(ptr);
17097 return schedule(ptr);
17098}
17099
17101 : ptr(nullptr) {}
17102
17104 : ptr(nullptr)
17105{
17106 ptr = obj.copy();
17107}
17108
17110 : ptr(ptr) {}
17111
17112schedule::schedule(isl::ctx ctx, const std::string &str)
17113{
17114 auto res = isl_schedule_read_from_str(ctx.release(), str.c_str());
17115 ptr = res;
17116}
17117
17119 std::swap(this->ptr, obj.ptr);
17120 return *this;
17121}
17122
17124 if (ptr)
17126}
17127
17129 return isl_schedule_copy(ptr);
17130}
17131
17133 return ptr;
17134}
17135
17137 isl_schedule *tmp = ptr;
17138 ptr = nullptr;
17139 return tmp;
17140}
17141
17142bool schedule::is_null() const {
17143 return ptr == nullptr;
17144}
17145
17146isl::ctx schedule::ctx() const {
17147 return isl::ctx(isl_schedule_get_ctx(ptr));
17148}
17149
17155
17157{
17159 return manage(res);
17160}
17161
17163{
17164 return domain();
17165}
17166
17167isl::schedule schedule::from_domain(isl::union_set domain)
17168{
17169 auto res = isl_schedule_from_domain(domain.release());
17170 return manage(res);
17171}
17172
17178
17184
17190
17192{
17193 auto res = isl_schedule_get_map(get());
17194 return manage(res);
17195}
17196
17198{
17199 return map();
17200}
17201
17202isl::schedule schedule::pullback(isl::union_pw_multi_aff upma) const
17203{
17205 return manage(res);
17206}
17207
17208isl::schedule_node schedule::root() const
17209{
17210 auto res = isl_schedule_get_root(get());
17211 return manage(res);
17212}
17213
17214isl::schedule_node schedule::get_root() const
17215{
17216 return root();
17217}
17218
17220{
17221 auto res = isl_schedule_sequence(copy(), schedule2.release());
17222 return manage(res);
17223}
17224
17225inline std::ostream &operator<<(std::ostream &os, const schedule &obj)
17226{
17227 char *str = isl_schedule_to_str(obj.get());
17228 if (!str) {
17229 os.setstate(std::ios_base::badbit);
17230 return os;
17231 }
17232 os << str;
17233 free(str);
17234 return os;
17235}
17236
17237// implementations for isl::schedule_constraints
17239 return schedule_constraints(ptr);
17240}
17243 return schedule_constraints(ptr);
17244}
17245
17247 : ptr(nullptr) {}
17248
17250 : ptr(nullptr)
17251{
17252 ptr = obj.copy();
17253}
17254
17256 : ptr(ptr) {}
17257
17258schedule_constraints::schedule_constraints(isl::ctx ctx, const std::string &str)
17259{
17260 auto res = isl_schedule_constraints_read_from_str(ctx.release(), str.c_str());
17261 ptr = res;
17262}
17263
17265 std::swap(this->ptr, obj.ptr);
17266 return *this;
17267}
17268
17270 if (ptr)
17272}
17273
17276}
17277
17279 return ptr;
17280}
17281
17284 ptr = nullptr;
17285 return tmp;
17286}
17287
17288bool schedule_constraints::is_null() const {
17289 return ptr == nullptr;
17290}
17291
17292isl::ctx schedule_constraints::ctx() const {
17293 return isl::ctx(isl_schedule_constraints_get_ctx(ptr));
17294}
17295
17296isl::union_map schedule_constraints::coincidence() const
17297{
17299 return manage(res);
17300}
17301
17302isl::union_map schedule_constraints::get_coincidence() const
17303{
17304 return coincidence();
17305}
17306
17307isl::schedule schedule_constraints::compute_schedule() const
17308{
17310 return manage(res);
17311}
17312
17313isl::union_map schedule_constraints::conditional_validity() const
17314{
17316 return manage(res);
17317}
17318
17320{
17321 return conditional_validity();
17322}
17323
17325{
17327 return manage(res);
17328}
17329
17331{
17333}
17334
17336{
17338 return manage(res);
17339}
17340
17342{
17343 return context();
17344}
17345
17346isl::union_set schedule_constraints::domain() const
17347{
17349 return manage(res);
17350}
17351
17352isl::union_set schedule_constraints::get_domain() const
17353{
17354 return domain();
17355}
17356
17357isl::schedule_constraints schedule_constraints::on_domain(isl::union_set domain)
17358{
17360 return manage(res);
17361}
17362
17363isl::union_map schedule_constraints::proximity() const
17364{
17366 return manage(res);
17367}
17368
17369isl::union_map schedule_constraints::get_proximity() const
17370{
17371 return proximity();
17372}
17373
17374isl::schedule_constraints schedule_constraints::set_coincidence(isl::union_map coincidence) const
17375{
17377 return manage(res);
17378}
17379
17380isl::schedule_constraints schedule_constraints::set_conditional_validity(isl::union_map condition, isl::union_map validity) const
17381{
17383 return manage(res);
17384}
17385
17386isl::schedule_constraints schedule_constraints::set_context(isl::set context) const
17387{
17389 return manage(res);
17390}
17391
17392isl::schedule_constraints schedule_constraints::set_proximity(isl::union_map proximity) const
17393{
17395 return manage(res);
17396}
17397
17398isl::schedule_constraints schedule_constraints::set_validity(isl::union_map validity) const
17399{
17401 return manage(res);
17402}
17403
17404isl::union_map schedule_constraints::validity() const
17405{
17407 return manage(res);
17408}
17409
17410isl::union_map schedule_constraints::get_validity() const
17411{
17412 return validity();
17413}
17414
17415inline std::ostream &operator<<(std::ostream &os, const schedule_constraints &obj)
17416{
17418 if (!str) {
17419 os.setstate(std::ios_base::badbit);
17420 return os;
17421 }
17422 os << str;
17423 free(str);
17424 return os;
17425}
17426
17427// implementations for isl::schedule_node
17429 return schedule_node(ptr);
17430}
17432 ptr = isl_schedule_node_copy(ptr);
17433 return schedule_node(ptr);
17434}
17435
17437 : ptr(nullptr) {}
17438
17440 : ptr(nullptr)
17441{
17442 ptr = obj.copy();
17443}
17444
17446 : ptr(ptr) {}
17447
17449 std::swap(this->ptr, obj.ptr);
17450 return *this;
17451}
17452
17454 if (ptr)
17456}
17457
17460}
17461
17463 return ptr;
17464}
17465
17467 isl_schedule_node *tmp = ptr;
17468 ptr = nullptr;
17469 return tmp;
17470}
17471
17472bool schedule_node::is_null() const {
17473 return ptr == nullptr;
17474}
17475
17476template <typename T, typename>
17477boolean schedule_node::isa_type(T subtype) const
17478{
17479 if (is_null())
17480 return boolean();
17481 return isl_schedule_node_get_type(get()) == subtype;
17482}
17483template <class T>
17484boolean schedule_node::isa() const
17485{
17486 return isa_type<decltype(T::type)>(T::type);
17487}
17488template <class T>
17489T schedule_node::as() const
17490{
17491 if (isa<T>().is_false())
17492 isl_die(ctx().get(), isl_error_invalid, "not an object of the requested subtype", return T());
17493 return T(copy());
17494}
17495
17496isl::ctx schedule_node::ctx() const {
17497 return isl::ctx(isl_schedule_node_get_ctx(ptr));
17498}
17499
17500isl::schedule_node schedule_node::ancestor(int generation) const
17501{
17502 auto res = isl_schedule_node_ancestor(copy(), generation);
17503 return manage(res);
17504}
17505
17506class size schedule_node::ancestor_child_position(const isl::schedule_node &ancestor) const
17507{
17509 return manage(res);
17510}
17511
17512class size schedule_node::get_ancestor_child_position(const isl::schedule_node &ancestor) const
17513{
17515}
17516
17517isl::schedule_node schedule_node::child(int pos) const
17518{
17520 return manage(res);
17521}
17522
17524{
17526 return manage(res);
17527}
17528
17530{
17531 return child_position();
17532}
17533
17535{
17537 return manage(res);
17538}
17539
17541{
17542 return domain();
17543}
17544
17545boolean schedule_node::every_descendant(const std::function<boolean(isl::schedule_node)> &test) const
17546{
17547 struct test_data {
17548 std::function<boolean(isl::schedule_node)> func;
17549 } test_data = { test };
17550 auto test_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_bool {
17551 auto *data = static_cast<struct test_data *>(arg_1);
17552 auto ret = (data->func)(manage_copy(arg_0));
17553 return ret.release();
17554 };
17555 auto res = isl_schedule_node_every_descendant(get(), test_lambda, &test_data);
17556 return manage(res);
17557}
17558
17560{
17562 return manage(res);
17563}
17564
17566{
17567 struct fn_data {
17568 std::function<stat(isl::schedule_node)> func;
17569 } fn_data = { fn };
17570 auto fn_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_stat {
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_ancestor_top_down(get(), fn_lambda, &fn_data);
17576 return manage(res);
17577}
17578
17580{
17581 struct fn_data {
17582 std::function<boolean(isl::schedule_node)> func;
17583 } fn_data = { fn };
17584 auto fn_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_bool {
17585 auto *data = static_cast<struct fn_data *>(arg_1);
17586 auto ret = (data->func)(manage_copy(arg_0));
17587 return ret.release();
17588 };
17589 auto res = isl_schedule_node_foreach_descendant_top_down(get(), fn_lambda, &fn_data);
17590 return manage(res);
17591}
17592
17594{
17595 auto res = isl_schedule_node_from_domain(domain.release());
17596 return manage(res);
17597}
17598
17600{
17601 auto res = isl_schedule_node_from_extension(extension.release());
17602 return manage(res);
17603}
17604
17605isl::schedule_node schedule_node::graft_after(isl::schedule_node graft) const
17606{
17607 auto res = isl_schedule_node_graft_after(copy(), graft.release());
17608 return manage(res);
17609}
17610
17611isl::schedule_node schedule_node::graft_before(isl::schedule_node graft) const
17612{
17614 return manage(res);
17615}
17616
17617boolean schedule_node::has_children() const
17618{
17620 return manage(res);
17621}
17622
17623boolean schedule_node::has_next_sibling() const
17624{
17626 return manage(res);
17627}
17628
17629boolean schedule_node::has_parent() const
17630{
17632 return manage(res);
17633}
17634
17636{
17638 return manage(res);
17639}
17640
17641isl::schedule_node schedule_node::insert_context(isl::set context) const
17642{
17643 auto res = isl_schedule_node_insert_context(copy(), context.release());
17644 return manage(res);
17645}
17646
17647isl::schedule_node schedule_node::insert_filter(isl::union_set filter) const
17648{
17649 auto res = isl_schedule_node_insert_filter(copy(), filter.release());
17650 return manage(res);
17651}
17652
17653isl::schedule_node schedule_node::insert_guard(isl::set context) const
17654{
17655 auto res = isl_schedule_node_insert_guard(copy(), context.release());
17656 return manage(res);
17657}
17658
17659isl::schedule_node schedule_node::insert_mark(isl::id mark) const
17660{
17662 return manage(res);
17663}
17664
17665isl::schedule_node schedule_node::insert_mark(const std::string &mark) const
17666{
17667 return this->insert_mark(isl::id(ctx(), mark));
17668}
17669
17670isl::schedule_node schedule_node::insert_partial_schedule(isl::multi_union_pw_aff schedule) const
17671{
17673 return manage(res);
17674}
17675
17676isl::schedule_node schedule_node::insert_sequence(isl::union_set_list filters) const
17677{
17679 return manage(res);
17680}
17681
17682isl::schedule_node schedule_node::insert_set(isl::union_set_list filters) const
17683{
17684 auto res = isl_schedule_node_insert_set(copy(), filters.release());
17685 return manage(res);
17686}
17687
17688boolean schedule_node::is_equal(const isl::schedule_node &node2) const
17689{
17690 auto res = isl_schedule_node_is_equal(get(), node2.get());
17691 return manage(res);
17692}
17693
17695{
17697 return manage(res);
17698}
17699
17700isl::schedule_node schedule_node::map_descendant_bottom_up(const std::function<isl::schedule_node(isl::schedule_node)> &fn) const
17701{
17702 struct fn_data {
17703 std::function<isl::schedule_node(isl::schedule_node)> func;
17704 } fn_data = { fn };
17705 auto fn_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_schedule_node * {
17706 auto *data = static_cast<struct fn_data *>(arg_1);
17707 auto ret = (data->func)(manage(arg_0));
17708 return ret.release();
17709 };
17710 auto res = isl_schedule_node_map_descendant_bottom_up(copy(), fn_lambda, &fn_data);
17711 return manage(res);
17712}
17713
17714class size schedule_node::n_children() const
17715{
17716 auto res = isl_schedule_node_n_children(get());
17717 return manage(res);
17718}
17719
17720isl::schedule_node schedule_node::next_sibling() const
17721{
17723 return manage(res);
17724}
17725
17726isl::schedule_node schedule_node::order_after(isl::union_set filter) const
17727{
17728 auto res = isl_schedule_node_order_after(copy(), filter.release());
17729 return manage(res);
17730}
17731
17732isl::schedule_node schedule_node::order_before(isl::union_set filter) const
17733{
17734 auto res = isl_schedule_node_order_before(copy(), filter.release());
17735 return manage(res);
17736}
17737
17738isl::schedule_node schedule_node::parent() const
17739{
17741 return manage(res);
17742}
17743
17744isl::multi_union_pw_aff schedule_node::prefix_schedule_multi_union_pw_aff() const
17745{
17747 return manage(res);
17748}
17749
17750isl::multi_union_pw_aff schedule_node::get_prefix_schedule_multi_union_pw_aff() const
17751{
17753}
17754
17760
17765
17767{
17769 return manage(res);
17770}
17771
17773{
17775}
17776
17777isl::union_pw_multi_aff schedule_node::prefix_schedule_union_pw_multi_aff() const
17778{
17780 return manage(res);
17781}
17782
17783isl::union_pw_multi_aff schedule_node::get_prefix_schedule_union_pw_multi_aff() const
17784{
17786}
17787
17788isl::schedule_node schedule_node::previous_sibling() const
17789{
17791 return manage(res);
17792}
17793
17794isl::schedule_node schedule_node::root() const
17795{
17797 return manage(res);
17798}
17799
17800isl::schedule schedule_node::schedule() const
17801{
17803 return manage(res);
17804}
17805
17806isl::schedule schedule_node::get_schedule() const
17807{
17808 return schedule();
17809}
17810
17812{
17814 return manage(res);
17815}
17816
17818{
17819 return schedule_depth();
17820}
17821
17823{
17825 return manage(res);
17826}
17827
17829{
17830 return shared_ancestor(node2);
17831}
17832
17833class size schedule_node::tree_depth() const
17834{
17836 return manage(res);
17837}
17838
17839class size schedule_node::get_tree_depth() const
17840{
17841 return tree_depth();
17842}
17843
17849
17854
17855inline std::ostream &operator<<(std::ostream &os, const schedule_node &obj)
17856{
17857 char *str = isl_schedule_node_to_str(obj.get());
17858 if (!str) {
17859 os.setstate(std::ios_base::badbit);
17860 return os;
17861 }
17862 os << str;
17863 free(str);
17864 return os;
17865}
17866
17867// implementations for isl::schedule_node_band
17869 : schedule_node() {}
17870
17873{
17874}
17875
17877 : schedule_node(ptr) {}
17878
17880 std::swap(this->ptr, obj.ptr);
17881 return *this;
17882}
17883
17884isl::ctx schedule_node_band::ctx() const {
17885 return isl::ctx(isl_schedule_node_get_ctx(ptr));
17886}
17887
17888isl::union_set schedule_node_band::ast_build_options() const
17889{
17891 return manage(res);
17892}
17893
17894isl::union_set schedule_node_band::get_ast_build_options() const
17895{
17896 return ast_build_options();
17897}
17898
17900{
17902 return manage(res);
17903}
17904
17906{
17907 return ast_isolate_option();
17908}
17909
17911{
17913 return manage(res);
17914}
17915
17917{
17919 return manage(res).as<schedule_node_band>();
17920}
17921
17922schedule_node_band schedule_node_band::mod(isl::multi_val mv) const
17923{
17925 return manage(res).as<schedule_node_band>();
17926}
17927
17928class size schedule_node_band::n_member() const
17929{
17931 return manage(res);
17932}
17933
17934isl::multi_union_pw_aff schedule_node_band::partial_schedule() const
17935{
17937 return manage(res);
17938}
17939
17940isl::multi_union_pw_aff schedule_node_band::get_partial_schedule() const
17941{
17942 return partial_schedule();
17943}
17944
17945boolean schedule_node_band::permutable() const
17946{
17948 return manage(res);
17949}
17950
17952{
17953 return permutable();
17954}
17955
17956schedule_node_band schedule_node_band::scale(isl::multi_val mv) const
17957{
17959 return manage(res).as<schedule_node_band>();
17960}
17961
17963{
17965 return manage(res).as<schedule_node_band>();
17966}
17967
17969{
17971 return manage(res).as<schedule_node_band>();
17972}
17973
17975{
17977 return manage(res).as<schedule_node_band>();
17978}
17979
17980schedule_node_band schedule_node_band::shift(isl::multi_union_pw_aff shift) const
17981{
17982 auto res = isl_schedule_node_band_shift(copy(), shift.release());
17983 return manage(res).as<schedule_node_band>();
17984}
17985
17987{
17989 return manage(res).as<schedule_node_band>();
17990}
17991
17993{
17994 auto res = isl_schedule_node_band_tile(copy(), sizes.release());
17995 return manage(res).as<schedule_node_band>();
17996}
17997
17999{
18001 return manage(res).as<schedule_node_band>();
18002}
18003
18005{
18007 return manage(res).as<schedule_node_band>();
18008}
18009
18011{
18013 return manage(res).as<schedule_node_band>();
18014}
18015
18017{
18019 return manage(res).as<schedule_node_band>();
18020}
18021
18022inline std::ostream &operator<<(std::ostream &os, const schedule_node_band &obj)
18023{
18024 char *str = isl_schedule_node_to_str(obj.get());
18025 if (!str) {
18026 os.setstate(std::ios_base::badbit);
18027 return os;
18028 }
18029 os << str;
18030 free(str);
18031 return os;
18032}
18033
18034// implementations for isl::schedule_node_context
18036 : schedule_node() {}
18037
18040{
18041}
18042
18044 : schedule_node(ptr) {}
18045
18047 std::swap(this->ptr, obj.ptr);
18048 return *this;
18049}
18050
18051isl::ctx schedule_node_context::ctx() const {
18052 return isl::ctx(isl_schedule_node_get_ctx(ptr));
18053}
18054
18056{
18058 return manage(res);
18059}
18060
18062{
18063 return context();
18064}
18065
18066inline std::ostream &operator<<(std::ostream &os, const schedule_node_context &obj)
18067{
18068 char *str = isl_schedule_node_to_str(obj.get());
18069 if (!str) {
18070 os.setstate(std::ios_base::badbit);
18071 return os;
18072 }
18073 os << str;
18074 free(str);
18075 return os;
18076}
18077
18078// implementations for isl::schedule_node_domain
18080 : schedule_node() {}
18081
18084{
18085}
18086
18088 : schedule_node(ptr) {}
18089
18091 std::swap(this->ptr, obj.ptr);
18092 return *this;
18093}
18094
18095isl::ctx schedule_node_domain::ctx() const {
18096 return isl::ctx(isl_schedule_node_get_ctx(ptr));
18097}
18098
18099isl::union_set schedule_node_domain::domain() const
18100{
18102 return manage(res);
18103}
18104
18105isl::union_set schedule_node_domain::get_domain() const
18106{
18107 return domain();
18108}
18109
18110inline std::ostream &operator<<(std::ostream &os, const schedule_node_domain &obj)
18111{
18112 char *str = isl_schedule_node_to_str(obj.get());
18113 if (!str) {
18114 os.setstate(std::ios_base::badbit);
18115 return os;
18116 }
18117 os << str;
18118 free(str);
18119 return os;
18120}
18121
18122// implementations for isl::schedule_node_expansion
18124 : schedule_node() {}
18125
18128{
18129}
18130
18132 : schedule_node(ptr) {}
18133
18135 std::swap(this->ptr, obj.ptr);
18136 return *this;
18137}
18138
18139isl::ctx schedule_node_expansion::ctx() const {
18140 return isl::ctx(isl_schedule_node_get_ctx(ptr));
18141}
18142
18143isl::union_pw_multi_aff schedule_node_expansion::contraction() const
18144{
18146 return manage(res);
18147}
18148
18149isl::union_pw_multi_aff schedule_node_expansion::get_contraction() const
18150{
18151 return contraction();
18152}
18153
18154isl::union_map schedule_node_expansion::expansion() const
18155{
18157 return manage(res);
18158}
18159
18160isl::union_map schedule_node_expansion::get_expansion() const
18161{
18162 return expansion();
18163}
18164
18165inline std::ostream &operator<<(std::ostream &os, const schedule_node_expansion &obj)
18166{
18167 char *str = isl_schedule_node_to_str(obj.get());
18168 if (!str) {
18169 os.setstate(std::ios_base::badbit);
18170 return os;
18171 }
18172 os << str;
18173 free(str);
18174 return os;
18175}
18176
18177// implementations for isl::schedule_node_extension
18179 : schedule_node() {}
18180
18183{
18184}
18185
18187 : schedule_node(ptr) {}
18188
18190 std::swap(this->ptr, obj.ptr);
18191 return *this;
18192}
18193
18194isl::ctx schedule_node_extension::ctx() const {
18195 return isl::ctx(isl_schedule_node_get_ctx(ptr));
18196}
18197
18198isl::union_map schedule_node_extension::extension() const
18199{
18201 return manage(res);
18202}
18203
18204isl::union_map schedule_node_extension::get_extension() const
18205{
18206 return extension();
18207}
18208
18209inline std::ostream &operator<<(std::ostream &os, const schedule_node_extension &obj)
18210{
18211 char *str = isl_schedule_node_to_str(obj.get());
18212 if (!str) {
18213 os.setstate(std::ios_base::badbit);
18214 return os;
18215 }
18216 os << str;
18217 free(str);
18218 return os;
18219}
18220
18221// implementations for isl::schedule_node_filter
18223 : schedule_node() {}
18224
18227{
18228}
18229
18231 : schedule_node(ptr) {}
18232
18234 std::swap(this->ptr, obj.ptr);
18235 return *this;
18236}
18237
18238isl::ctx schedule_node_filter::ctx() const {
18239 return isl::ctx(isl_schedule_node_get_ctx(ptr));
18240}
18241
18242isl::union_set schedule_node_filter::filter() const
18243{
18245 return manage(res);
18246}
18247
18248isl::union_set schedule_node_filter::get_filter() const
18249{
18250 return filter();
18251}
18252
18253inline std::ostream &operator<<(std::ostream &os, const schedule_node_filter &obj)
18254{
18255 char *str = isl_schedule_node_to_str(obj.get());
18256 if (!str) {
18257 os.setstate(std::ios_base::badbit);
18258 return os;
18259 }
18260 os << str;
18261 free(str);
18262 return