Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /// These are automatically generated checked C++ bindings for isl.
  2. ///
  3. /// isl is a library for computing with integer sets and maps described by
  4. /// Presburger formulas. On top of this, isl provides various tools for
  5. /// polyhedral compilation, ranging from dependence analysis over scheduling
  6. /// to AST generation.
  7.  
  8. // clang-format off
  9.  
  10. #ifndef ISL_CPP_CHECKED
  11. #define ISL_CPP_CHECKED
  12.  
  13. #include <stdio.h>
  14. #include <stdlib.h>
  15. #include <isl/set.h>
  16.  
  17. #include <functional>
  18. #include <memory>
  19. #include <ostream>
  20. #include <string>
  21. #include <type_traits>
  22.  
  23. namespace isl {
  24.  
  25. #define ISLPP_STRINGIZE_(X) #X
  26. #define ISLPP_STRINGIZE(X) ISLPP_STRINGIZE_(X)
  27.  
  28. #define ISLPP_ASSERT(test, message)                          \
  29.   do {                                                       \
  30.     if (test)                                                \
  31.       break;                                                 \
  32.     fputs("Assertion \"" #test "\" failed at " __FILE__      \
  33.       ":" ISLPP_STRINGIZE(__LINE__) "\n  " message "\n",     \
  34.       stderr);                                               \
  35.     abort();                                                 \
  36.   } while (0)
  37.  
  38. /* Class used to check that isl::checked::boolean,
  39.  * isl::checked::stat and isl::checked::size values are checked for errors.
  40.  */
  41. struct checker {
  42.         bool checked = false;
  43.         ~checker() {
  44.                 //ISLPP_ASSERT(checked, "IMPLEMENTATION ERROR: Unchecked state");
  45.         }
  46. };
  47.  
  48. class boolean {
  49. private:
  50.   mutable std::shared_ptr<checker> check = std::make_shared<checker>();
  51.   isl_bool val;
  52.  
  53.   friend boolean manage(isl_bool val);
  54.   boolean(isl_bool val): val(val) {}
  55. public:
  56.   static boolean error() {
  57.     return boolean(isl_bool_error);
  58.   }
  59.   boolean()
  60.       : val(isl_bool_error) {}
  61.  
  62.   /* implicit */ boolean(bool val)
  63.       : val(val ? isl_bool_true : isl_bool_false) {}
  64.  
  65.   isl_bool release() {
  66.     auto tmp = val;
  67.     val = isl_bool_error;
  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)
  84.       val = isl_bool_false;
  85.     else if (val == isl_bool_false)
  86.       val = isl_bool_true;
  87.     return *this;
  88.   }
  89.  
  90.   boolean operator!() const {
  91.     return boolean(*this).negate();
  92.   }
  93. };
  94.  
  95. inline boolean manage(isl_bool val) {
  96.   return boolean(val);
  97. }
  98.  
  99. class ctx {
  100.   isl_ctx *ptr;
  101. public:
  102.   /* implicit */ ctx(isl_ctx *ctx)
  103.       : ptr(ctx) {}
  104.   isl_ctx *release() {
  105.     auto tmp = ptr;
  106.     ptr = nullptr;
  107.     return tmp;
  108.   }
  109.   isl_ctx *get() {
  110.     return ptr;
  111.   }
  112. };
  113.  
  114. /* Class encapsulating an isl_stat value.
  115.  */
  116. class stat {
  117. private:
  118.         mutable std::shared_ptr<checker> check = std::make_shared<checker>();
  119.         isl_stat val;
  120.  
  121.         friend stat manage(isl_stat val);
  122.         stat(isl_stat val) : val(val) {}
  123. public:
  124.         static stat ok() {
  125.                 return stat(isl_stat_ok);
  126.         }
  127.         static stat error() {
  128.                 return stat(isl_stat_error);
  129.         }
  130.         stat() : val(isl_stat_error) {}
  131.  
  132.         isl_stat release() {
  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.  
  147. inline stat manage(isl_stat val)
  148. {
  149.         return stat(val);
  150. }
  151.  
  152. /* Class encapsulating an isl_size value.
  153.  */
  154. class size {
  155. private:
  156.         mutable std::shared_ptr<checker> check = std::make_shared<checker>();
  157.         isl_size val;
  158.  
  159.         friend size manage(isl_size val);
  160.         size(isl_size val) : val(val) {}
  161. public:
  162.         size() : val(isl_size_error) {}
  163.  
  164.         isl_size release() {
  165.                 auto tmp = val;
  166.                 val = isl_size_error;
  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");
  179.                 ISLPP_ASSERT(!is_error(),
  180.                             "IMPLEMENTATION ERROR: Unhandled error state");
  181.                 return val;
  182.         }
  183. };
  184.  
  185. inline size manage(isl_size val)
  186. {
  187.         return size(val);
  188. }
  189.  
  190. enum class dim {
  191.   cst = isl_dim_cst,
  192.   param = isl_dim_param,
  193.   in = isl_dim_in,
  194.   out = isl_dim_out,
  195.   set = isl_dim_set,
  196.   div = isl_dim_div,
  197.   all = isl_dim_all
  198. };
  199.  
  200. } // namespace isl
  201. #include <isl/id.h>
  202. #include <isl/space.h>
  203. #include <isl/val.h>
  204. #include <isl/aff.h>
  205. #include <isl/set.h>
  206. #include <isl/map.h>
  207. #include <isl/ilp.h>
  208. #include <isl/constraint.h>
  209. #include <isl/union_set.h>
  210. #include <isl/union_map.h>
  211. #include <isl/flow.h>
  212. #include <isl/schedule.h>
  213. #include <isl/schedule_node.h>
  214. #include <isl/ast_build.h>
  215. #include <isl/fixed_box.h>
  216.  
  217. namespace isl {
  218.  
  219. // forward declarations
  220. class aff;
  221. class aff_list;
  222. class ast_build;
  223. class ast_expr;
  224. class ast_expr_id;
  225. class ast_expr_int;
  226. class ast_expr_op;
  227. class ast_expr_op_access;
  228. class ast_expr_op_add;
  229. class ast_expr_op_address_of;
  230. class ast_expr_op_and;
  231. class ast_expr_op_and_then;
  232. class ast_expr_op_call;
  233. class ast_expr_op_cond;
  234. class ast_expr_op_div;
  235. class ast_expr_op_eq;
  236. class ast_expr_op_fdiv_q;
  237. class ast_expr_op_ge;
  238. class ast_expr_op_gt;
  239. class ast_expr_op_le;
  240. class ast_expr_op_lt;
  241. class ast_expr_op_max;
  242. class ast_expr_op_member;
  243. class ast_expr_op_min;
  244. class ast_expr_op_minus;
  245. class ast_expr_op_mul;
  246. class ast_expr_op_or;
  247. class ast_expr_op_or_else;
  248. class ast_expr_op_pdiv_q;
  249. class ast_expr_op_pdiv_r;
  250. class ast_expr_op_select;
  251. class ast_expr_op_sub;
  252. class ast_expr_op_zdiv_r;
  253. class ast_node;
  254. class ast_node_block;
  255. class ast_node_for;
  256. class ast_node_if;
  257. class ast_node_list;
  258. class ast_node_mark;
  259. class ast_node_user;
  260. class basic_map;
  261. class basic_map_list;
  262. class basic_set;
  263. class basic_set_list;
  264. class constraint;
  265. class fixed_box;
  266. class id;
  267. class id_list;
  268. class id_to_ast_expr;
  269. class local_space;
  270. class map;
  271. class map_list;
  272. class multi_aff;
  273. class multi_id;
  274. class multi_pw_aff;
  275. class multi_union_pw_aff;
  276. class multi_val;
  277. class point;
  278. class pw_aff;
  279. class pw_aff_list;
  280. class pw_multi_aff;
  281. class pw_multi_aff_list;
  282. class schedule;
  283. class schedule_constraints;
  284. class schedule_node;
  285. class schedule_node_band;
  286. class schedule_node_context;
  287. class schedule_node_domain;
  288. class schedule_node_expansion;
  289. class schedule_node_extension;
  290. class schedule_node_filter;
  291. class schedule_node_guard;
  292. class schedule_node_leaf;
  293. class schedule_node_mark;
  294. class schedule_node_sequence;
  295. class schedule_node_set;
  296. class set;
  297. class set_list;
  298. class space;
  299. class union_access_info;
  300. class union_flow;
  301. class union_map;
  302. class union_pw_aff;
  303. class union_pw_aff_list;
  304. class union_pw_multi_aff;
  305. class union_set;
  306. class union_set_list;
  307. class val;
  308. class val_list;
  309.  
  310. // declarations for isl::aff
  311. inline aff manage(__isl_take isl_aff *ptr);
  312. inline aff manage_copy(__isl_keep isl_aff *ptr);
  313.  
  314. class aff {
  315.   friend inline aff manage(__isl_take isl_aff *ptr);
  316.   friend inline aff manage_copy(__isl_keep isl_aff *ptr);
  317.  
  318. protected:
  319.   isl_aff *ptr = nullptr;
  320.  
  321.   inline explicit aff(__isl_take isl_aff *ptr);
  322.  
  323. public:
  324.   inline /* implicit */ aff();
  325.   inline /* implicit */ aff(const aff &obj);
  326.   inline explicit aff(isl::ctx ctx, const std::string &str);
  327.   inline explicit aff(isl::local_space ls, isl::val val);
  328.   inline explicit aff(isl::local_space ls);
  329.   inline aff &operator=(aff obj);
  330.   inline ~aff();
  331.   inline __isl_give isl_aff *copy() const &;
  332.   inline __isl_give isl_aff *copy() && = delete;
  333.   inline __isl_keep isl_aff *get() const;
  334.   inline __isl_give isl_aff *release();
  335.   inline bool is_null() const;
  336.   inline isl::ctx ctx() const;
  337.  
  338.   inline isl::aff add(isl::aff aff2) const;
  339.   inline isl::multi_aff add(const isl::multi_aff &multi2) const;
  340.   inline isl::multi_pw_aff add(const isl::multi_pw_aff &multi2) const;
  341.   inline isl::multi_union_pw_aff add(const isl::multi_union_pw_aff &multi2) const;
  342.   inline isl::pw_aff add(const isl::pw_aff &pwaff2) const;
  343.   inline isl::pw_multi_aff add(const isl::pw_multi_aff &pma2) const;
  344.   inline isl::union_pw_aff add(const isl::union_pw_aff &upa2) const;
  345.   inline isl::union_pw_multi_aff add(const isl::union_pw_multi_aff &upma2) const;
  346.   inline isl::aff add_constant(isl::val v) const;
  347.   inline isl::aff add_constant(long v) const;
  348.   inline isl::multi_aff add_constant(const isl::multi_val &mv) const;
  349.   inline isl::aff add_constant_si(int v) const;
  350.   inline isl::pw_aff add_dims(isl::dim type, unsigned int n) const;
  351.   inline isl::union_pw_multi_aff add_pw_multi_aff(const isl::pw_multi_aff &pma) const;
  352.   inline isl::union_pw_multi_aff apply(const isl::union_pw_multi_aff &upma2) const;
  353.   inline isl::aff as_aff() const;
  354.   inline isl::map as_map() const;
  355.   inline isl::multi_aff as_multi_aff() const;
  356.   inline isl::multi_union_pw_aff as_multi_union_pw_aff() const;
  357.   inline isl::pw_multi_aff as_pw_multi_aff() const;
  358.   inline isl::set as_set() const;
  359.   inline isl::union_map as_union_map() const;
  360.   inline isl::aff at(int pos) const;
  361.   inline isl::basic_set bind(isl::id id) const;
  362.   inline isl::basic_set bind(const std::string &id) const;
  363.   inline isl::basic_set bind(const isl::multi_id &tuple) const;
  364.   inline isl::pw_aff bind_domain(const isl::multi_id &tuple) const;
  365.   inline isl::pw_aff bind_domain_wrapped_domain(const isl::multi_id &tuple) const;
  366.   inline isl::aff ceil() const;
  367.   inline isl::pw_aff coalesce() const;
  368.   inline isl::pw_aff cond(const isl::pw_aff &pwaff_true, const isl::pw_aff &pwaff_false) const;
  369.   inline isl::multi_val constant_multi_val() const;
  370.   inline isl::val constant_val() const;
  371.   inline isl::val get_constant_val() const;
  372.   inline isl::val denominator_val() const;
  373.   inline isl::val get_denominator_val() const;
  374.   inline class size dim(isl::dim type) const;
  375.   inline isl::id dim_id(isl::dim type, unsigned int pos) const;
  376.   inline isl::aff div(isl::aff aff2) const;
  377.   inline isl::pw_aff div(const isl::pw_aff &pa2) const;
  378.   inline isl::set domain() const;
  379.   inline isl::space domain_space() const;
  380.   inline isl::pw_multi_aff drop_dims(isl::dim type, unsigned int first, unsigned int n) const;
  381.   inline isl::set eq_set(isl::aff aff2) const;
  382.   inline isl::set eq_set(const isl::pw_aff &pwaff2) const;
  383.   inline isl::val eval(isl::point pnt) const;
  384.   inline isl::pw_multi_aff extract_pw_multi_aff(const isl::space &space) const;
  385.   inline isl::multi_aff flat_range_product(const isl::multi_aff &multi2) const;
  386.   inline isl::multi_pw_aff flat_range_product(const isl::multi_pw_aff &multi2) const;
  387.   inline isl::multi_union_pw_aff flat_range_product(const isl::multi_union_pw_aff &multi2) const;
  388.   inline isl::pw_multi_aff flat_range_product(const isl::pw_multi_aff &pma2) const;
  389.   inline isl::union_pw_multi_aff flat_range_product(const isl::union_pw_multi_aff &upma2) const;
  390.   inline isl::aff floor() const;
  391.   inline stat foreach_piece(const std::function<stat(isl::set, isl::aff)> &fn) const;
  392.   inline stat foreach_piece(const std::function<stat(isl::set, isl::multi_aff)> &fn) const;
  393.   inline stat foreach_pw_aff(const std::function<stat(isl::pw_aff)> &fn) const;
  394.   inline isl::set ge_set(isl::aff aff2) const;
  395.   inline isl::set ge_set(const isl::pw_aff &pwaff2) const;
  396.   inline isl::aff gist(isl::set context) const;
  397.   inline isl::union_pw_aff gist(const isl::union_set &context) const;
  398.   inline isl::aff gist(const isl::basic_set &context) const;
  399.   inline isl::aff gist(const isl::point &context) const;
  400.   inline isl::set gt_set(isl::aff aff2) const;
  401.   inline isl::set gt_set(const isl::pw_aff &pwaff2) const;
  402.   inline boolean has_range_tuple_id() const;
  403.   inline isl::multi_aff identity() const;
  404.   inline isl::pw_aff insert_domain(const isl::space &domain) const;
  405.   inline isl::pw_aff intersect_domain(const isl::set &set) const;
  406.   inline isl::union_pw_aff intersect_domain(const isl::space &space) const;
  407.   inline isl::union_pw_aff intersect_domain(const isl::union_set &uset) const;
  408.   inline isl::union_pw_aff intersect_domain_wrapped_domain(const isl::union_set &uset) const;
  409.   inline isl::union_pw_aff intersect_domain_wrapped_range(const isl::union_set &uset) const;
  410.   inline isl::pw_aff intersect_params(const isl::set &set) const;
  411.   inline boolean involves_locals() const;
  412.   inline boolean involves_nan() const;
  413.   inline boolean involves_param(const isl::id &id) const;
  414.   inline boolean involves_param(const std::string &id) const;
  415.   inline boolean involves_param(const isl::id_list &list) const;
  416.   inline boolean is_cst() const;
  417.   inline boolean is_equal(const isl::pw_aff &pa2) const;
  418.   inline boolean isa_aff() const;
  419.   inline boolean isa_multi_aff() const;
  420.   inline boolean isa_pw_multi_aff() const;
  421.   inline isl::set le_set(isl::aff aff2) const;
  422.   inline isl::set le_set(const isl::pw_aff &pwaff2) const;
  423.   inline isl::aff_list list() const;
  424.   inline isl::set lt_set(isl::aff aff2) const;
  425.   inline isl::set lt_set(const isl::pw_aff &pwaff2) const;
  426.   inline isl::multi_pw_aff max(const isl::multi_pw_aff &multi2) const;
  427.   inline isl::pw_aff max(const isl::pw_aff &pwaff2) const;
  428.   inline isl::multi_val max_multi_val() const;
  429.   inline isl::multi_pw_aff min(const isl::multi_pw_aff &multi2) const;
  430.   inline isl::pw_aff min(const isl::pw_aff &pwaff2) const;
  431.   inline isl::multi_val min_multi_val() const;
  432.   inline isl::aff mod(isl::val mod) const;
  433.   inline isl::aff mod(long mod) const;
  434.   inline isl::aff mul(isl::aff aff2) const;
  435.   inline isl::pw_aff mul(const isl::pw_aff &pwaff2) const;
  436.   inline class size n_piece() const;
  437.   inline isl::set ne_set(isl::aff aff2) const;
  438.   inline isl::set ne_set(const isl::pw_aff &pwaff2) const;
  439.   inline isl::aff neg() const;
  440.   inline boolean plain_is_empty() const;
  441.   inline boolean plain_is_equal(const isl::multi_aff &multi2) const;
  442.   inline boolean plain_is_equal(const isl::multi_pw_aff &multi2) const;
  443.   inline boolean plain_is_equal(const isl::multi_union_pw_aff &multi2) const;
  444.   inline isl::pw_multi_aff preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const;
  445.   inline isl::union_pw_multi_aff preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const;
  446.   inline isl::multi_aff product(const isl::multi_aff &multi2) const;
  447.   inline isl::multi_pw_aff product(const isl::multi_pw_aff &multi2) const;
  448.   inline isl::pw_multi_aff product(const isl::pw_multi_aff &pma2) const;
  449.   inline isl::aff pullback(isl::multi_aff ma) const;
  450.   inline isl::pw_aff pullback(const isl::multi_pw_aff &mpa) const;
  451.   inline isl::pw_aff pullback(const isl::pw_multi_aff &pma) const;
  452.   inline isl::union_pw_aff pullback(const isl::union_pw_multi_aff &upma) const;
  453.   inline isl::aff pullback(const isl::aff &ma) const;
  454.   inline isl::pw_multi_aff_list pw_multi_aff_list() const;
  455.   inline isl::pw_multi_aff range_factor_domain() const;
  456.   inline isl::pw_multi_aff range_factor_range() const;
  457.   inline isl::multi_aff range_product(const isl::multi_aff &multi2) const;
  458.   inline isl::multi_pw_aff range_product(const isl::multi_pw_aff &multi2) const;
  459.   inline isl::multi_union_pw_aff range_product(const isl::multi_union_pw_aff &multi2) const;
  460.   inline isl::pw_multi_aff range_product(const isl::pw_multi_aff &pma2) const;
  461.   inline isl::union_pw_multi_aff range_product(const isl::union_pw_multi_aff &upma2) const;
  462.   inline isl::id range_tuple_id() const;
  463.   inline isl::multi_aff reset_range_tuple_id() const;
  464.   inline isl::multi_aff reset_tuple_id(isl::dim type) const;
  465.   inline isl::aff scale(isl::val v) const;
  466.   inline isl::aff scale(long v) const;
  467.   inline isl::multi_aff scale(const isl::multi_val &mv) const;
  468.   inline isl::aff scale_down(isl::val v) const;
  469.   inline isl::aff scale_down(long v) const;
  470.   inline isl::multi_aff scale_down(const isl::multi_val &mv) const;
  471.   inline isl::multi_aff set_aff(int pos, const isl::aff &el) const;
  472.   inline isl::multi_aff set_at(int pos, const isl::aff &el) const;
  473.   inline isl::multi_pw_aff set_at(int pos, const isl::pw_aff &el) const;
  474.   inline isl::multi_union_pw_aff set_at(int pos, const isl::union_pw_aff &el) const;
  475.   inline isl::aff set_constant_si(int v) const;
  476.   inline isl::multi_pw_aff set_pw_aff(int pos, const isl::pw_aff &el) const;
  477.   inline isl::pw_multi_aff set_pw_aff(unsigned int pos, const isl::pw_aff &pa) const;
  478.   inline isl::multi_aff set_range_tuple(const isl::id &id) const;
  479.   inline isl::multi_aff set_range_tuple(const std::string &id) const;
  480.   inline isl::pw_aff set_tuple_id(isl::dim type, const isl::id &id) const;
  481.   inline isl::pw_aff set_tuple_id(isl::dim type, const std::string &id) const;
  482.   inline isl::multi_union_pw_aff set_union_pw_aff(int pos, const isl::union_pw_aff &el) const;
  483.   inline class size size() const;
  484.   inline isl::space space() const;
  485.   inline isl::aff sub(isl::aff aff2) const;
  486.   inline isl::multi_aff sub(const isl::multi_aff &multi2) const;
  487.   inline isl::multi_pw_aff sub(const isl::multi_pw_aff &multi2) const;
  488.   inline isl::multi_union_pw_aff sub(const isl::multi_union_pw_aff &multi2) const;
  489.   inline isl::pw_aff sub(const isl::pw_aff &pwaff2) const;
  490.   inline isl::pw_multi_aff sub(const isl::pw_multi_aff &pma2) const;
  491.   inline isl::union_pw_aff sub(const isl::union_pw_aff &upa2) const;
  492.   inline isl::union_pw_multi_aff sub(const isl::union_pw_multi_aff &upma2) const;
  493.   inline isl::pw_aff subtract_domain(const isl::set &set) const;
  494.   inline isl::union_pw_aff subtract_domain(const isl::space &space) const;
  495.   inline isl::union_pw_aff subtract_domain(const isl::union_set &uset) const;
  496.   inline isl::pw_aff tdiv_q(const isl::pw_aff &pa2) const;
  497.   inline isl::pw_aff tdiv_r(const isl::pw_aff &pa2) const;
  498.   inline isl::aff_list to_list() const;
  499.   inline isl::multi_pw_aff to_multi_pw_aff() const;
  500.   inline isl::multi_union_pw_aff to_multi_union_pw_aff() const;
  501.   inline isl::pw_multi_aff to_pw_multi_aff() const;
  502.   inline isl::union_pw_aff to_union_pw_aff() const;
  503.   inline isl::union_pw_multi_aff to_union_pw_multi_aff() const;
  504.   inline isl::id tuple_id(isl::dim type) const;
  505.   inline isl::aff unbind_params_insert_domain(isl::multi_id domain) const;
  506.   inline isl::multi_pw_aff union_add(const isl::multi_pw_aff &mpa2) const;
  507.   inline isl::multi_union_pw_aff union_add(const isl::multi_union_pw_aff &mupa2) const;
  508.   inline isl::pw_aff union_add(const isl::pw_aff &pwaff2) const;
  509.   inline isl::pw_multi_aff union_add(const isl::pw_multi_aff &pma2) const;
  510.   inline isl::union_pw_aff union_add(const isl::union_pw_aff &upa2) const;
  511.   inline isl::union_pw_multi_aff union_add(const isl::union_pw_multi_aff &upma2) const;
  512.   static inline isl::aff var_on_domain(isl::local_space ls, isl::dim type, unsigned int pos);
  513.   static inline isl::aff zero_on_domain(isl::space space);
  514. };
  515.  
  516. // declarations for isl::aff_list
  517. inline aff_list manage(__isl_take isl_aff_list *ptr);
  518. inline aff_list manage_copy(__isl_keep isl_aff_list *ptr);
  519.  
  520. class aff_list {
  521.   friend inline aff_list manage(__isl_take isl_aff_list *ptr);
  522.   friend inline aff_list manage_copy(__isl_keep isl_aff_list *ptr);
  523.  
  524. protected:
  525.   isl_aff_list *ptr = nullptr;
  526.  
  527.   inline explicit aff_list(__isl_take isl_aff_list *ptr);
  528.  
  529. public:
  530.   inline /* implicit */ aff_list();
  531.   inline /* implicit */ aff_list(const aff_list &obj);
  532.   inline explicit aff_list(isl::ctx ctx, int n);
  533.   inline explicit aff_list(isl::aff el);
  534.   inline explicit aff_list(isl::ctx ctx, const std::string &str);
  535.   inline aff_list &operator=(aff_list obj);
  536.   inline ~aff_list();
  537.   inline __isl_give isl_aff_list *copy() const &;
  538.   inline __isl_give isl_aff_list *copy() && = delete;
  539.   inline __isl_keep isl_aff_list *get() const;
  540.   inline __isl_give isl_aff_list *release();
  541.   inline bool is_null() const;
  542.   inline isl::ctx ctx() const;
  543.  
  544.   inline isl::aff_list add(isl::aff el) const;
  545.   inline isl::aff at(int index) const;
  546.   inline isl::aff get_at(int index) const;
  547.   inline isl::aff_list clear() const;
  548.   inline isl::aff_list concat(isl::aff_list list2) const;
  549.   inline isl::aff_list drop(unsigned int first, unsigned int n) const;
  550.   inline stat foreach(const std::function<stat(isl::aff)> &fn) const;
  551.   inline isl::aff_list insert(unsigned int pos, isl::aff el) const;
  552.   inline class size size() const;
  553. };
  554.  
  555. // declarations for isl::ast_build
  556. inline ast_build manage(__isl_take isl_ast_build *ptr);
  557. inline ast_build manage_copy(__isl_keep isl_ast_build *ptr);
  558.  
  559. class ast_build {
  560.   friend inline ast_build manage(__isl_take isl_ast_build *ptr);
  561.   friend inline ast_build manage_copy(__isl_keep isl_ast_build *ptr);
  562.  
  563. protected:
  564.   isl_ast_build *ptr = nullptr;
  565.  
  566.   inline explicit ast_build(__isl_take isl_ast_build *ptr);
  567.  
  568. public:
  569.   inline /* implicit */ ast_build();
  570.   inline /* implicit */ ast_build(const ast_build &obj);
  571.   inline explicit ast_build(isl::ctx ctx);
  572.   inline ast_build &operator=(ast_build obj);
  573.   inline ~ast_build();
  574.   inline __isl_give isl_ast_build *copy() const &;
  575.   inline __isl_give isl_ast_build *copy() && = delete;
  576.   inline __isl_keep isl_ast_build *get() const;
  577.   inline __isl_give isl_ast_build *release();
  578.   inline bool is_null() const;
  579.   inline isl::ctx ctx() const;
  580.  
  581. private:
  582.   inline ast_build &copy_callbacks(const ast_build &obj);
  583.   struct at_each_domain_data {
  584.     std::function<isl::ast_node(isl::ast_node, isl::ast_build)> func;
  585.   };
  586.   std::shared_ptr<at_each_domain_data> at_each_domain_data;
  587.   static inline isl_ast_node *at_each_domain(isl_ast_node *arg_0, isl_ast_build *arg_1, void *arg_2);
  588.   inline void set_at_each_domain_data(const std::function<isl::ast_node(isl::ast_node, isl::ast_build)> &fn);
  589. public:
  590.   inline isl::ast_build set_at_each_domain(const std::function<isl::ast_node(isl::ast_node, isl::ast_build)> &fn) const;
  591.   inline isl::ast_expr access_from(isl::multi_pw_aff mpa) const;
  592.   inline isl::ast_expr access_from(isl::pw_multi_aff pma) const;
  593.   inline isl::ast_expr call_from(isl::multi_pw_aff mpa) const;
  594.   inline isl::ast_expr call_from(isl::pw_multi_aff pma) const;
  595.   inline isl::ast_expr expr_from(isl::pw_aff pa) const;
  596.   inline isl::ast_expr expr_from(isl::set set) const;
  597.   static inline isl::ast_build from_context(isl::set set);
  598.   inline isl::ast_node node_from(isl::schedule schedule) const;
  599.   inline isl::ast_node node_from_schedule_map(isl::union_map schedule) const;
  600.   inline isl::ast_build restrict(isl::set set) const;
  601.   inline isl::union_map schedule() const;
  602.   inline isl::union_map get_schedule() const;
  603. };
  604.  
  605. // declarations for isl::ast_expr
  606. inline ast_expr manage(__isl_take isl_ast_expr *ptr);
  607. inline ast_expr manage_copy(__isl_keep isl_ast_expr *ptr);
  608.  
  609. class ast_expr {
  610.   friend inline ast_expr manage(__isl_take isl_ast_expr *ptr);
  611.   friend inline ast_expr manage_copy(__isl_keep isl_ast_expr *ptr);
  612.  
  613. protected:
  614.   isl_ast_expr *ptr = nullptr;
  615.  
  616.   inline explicit ast_expr(__isl_take isl_ast_expr *ptr);
  617.  
  618. public:
  619.   inline /* implicit */ ast_expr();
  620.   inline /* implicit */ ast_expr(const ast_expr &obj);
  621.   inline ast_expr &operator=(ast_expr obj);
  622.   inline ~ast_expr();
  623.   inline __isl_give isl_ast_expr *copy() const &;
  624.   inline __isl_give isl_ast_expr *copy() && = delete;
  625.   inline __isl_keep isl_ast_expr *get() const;
  626.   inline __isl_give isl_ast_expr *release();
  627.   inline bool is_null() const;
  628. private:
  629.   template <typename T,
  630.           typename = typename std::enable_if<std::is_same<
  631.                   const decltype(isl_ast_expr_get_type(nullptr)),
  632.                   const T>::value>::type>
  633.   inline boolean isa_type(T subtype) const;
  634. public:
  635.   template <class T> inline boolean isa() const;
  636.   template <class T> inline T as() const;
  637.   inline isl::ctx ctx() const;
  638.  
  639.   inline isl::ast_expr add(isl::ast_expr expr2) const;
  640.   inline isl::ast_expr address_of() const;
  641.   inline isl::ast_expr eq(isl::ast_expr expr2) const;
  642.   static inline isl::ast_expr from_val(isl::val v);
  643.   inline isl::id id() const;
  644.   inline isl::id get_id() const;
  645.   inline isl::ast_expr le(isl::ast_expr expr2) const;
  646.   inline isl::ast_expr mul(isl::ast_expr expr2) const;
  647.   inline isl::ast_expr op_arg(int pos) const;
  648.   inline isl::ast_expr get_op_arg(int pos) const;
  649.   inline std::string to_C_str() const;
  650.   inline isl::val val() const;
  651.   inline isl::val get_val() const;
  652. };
  653.  
  654. // declarations for isl::ast_expr_id
  655.  
  656. class ast_expr_id : public ast_expr {
  657.   template <class T>
  658.   friend boolean ast_expr::isa() const;
  659.   friend ast_expr_id ast_expr::as<ast_expr_id>() const;
  660.   static const auto type = isl_ast_expr_id;
  661.  
  662. protected:
  663.   inline explicit ast_expr_id(__isl_take isl_ast_expr *ptr);
  664.  
  665. public:
  666.   inline /* implicit */ ast_expr_id();
  667.   inline /* implicit */ ast_expr_id(const ast_expr_id &obj);
  668.   inline ast_expr_id &operator=(ast_expr_id obj);
  669.   inline isl::ctx ctx() const;
  670.  
  671.   inline isl::id id() const;
  672.   inline isl::id get_id() const;
  673. };
  674.  
  675. // declarations for isl::ast_expr_int
  676.  
  677. class ast_expr_int : public ast_expr {
  678.   template <class T>
  679.   friend boolean ast_expr::isa() const;
  680.   friend ast_expr_int ast_expr::as<ast_expr_int>() const;
  681.   static const auto type = isl_ast_expr_int;
  682.  
  683. protected:
  684.   inline explicit ast_expr_int(__isl_take isl_ast_expr *ptr);
  685.  
  686. public:
  687.   inline /* implicit */ ast_expr_int();
  688.   inline /* implicit */ ast_expr_int(const ast_expr_int &obj);
  689.   inline ast_expr_int &operator=(ast_expr_int obj);
  690.   inline isl::ctx ctx() const;
  691.  
  692.   inline isl::val val() const;
  693.   inline isl::val get_val() const;
  694. };
  695.  
  696. // declarations for isl::ast_expr_op
  697.  
  698. class ast_expr_op : public ast_expr {
  699.   template <class T>
  700.   friend boolean ast_expr::isa() const;
  701.   friend ast_expr_op ast_expr::as<ast_expr_op>() const;
  702.   static const auto type = isl_ast_expr_op;
  703.  
  704. protected:
  705.   inline explicit ast_expr_op(__isl_take isl_ast_expr *ptr);
  706.  
  707. public:
  708.   inline /* implicit */ ast_expr_op();
  709.   inline /* implicit */ ast_expr_op(const ast_expr_op &obj);
  710.   inline ast_expr_op &operator=(ast_expr_op obj);
  711. private:
  712.   template <typename T,
  713.           typename = typename std::enable_if<std::is_same<
  714.                   const decltype(isl_ast_expr_op_get_type(nullptr)),
  715.                   const T>::value>::type>
  716.   inline boolean isa_type(T subtype) const;
  717. public:
  718.   template <class T> inline boolean isa() const;
  719.   template <class T> inline T as() const;
  720.   inline isl::ctx ctx() const;
  721.  
  722.   inline isl::ast_expr arg(int pos) const;
  723.   inline isl::ast_expr get_arg(int pos) const;
  724.   inline class size n_arg() const;
  725.   inline class size get_n_arg() const;
  726. };
  727.  
  728. // declarations for isl::ast_expr_op_access
  729.  
  730. class ast_expr_op_access : public ast_expr_op {
  731.   template <class T>
  732.   friend boolean ast_expr_op::isa() const;
  733.   friend ast_expr_op_access ast_expr_op::as<ast_expr_op_access>() const;
  734.   static const auto type = isl_ast_expr_op_access;
  735.  
  736. protected:
  737.   inline explicit ast_expr_op_access(__isl_take isl_ast_expr *ptr);
  738.  
  739. public:
  740.   inline /* implicit */ ast_expr_op_access();
  741.   inline /* implicit */ ast_expr_op_access(const ast_expr_op_access &obj);
  742.   inline ast_expr_op_access &operator=(ast_expr_op_access obj);
  743.   inline isl::ctx ctx() const;
  744.  
  745. };
  746.  
  747. // declarations for isl::ast_expr_op_add
  748.  
  749. class ast_expr_op_add : public ast_expr_op {
  750.   template <class T>
  751.   friend boolean ast_expr_op::isa() const;
  752.   friend ast_expr_op_add ast_expr_op::as<ast_expr_op_add>() const;
  753.   static const auto type = isl_ast_expr_op_add;
  754.  
  755. protected:
  756.   inline explicit ast_expr_op_add(__isl_take isl_ast_expr *ptr);
  757.  
  758. public:
  759.   inline /* implicit */ ast_expr_op_add();
  760.   inline /* implicit */ ast_expr_op_add(const ast_expr_op_add &obj);
  761.   inline ast_expr_op_add &operator=(ast_expr_op_add obj);
  762.   inline isl::ctx ctx() const;
  763.  
  764. };
  765.  
  766. // declarations for isl::ast_expr_op_address_of
  767.  
  768. class ast_expr_op_address_of : public ast_expr_op {
  769.   template <class T>
  770.   friend boolean ast_expr_op::isa() const;
  771.   friend ast_expr_op_address_of ast_expr_op::as<ast_expr_op_address_of>() const;
  772.   static const auto type = isl_ast_expr_op_address_of;
  773.  
  774. protected:
  775.   inline explicit ast_expr_op_address_of(__isl_take isl_ast_expr *ptr);
  776.  
  777. public:
  778.   inline /* implicit */ ast_expr_op_address_of();
  779.   inline /* implicit */ ast_expr_op_address_of(const ast_expr_op_address_of &obj);
  780.   inline ast_expr_op_address_of &operator=(ast_expr_op_address_of obj);
  781.   inline isl::ctx ctx() const;
  782.  
  783. };
  784.  
  785. // declarations for isl::ast_expr_op_and
  786.  
  787. class ast_expr_op_and : public ast_expr_op {
  788.   template <class T>
  789.   friend boolean ast_expr_op::isa() const;
  790.   friend ast_expr_op_and ast_expr_op::as<ast_expr_op_and>() const;
  791.   static const auto type = isl_ast_expr_op_and;
  792.  
  793. protected:
  794.   inline explicit ast_expr_op_and(__isl_take isl_ast_expr *ptr);
  795.  
  796. public:
  797.   inline /* implicit */ ast_expr_op_and();
  798.   inline /* implicit */ ast_expr_op_and(const ast_expr_op_and &obj);
  799.   inline ast_expr_op_and &operator=(ast_expr_op_and obj);
  800.   inline isl::ctx ctx() const;
  801.  
  802. };
  803.  
  804. // declarations for isl::ast_expr_op_and_then
  805.  
  806. class ast_expr_op_and_then : public ast_expr_op {
  807.   template <class T>
  808.   friend boolean ast_expr_op::isa() const;
  809.   friend ast_expr_op_and_then ast_expr_op::as<ast_expr_op_and_then>() const;
  810.   static const auto type = isl_ast_expr_op_and_then;
  811.  
  812. protected:
  813.   inline explicit ast_expr_op_and_then(__isl_take isl_ast_expr *ptr);
  814.  
  815. public:
  816.   inline /* implicit */ ast_expr_op_and_then();
  817.   inline /* implicit */ ast_expr_op_and_then(const ast_expr_op_and_then &obj);
  818.   inline ast_expr_op_and_then &operator=(ast_expr_op_and_then obj);
  819.   inline isl::ctx ctx() const;
  820.  
  821. };
  822.  
  823. // declarations for isl::ast_expr_op_call
  824.  
  825. class ast_expr_op_call : public ast_expr_op {
  826.   template <class T>
  827.   friend boolean ast_expr_op::isa() const;
  828.   friend ast_expr_op_call ast_expr_op::as<ast_expr_op_call>() const;
  829.   static const auto type = isl_ast_expr_op_call;
  830.  
  831. protected:
  832.   inline explicit ast_expr_op_call(__isl_take isl_ast_expr *ptr);
  833.  
  834. public:
  835.   inline /* implicit */ ast_expr_op_call();
  836.   inline /* implicit */ ast_expr_op_call(const ast_expr_op_call &obj);
  837.   inline ast_expr_op_call &operator=(ast_expr_op_call obj);
  838.   inline isl::ctx ctx() const;
  839.  
  840. };
  841.  
  842. // declarations for isl::ast_expr_op_cond
  843.  
  844. class ast_expr_op_cond : public ast_expr_op {
  845.   template <class T>
  846.   friend boolean ast_expr_op::isa() const;
  847.   friend ast_expr_op_cond ast_expr_op::as<ast_expr_op_cond>() const;
  848.   static const auto type = isl_ast_expr_op_cond;
  849.  
  850. protected:
  851.   inline explicit ast_expr_op_cond(__isl_take isl_ast_expr *ptr);
  852.  
  853. public:
  854.   inline /* implicit */ ast_expr_op_cond();
  855.   inline /* implicit */ ast_expr_op_cond(const ast_expr_op_cond &obj);
  856.   inline ast_expr_op_cond &operator=(ast_expr_op_cond obj);
  857.   inline isl::ctx ctx() const;
  858.  
  859. };
  860.  
  861. // declarations for isl::ast_expr_op_div
  862.  
  863. class ast_expr_op_div : public ast_expr_op {
  864.   template <class T>
  865.   friend boolean ast_expr_op::isa() const;
  866.   friend ast_expr_op_div ast_expr_op::as<ast_expr_op_div>() const;
  867.   static const auto type = isl_ast_expr_op_div;
  868.  
  869. protected:
  870.   inline explicit ast_expr_op_div(__isl_take isl_ast_expr *ptr);
  871.  
  872. public:
  873.   inline /* implicit */ ast_expr_op_div();
  874.   inline /* implicit */ ast_expr_op_div(const ast_expr_op_div &obj);
  875.   inline ast_expr_op_div &operator=(ast_expr_op_div obj);
  876.   inline isl::ctx ctx() const;
  877.  
  878. };
  879.  
  880. // declarations for isl::ast_expr_op_eq
  881.  
  882. class ast_expr_op_eq : public ast_expr_op {
  883.   template <class T>
  884.   friend boolean ast_expr_op::isa() const;
  885.   friend ast_expr_op_eq ast_expr_op::as<ast_expr_op_eq>() const;
  886.   static const auto type = isl_ast_expr_op_eq;
  887.  
  888. protected:
  889.   inline explicit ast_expr_op_eq(__isl_take isl_ast_expr *ptr);
  890.  
  891. public:
  892.   inline /* implicit */ ast_expr_op_eq();
  893.   inline /* implicit */ ast_expr_op_eq(const ast_expr_op_eq &obj);
  894.   inline ast_expr_op_eq &operator=(ast_expr_op_eq obj);
  895.   inline isl::ctx ctx() const;
  896.  
  897. };
  898.  
  899. // declarations for isl::ast_expr_op_fdiv_q
  900.  
  901. class ast_expr_op_fdiv_q : public ast_expr_op {
  902.   template <class T>
  903.   friend boolean ast_expr_op::isa() const;
  904.   friend ast_expr_op_fdiv_q ast_expr_op::as<ast_expr_op_fdiv_q>() const;
  905.   static const auto type = isl_ast_expr_op_fdiv_q;
  906.  
  907. protected:
  908.   inline explicit ast_expr_op_fdiv_q(__isl_take isl_ast_expr *ptr);
  909.  
  910. public:
  911.   inline /* implicit */ ast_expr_op_fdiv_q();
  912.   inline /* implicit */ ast_expr_op_fdiv_q(const ast_expr_op_fdiv_q &obj);
  913.   inline ast_expr_op_fdiv_q &operator=(ast_expr_op_fdiv_q obj);
  914.   inline isl::ctx ctx() const;
  915.  
  916. };
  917.  
  918. // declarations for isl::ast_expr_op_ge
  919.  
  920. class ast_expr_op_ge : public ast_expr_op {
  921.   template <class T>
  922.   friend boolean ast_expr_op::isa() const;
  923.   friend ast_expr_op_ge ast_expr_op::as<ast_expr_op_ge>() const;
  924.   static const auto type = isl_ast_expr_op_ge;
  925.  
  926. protected:
  927.   inline explicit ast_expr_op_ge(__isl_take isl_ast_expr *ptr);
  928.  
  929. public:
  930.   inline /* implicit */ ast_expr_op_ge();
  931.   inline /* implicit */ ast_expr_op_ge(const ast_expr_op_ge &obj);
  932.   inline ast_expr_op_ge &operator=(ast_expr_op_ge obj);
  933.   inline isl::ctx ctx() const;
  934.  
  935. };
  936.  
  937. // declarations for isl::ast_expr_op_gt
  938.  
  939. class ast_expr_op_gt : public ast_expr_op {
  940.   template <class T>
  941.   friend boolean ast_expr_op::isa() const;
  942.   friend ast_expr_op_gt ast_expr_op::as<ast_expr_op_gt>() const;
  943.   static const auto type = isl_ast_expr_op_gt;
  944.  
  945. protected:
  946.   inline explicit ast_expr_op_gt(__isl_take isl_ast_expr *ptr);
  947.  
  948. public:
  949.   inline /* implicit */ ast_expr_op_gt();
  950.   inline /* implicit */ ast_expr_op_gt(const ast_expr_op_gt &obj);
  951.   inline ast_expr_op_gt &operator=(ast_expr_op_gt obj);
  952.   inline isl::ctx ctx() const;
  953.  
  954. };
  955.  
  956. // declarations for isl::ast_expr_op_le
  957.  
  958. class ast_expr_op_le : public ast_expr_op {
  959.   template <class T>
  960.   friend boolean ast_expr_op::isa() const;
  961.   friend ast_expr_op_le ast_expr_op::as<ast_expr_op_le>() const;
  962.   static const auto type = isl_ast_expr_op_le;
  963.  
  964. protected:
  965.   inline explicit ast_expr_op_le(__isl_take isl_ast_expr *ptr);
  966.  
  967. public:
  968.   inline /* implicit */ ast_expr_op_le();
  969.   inline /* implicit */ ast_expr_op_le(const ast_expr_op_le &obj);
  970.   inline ast_expr_op_le &operator=(ast_expr_op_le obj);
  971.   inline isl::ctx ctx() const;
  972.  
  973. };
  974.  
  975. // declarations for isl::ast_expr_op_lt
  976.  
  977. class ast_expr_op_lt : public ast_expr_op {
  978.   template <class T>
  979.   friend boolean ast_expr_op::isa() const;
  980.   friend ast_expr_op_lt ast_expr_op::as<ast_expr_op_lt>() const;
  981.   static const auto type = isl_ast_expr_op_lt;
  982.  
  983. protected:
  984.   inline explicit ast_expr_op_lt(__isl_take isl_ast_expr *ptr);
  985.  
  986. public:
  987.   inline /* implicit */ ast_expr_op_lt();
  988.   inline /* implicit */ ast_expr_op_lt(const ast_expr_op_lt &obj);
  989.   inline ast_expr_op_lt &operator=(ast_expr_op_lt obj);
  990.   inline isl::ctx ctx() const;
  991.  
  992. };
  993.  
  994. // declarations for isl::ast_expr_op_max
  995.  
  996. class ast_expr_op_max : public ast_expr_op {
  997.   template <class T>
  998.   friend boolean ast_expr_op::isa() const;
  999.   friend ast_expr_op_max ast_expr_op::as<ast_expr_op_max>() const;
  1000.   static const auto type = isl_ast_expr_op_max;
  1001.  
  1002. protected:
  1003.   inline explicit ast_expr_op_max(__isl_take isl_ast_expr *ptr);
  1004.  
  1005. public:
  1006.   inline /* implicit */ ast_expr_op_max();
  1007.   inline /* implicit */ ast_expr_op_max(const ast_expr_op_max &obj);
  1008.   inline ast_expr_op_max &operator=(ast_expr_op_max obj);
  1009.   inline isl::ctx ctx() const;
  1010.  
  1011. };
  1012.  
  1013. // declarations for isl::ast_expr_op_member
  1014.  
  1015. class ast_expr_op_member : public ast_expr_op {
  1016.   template <class T>
  1017.   friend boolean ast_expr_op::isa() const;
  1018.   friend ast_expr_op_member ast_expr_op::as<ast_expr_op_member>() const;
  1019.   static const auto type = isl_ast_expr_op_member;
  1020.  
  1021. protected:
  1022.   inline explicit ast_expr_op_member(__isl_take isl_ast_expr *ptr);
  1023.  
  1024. public:
  1025.   inline /* implicit */ ast_expr_op_member();
  1026.   inline /* implicit */ ast_expr_op_member(const ast_expr_op_member &obj);
  1027.   inline ast_expr_op_member &operator=(ast_expr_op_member obj);
  1028.   inline isl::ctx ctx() const;
  1029.  
  1030. };
  1031.  
  1032. // declarations for isl::ast_expr_op_min
  1033.  
  1034. class ast_expr_op_min : public ast_expr_op {
  1035.   template <class T>
  1036.   friend boolean ast_expr_op::isa() const;
  1037.   friend ast_expr_op_min ast_expr_op::as<ast_expr_op_min>() const;
  1038.   static const auto type = isl_ast_expr_op_min;
  1039.  
  1040. protected:
  1041.   inline explicit ast_expr_op_min(__isl_take isl_ast_expr *ptr);
  1042.  
  1043. public:
  1044.   inline /* implicit */ ast_expr_op_min();
  1045.   inline /* implicit */ ast_expr_op_min(const ast_expr_op_min &obj);
  1046.   inline ast_expr_op_min &operator=(ast_expr_op_min obj);
  1047.   inline isl::ctx ctx() const;
  1048.  
  1049. };
  1050.  
  1051. // declarations for isl::ast_expr_op_minus
  1052.  
  1053. class ast_expr_op_minus : public ast_expr_op {
  1054.   template <class T>
  1055.   friend boolean ast_expr_op::isa() const;
  1056.   friend ast_expr_op_minus ast_expr_op::as<ast_expr_op_minus>() const;
  1057.   static const auto type = isl_ast_expr_op_minus;
  1058.  
  1059. protected:
  1060.   inline explicit ast_expr_op_minus(__isl_take isl_ast_expr *ptr);
  1061.  
  1062. public:
  1063.   inline /* implicit */ ast_expr_op_minus();
  1064.   inline /* implicit */ ast_expr_op_minus(const ast_expr_op_minus &obj);
  1065.   inline ast_expr_op_minus &operator=(ast_expr_op_minus obj);
  1066.   inline isl::ctx ctx() const;
  1067.  
  1068. };
  1069.  
  1070. // declarations for isl::ast_expr_op_mul
  1071.  
  1072. class ast_expr_op_mul : public ast_expr_op {
  1073.   template <class T>
  1074.   friend boolean ast_expr_op::isa() const;
  1075.   friend ast_expr_op_mul ast_expr_op::as<ast_expr_op_mul>() const;
  1076.   static const auto type = isl_ast_expr_op_mul;
  1077.  
  1078. protected:
  1079.   inline explicit ast_expr_op_mul(__isl_take isl_ast_expr *ptr);
  1080.  
  1081. public:
  1082.   inline /* implicit */ ast_expr_op_mul();
  1083.   inline /* implicit */ ast_expr_op_mul(const ast_expr_op_mul &obj);
  1084.   inline ast_expr_op_mul &operator=(ast_expr_op_mul obj);
  1085.   inline isl::ctx ctx() const;
  1086.  
  1087. };
  1088.  
  1089. // declarations for isl::ast_expr_op_or
  1090.  
  1091. class ast_expr_op_or : public ast_expr_op {
  1092.   template <class T>
  1093.   friend boolean ast_expr_op::isa() const;
  1094.   friend ast_expr_op_or ast_expr_op::as<ast_expr_op_or>() const;
  1095.   static const auto type = isl_ast_expr_op_or;
  1096.  
  1097. protected:
  1098.   inline explicit ast_expr_op_or(__isl_take isl_ast_expr *ptr);
  1099.  
  1100. public:
  1101.   inline /* implicit */ ast_expr_op_or();
  1102.   inline /* implicit */ ast_expr_op_or(const ast_expr_op_or &obj);
  1103.   inline ast_expr_op_or &operator=(ast_expr_op_or obj);
  1104.   inline isl::ctx ctx() const;
  1105.  
  1106. };
  1107.  
  1108. // declarations for isl::ast_expr_op_or_else
  1109.  
  1110. class ast_expr_op_or_else : public ast_expr_op {
  1111.   template <class T>
  1112.   friend boolean ast_expr_op::isa() const;
  1113.   friend ast_expr_op_or_else ast_expr_op::as<ast_expr_op_or_else>() const;
  1114.   static const auto type = isl_ast_expr_op_or_else;
  1115.  
  1116. protected:
  1117.   inline explicit ast_expr_op_or_else(__isl_take isl_ast_expr *ptr);
  1118.  
  1119. public:
  1120.   inline /* implicit */ ast_expr_op_or_else();
  1121.   inline /* implicit */ ast_expr_op_or_else(const ast_expr_op_or_else &obj);
  1122.   inline ast_expr_op_or_else &operator=(ast_expr_op_or_else obj);
  1123.   inline isl::ctx ctx() const;
  1124.  
  1125. };
  1126.  
  1127. // declarations for isl::ast_expr_op_pdiv_q
  1128.  
  1129. class ast_expr_op_pdiv_q : public ast_expr_op {
  1130.   template <class T>
  1131.   friend boolean ast_expr_op::isa() const;
  1132.   friend ast_expr_op_pdiv_q ast_expr_op::as<ast_expr_op_pdiv_q>() const;
  1133.   static const auto type = isl_ast_expr_op_pdiv_q;
  1134.  
  1135. protected:
  1136.   inline explicit ast_expr_op_pdiv_q(__isl_take isl_ast_expr *ptr);
  1137.  
  1138. public:
  1139.   inline /* implicit */ ast_expr_op_pdiv_q();
  1140.   inline /* implicit */ ast_expr_op_pdiv_q(const ast_expr_op_pdiv_q &obj);
  1141.   inline ast_expr_op_pdiv_q &operator=(ast_expr_op_pdiv_q obj);
  1142.   inline isl::ctx ctx() const;
  1143.  
  1144. };
  1145.  
  1146. // declarations for isl::ast_expr_op_pdiv_r
  1147.  
  1148. class ast_expr_op_pdiv_r : public ast_expr_op {
  1149.   template <class T>
  1150.   friend boolean ast_expr_op::isa() const;
  1151.   friend ast_expr_op_pdiv_r ast_expr_op::as<ast_expr_op_pdiv_r>() const;
  1152.   static const auto type = isl_ast_expr_op_pdiv_r;
  1153.  
  1154. protected:
  1155.   inline explicit ast_expr_op_pdiv_r(__isl_take isl_ast_expr *ptr);
  1156.  
  1157. public:
  1158.   inline /* implicit */ ast_expr_op_pdiv_r();
  1159.   inline /* implicit */ ast_expr_op_pdiv_r(const ast_expr_op_pdiv_r &obj);
  1160.   inline ast_expr_op_pdiv_r &operator=(ast_expr_op_pdiv_r obj);
  1161.   inline isl::ctx ctx() const;
  1162.  
  1163. };
  1164.  
  1165. // declarations for isl::ast_expr_op_select
  1166.  
  1167. class ast_expr_op_select : public ast_expr_op {
  1168.   template <class T>
  1169.   friend boolean ast_expr_op::isa() const;
  1170.   friend ast_expr_op_select ast_expr_op::as<ast_expr_op_select>() const;
  1171.   static const auto type = isl_ast_expr_op_select;
  1172.  
  1173. protected:
  1174.   inline explicit ast_expr_op_select(__isl_take isl_ast_expr *ptr);
  1175.  
  1176. public:
  1177.   inline /* implicit */ ast_expr_op_select();
  1178.   inline /* implicit */ ast_expr_op_select(const ast_expr_op_select &obj);
  1179.   inline ast_expr_op_select &operator=(ast_expr_op_select obj);
  1180.   inline isl::ctx ctx() const;
  1181.  
  1182. };
  1183.  
  1184. // declarations for isl::ast_expr_op_sub
  1185.  
  1186. class ast_expr_op_sub : public ast_expr_op {
  1187.   template <class T>
  1188.   friend boolean ast_expr_op::isa() const;
  1189.   friend ast_expr_op_sub ast_expr_op::as<ast_expr_op_sub>() const;
  1190.   static const auto type = isl_ast_expr_op_sub;
  1191.  
  1192. protected:
  1193.   inline explicit ast_expr_op_sub(__isl_take isl_ast_expr *ptr);
  1194.  
  1195. public:
  1196.   inline /* implicit */ ast_expr_op_sub();
  1197.   inline /* implicit */ ast_expr_op_sub(const ast_expr_op_sub &obj);
  1198.   inline ast_expr_op_sub &operator=(ast_expr_op_sub obj);
  1199.   inline isl::ctx ctx() const;
  1200.  
  1201. };
  1202.  
  1203. // declarations for isl::ast_expr_op_zdiv_r
  1204.  
  1205. class ast_expr_op_zdiv_r : public ast_expr_op {
  1206.   template <class T>
  1207.   friend boolean ast_expr_op::isa() const;
  1208.   friend ast_expr_op_zdiv_r ast_expr_op::as<ast_expr_op_zdiv_r>() const;
  1209.   static const auto type = isl_ast_expr_op_zdiv_r;
  1210.  
  1211. protected:
  1212.   inline explicit ast_expr_op_zdiv_r(__isl_take isl_ast_expr *ptr);
  1213.  
  1214. public:
  1215.   inline /* implicit */ ast_expr_op_zdiv_r();
  1216.   inline /* implicit */ ast_expr_op_zdiv_r(const ast_expr_op_zdiv_r &obj);
  1217.   inline ast_expr_op_zdiv_r &operator=(ast_expr_op_zdiv_r obj);
  1218.   inline isl::ctx ctx() const;
  1219.  
  1220. };
  1221.  
  1222. // declarations for isl::ast_node
  1223. inline ast_node manage(__isl_take isl_ast_node *ptr);
  1224. inline ast_node manage_copy(__isl_keep isl_ast_node *ptr);
  1225.  
  1226. class ast_node {
  1227.   friend inline ast_node manage(__isl_take isl_ast_node *ptr);
  1228.   friend inline ast_node manage_copy(__isl_keep isl_ast_node *ptr);
  1229.  
  1230. protected:
  1231.   isl_ast_node *ptr = nullptr;
  1232.  
  1233.   inline explicit ast_node(__isl_take isl_ast_node *ptr);
  1234.  
  1235. public:
  1236.   inline /* implicit */ ast_node();
  1237.   inline /* implicit */ ast_node(const ast_node &obj);
  1238.   inline ast_node &operator=(ast_node obj);
  1239.   inline ~ast_node();
  1240.   inline __isl_give isl_ast_node *copy() const &;
  1241.   inline __isl_give isl_ast_node *copy() && = delete;
  1242.   inline __isl_keep isl_ast_node *get() const;
  1243.   inline __isl_give isl_ast_node *release();
  1244.   inline bool is_null() const;
  1245. private:
  1246.   template <typename T,
  1247.           typename = typename std::enable_if<std::is_same<
  1248.                   const decltype(isl_ast_node_get_type(nullptr)),
  1249.                   const T>::value>::type>
  1250.   inline boolean isa_type(T subtype) const;
  1251. public:
  1252.   template <class T> inline boolean isa() const;
  1253.   template <class T> inline T as() const;
  1254.   inline isl::ctx ctx() const;
  1255.  
  1256.   inline isl::id annotation() const;
  1257.   inline isl::id get_annotation() const;
  1258.   inline std::string to_C_str() const;
  1259.   inline isl::ast_node_list to_list() const;
  1260. };
  1261.  
  1262. // declarations for isl::ast_node_block
  1263.  
  1264. class ast_node_block : public ast_node {
  1265.   template <class T>
  1266.   friend boolean ast_node::isa() const;
  1267.   friend ast_node_block ast_node::as<ast_node_block>() const;
  1268.   static const auto type = isl_ast_node_block;
  1269.  
  1270. protected:
  1271.   inline explicit ast_node_block(__isl_take isl_ast_node *ptr);
  1272.  
  1273. public:
  1274.   inline /* implicit */ ast_node_block();
  1275.   inline /* implicit */ ast_node_block(const ast_node_block &obj);
  1276.   inline ast_node_block &operator=(ast_node_block obj);
  1277.   inline isl::ctx ctx() const;
  1278.  
  1279.   inline isl::ast_node_list children() const;
  1280.   inline isl::ast_node_list get_children() const;
  1281. };
  1282.  
  1283. // declarations for isl::ast_node_for
  1284.  
  1285. class ast_node_for : public ast_node {
  1286.   template <class T>
  1287.   friend boolean ast_node::isa() const;
  1288.   friend ast_node_for ast_node::as<ast_node_for>() const;
  1289.   static const auto type = isl_ast_node_for;
  1290.  
  1291. protected:
  1292.   inline explicit ast_node_for(__isl_take isl_ast_node *ptr);
  1293.  
  1294. public:
  1295.   inline /* implicit */ ast_node_for();
  1296.   inline /* implicit */ ast_node_for(const ast_node_for &obj);
  1297.   inline ast_node_for &operator=(ast_node_for obj);
  1298.   inline isl::ctx ctx() const;
  1299.  
  1300.   inline isl::ast_node body() const;
  1301.   inline isl::ast_node get_body() const;
  1302.   inline isl::ast_expr cond() const;
  1303.   inline isl::ast_expr get_cond() const;
  1304.   inline isl::ast_expr inc() const;
  1305.   inline isl::ast_expr get_inc() const;
  1306.   inline isl::ast_expr init() const;
  1307.   inline isl::ast_expr get_init() const;
  1308.   inline boolean is_degenerate() const;
  1309.   inline isl::ast_expr iterator() const;
  1310.   inline isl::ast_expr get_iterator() const;
  1311. };
  1312.  
  1313. // declarations for isl::ast_node_if
  1314.  
  1315. class ast_node_if : public ast_node {
  1316.   template <class T>
  1317.   friend boolean ast_node::isa() const;
  1318.   friend ast_node_if ast_node::as<ast_node_if>() const;
  1319.   static const auto type = isl_ast_node_if;
  1320.  
  1321. protected:
  1322.   inline explicit ast_node_if(__isl_take isl_ast_node *ptr);
  1323.  
  1324. public:
  1325.   inline /* implicit */ ast_node_if();
  1326.   inline /* implicit */ ast_node_if(const ast_node_if &obj);
  1327.   inline ast_node_if &operator=(ast_node_if obj);
  1328.   inline isl::ctx ctx() const;
  1329.  
  1330.   inline isl::ast_expr cond() const;
  1331.   inline isl::ast_expr get_cond() const;
  1332.   inline isl::ast_node else_node() const;
  1333.   inline isl::ast_node get_else_node() const;
  1334.   inline boolean has_else_node() const;
  1335.   inline isl::ast_node then_node() const;
  1336.   inline isl::ast_node get_then_node() const;
  1337. };
  1338.  
  1339. // declarations for isl::ast_node_list
  1340. inline ast_node_list manage(__isl_take isl_ast_node_list *ptr);
  1341. inline ast_node_list manage_copy(__isl_keep isl_ast_node_list *ptr);
  1342.  
  1343. class ast_node_list {
  1344.   friend inline ast_node_list manage(__isl_take isl_ast_node_list *ptr);
  1345.   friend inline ast_node_list manage_copy(__isl_keep isl_ast_node_list *ptr);
  1346.  
  1347. protected:
  1348.   isl_ast_node_list *ptr = nullptr;
  1349.  
  1350.   inline explicit ast_node_list(__isl_take isl_ast_node_list *ptr);
  1351.  
  1352. public:
  1353.   inline /* implicit */ ast_node_list();
  1354.   inline /* implicit */ ast_node_list(const ast_node_list &obj);
  1355.   inline explicit ast_node_list(isl::ctx ctx, int n);
  1356.   inline explicit ast_node_list(isl::ast_node el);
  1357.   inline ast_node_list &operator=(ast_node_list obj);
  1358.   inline ~ast_node_list();
  1359.   inline __isl_give isl_ast_node_list *copy() const &;
  1360.   inline __isl_give isl_ast_node_list *copy() && = delete;
  1361.   inline __isl_keep isl_ast_node_list *get() const;
  1362.   inline __isl_give isl_ast_node_list *release();
  1363.   inline bool is_null() const;
  1364.   inline isl::ctx ctx() const;
  1365.  
  1366.   inline isl::ast_node_list add(isl::ast_node el) const;
  1367.   inline isl::ast_node at(int index) const;
  1368.   inline isl::ast_node get_at(int index) const;
  1369.   inline isl::ast_node_list clear() const;
  1370.   inline isl::ast_node_list concat(isl::ast_node_list list2) const;
  1371.   inline isl::ast_node_list drop(unsigned int first, unsigned int n) const;
  1372.   inline stat foreach(const std::function<stat(isl::ast_node)> &fn) const;
  1373.   inline isl::ast_node_list insert(unsigned int pos, isl::ast_node el) const;
  1374.   inline class size size() const;
  1375. };
  1376.  
  1377. // declarations for isl::ast_node_mark
  1378.  
  1379. class ast_node_mark : public ast_node {
  1380.   template <class T>
  1381.   friend boolean ast_node::isa() const;
  1382.   friend ast_node_mark ast_node::as<ast_node_mark>() const;
  1383.   static const auto type = isl_ast_node_mark;
  1384.  
  1385. protected:
  1386.   inline explicit ast_node_mark(__isl_take isl_ast_node *ptr);
  1387.  
  1388. public:
  1389.   inline /* implicit */ ast_node_mark();
  1390.   inline /* implicit */ ast_node_mark(const ast_node_mark &obj);
  1391.   inline ast_node_mark &operator=(ast_node_mark obj);
  1392.   inline isl::ctx ctx() const;
  1393.  
  1394.   inline isl::id id() const;
  1395.   inline isl::id get_id() const;
  1396.   inline isl::ast_node node() const;
  1397.   inline isl::ast_node get_node() const;
  1398. };
  1399.  
  1400. // declarations for isl::ast_node_user
  1401.  
  1402. class ast_node_user : public ast_node {
  1403.   template <class T>
  1404.   friend boolean ast_node::isa() const;
  1405.   friend ast_node_user ast_node::as<ast_node_user>() const;
  1406.   static const auto type = isl_ast_node_user;
  1407.  
  1408. protected:
  1409.   inline explicit ast_node_user(__isl_take isl_ast_node *ptr);
  1410.  
  1411. public:
  1412.   inline /* implicit */ ast_node_user();
  1413.   inline /* implicit */ ast_node_user(const ast_node_user &obj);
  1414.   inline ast_node_user &operator=(ast_node_user obj);
  1415.   inline isl::ctx ctx() const;
  1416.  
  1417.   inline isl::ast_expr expr() const;
  1418.   inline isl::ast_expr get_expr() const;
  1419. };
  1420.  
  1421. // declarations for isl::basic_map
  1422. inline basic_map manage(__isl_take isl_basic_map *ptr);
  1423. inline basic_map manage_copy(__isl_keep isl_basic_map *ptr);
  1424.  
  1425. class basic_map {
  1426.   friend inline basic_map manage(__isl_take isl_basic_map *ptr);
  1427.   friend inline basic_map manage_copy(__isl_keep isl_basic_map *ptr);
  1428.  
  1429. protected:
  1430.   isl_basic_map *ptr = nullptr;
  1431.  
  1432.   inline explicit basic_map(__isl_take isl_basic_map *ptr);
  1433.  
  1434. public:
  1435.   inline /* implicit */ basic_map();
  1436.   inline /* implicit */ basic_map(const basic_map &obj);
  1437.   inline explicit basic_map(isl::ctx ctx, const std::string &str);
  1438.   inline basic_map &operator=(basic_map obj);
  1439.   inline ~basic_map();
  1440.   inline __isl_give isl_basic_map *copy() const &;
  1441.   inline __isl_give isl_basic_map *copy() && = delete;
  1442.   inline __isl_keep isl_basic_map *get() const;
  1443.   inline __isl_give isl_basic_map *release();
  1444.   inline bool is_null() const;
  1445.   inline isl::ctx ctx() const;
  1446.  
  1447.   inline isl::map add_constraint(const isl::constraint &constraint) const;
  1448.   inline isl::map add_dims(isl::dim type, unsigned int n) const;
  1449.   inline isl::basic_map affine_hull() const;
  1450.   inline isl::map align_params(const isl::space &model) const;
  1451.   inline isl::basic_map apply_domain(isl::basic_map bmap2) const;
  1452.   inline isl::map apply_domain(const isl::map &map2) const;
  1453.   inline isl::union_map apply_domain(const isl::union_map &umap2) const;
  1454.   inline isl::basic_map apply_range(isl::basic_map bmap2) const;
  1455.   inline isl::map apply_range(const isl::map &map2) const;
  1456.   inline isl::union_map apply_range(const isl::union_map &umap2) const;
  1457.   inline isl::map as_map() const;
  1458.   inline isl::multi_union_pw_aff as_multi_union_pw_aff() const;
  1459.   inline isl::pw_multi_aff as_pw_multi_aff() const;
  1460.   inline isl::union_pw_multi_aff as_union_pw_multi_aff() const;
  1461.   inline isl::basic_map_list basic_map_list() const;
  1462.   inline isl::set bind_domain(const isl::multi_id &tuple) const;
  1463.   inline isl::set bind_range(const isl::multi_id &tuple) const;
  1464.   inline boolean can_curry() const;
  1465.   inline isl::map coalesce() const;
  1466.   inline isl::map complement() const;
  1467.   inline isl::union_map compute_divs() const;
  1468.   inline isl::map curry() const;
  1469.   inline isl::basic_set deltas() const;
  1470.   inline isl::basic_map detect_equalities() const;
  1471.   inline class size dim(isl::dim type) const;
  1472.   inline isl::pw_aff dim_max(int pos) const;
  1473.   inline isl::pw_aff dim_min(int pos) const;
  1474.   inline isl::basic_set domain() const;
  1475.   inline isl::map domain_factor_domain() const;
  1476.   inline isl::map domain_factor_range() const;
  1477.   inline isl::map domain_map() const;
  1478.   inline isl::union_pw_multi_aff domain_map_union_pw_multi_aff() const;
  1479.   inline isl::map domain_product(const isl::map &map2) const;
  1480.   inline isl::union_map domain_product(const isl::union_map &umap2) const;
  1481.   inline class size domain_tuple_dim() const;
  1482.   inline isl::id domain_tuple_id() const;
  1483.   inline isl::map eq_at(const isl::multi_pw_aff &mpa) const;
  1484.   inline isl::union_map eq_at(const isl::multi_union_pw_aff &mupa) const;
  1485.   static inline isl::basic_map equal(isl::space space, unsigned int n_equal);
  1486.   inline isl::basic_map equate(isl::dim type1, int pos1, isl::dim type2, int pos2) const;
  1487.   inline boolean every_map(const std::function<boolean(isl::map)> &test) const;
  1488.   inline isl::map extract_map(const isl::space &space) const;
  1489.   inline isl::map factor_domain() const;
  1490.   inline isl::map factor_range() const;
  1491.   inline isl::basic_map fix_si(isl::dim type, unsigned int pos, int value) const;
  1492.   inline isl::basic_map fix_val(isl::dim type, unsigned int pos, isl::val v) const;
  1493.   inline isl::basic_map fix_val(isl::dim type, unsigned int pos, long v) const;
  1494.   inline isl::union_map fixed_power(const isl::val &exp) const;
  1495.   inline isl::union_map fixed_power(long exp) const;
  1496.   inline isl::map flat_range_product(const isl::map &map2) const;
  1497.   inline isl::union_map flat_range_product(const isl::union_map &umap2) const;
  1498.   inline isl::basic_map flatten() const;
  1499.   inline isl::basic_map flatten_domain() const;
  1500.   inline isl::basic_map flatten_range() const;
  1501.   inline isl::map floordiv_val(const isl::val &d) const;
  1502.   inline isl::map floordiv_val(long d) const;
  1503.   inline stat foreach_basic_map(const std::function<stat(isl::basic_map)> &fn) const;
  1504.   inline stat foreach_map(const std::function<stat(isl::map)> &fn) const;
  1505.   static inline isl::basic_map from_aff(isl::aff aff);
  1506.   static inline isl::basic_map from_domain_and_range(isl::basic_set domain, isl::basic_set range);
  1507.   inline isl::basic_map gist(isl::basic_map context) const;
  1508.   inline isl::map gist(const isl::map &context) const;
  1509.   inline isl::union_map gist(const isl::union_map &context) const;
  1510.   inline isl::map gist_domain(const isl::set &context) const;
  1511.   inline isl::union_map gist_domain(const isl::union_set &uset) const;
  1512.   inline isl::map gist_params(const isl::set &context) const;
  1513.   inline isl::union_map gist_range(const isl::union_set &uset) const;
  1514.   inline boolean has_domain_tuple_id() const;
  1515.   inline boolean has_equal_space(const isl::map &map2) const;
  1516.   inline boolean has_range_tuple_id() const;
  1517.   inline boolean has_tuple_id(isl::dim type) const;
  1518.   inline boolean has_tuple_name(isl::dim type) const;
  1519.   inline isl::basic_map intersect(isl::basic_map bmap2) const;
  1520.   inline isl::map intersect(const isl::map &map2) const;
  1521.   inline isl::union_map intersect(const isl::union_map &umap2) const;
  1522.   inline isl::basic_map intersect_domain(isl::basic_set bset) const;
  1523.   inline isl::map intersect_domain(const isl::set &set) const;
  1524.   inline isl::union_map intersect_domain(const isl::space &space) const;
  1525.   inline isl::union_map intersect_domain(const isl::union_set &uset) const;
  1526.   inline isl::basic_map intersect_domain(const isl::point &bset) const;
  1527.   inline isl::map intersect_domain_factor_domain(const isl::map &factor) const;
  1528.   inline isl::union_map intersect_domain_factor_domain(const isl::union_map &factor) const;
  1529.   inline isl::map intersect_domain_factor_range(const isl::map &factor) const;
  1530.   inline isl::union_map intersect_domain_factor_range(const isl::union_map &factor) const;
  1531.   inline isl::map intersect_params(const isl::set &params) const;
  1532.   inline isl::basic_map intersect_range(isl::basic_set bset) const;
  1533.   inline isl::map intersect_range(const isl::set &set) const;
  1534.   inline isl::union_map intersect_range(const isl::space &space) const;
  1535.   inline isl::union_map intersect_range(const isl::union_set &uset) const;
  1536.   inline isl::basic_map intersect_range(const isl::point &bset) const;
  1537.   inline isl::map intersect_range_factor_domain(const isl::map &factor) const;
  1538.   inline isl::union_map intersect_range_factor_domain(const isl::union_map &factor) const;
  1539.   inline isl::map intersect_range_factor_range(const isl::map &factor) const;
  1540.   inline isl::union_map intersect_range_factor_range(const isl::union_map &factor) const;
  1541.   inline boolean involves_dims(isl::dim type, unsigned int first, unsigned int n) const;
  1542.   inline boolean is_bijective() const;
  1543.   inline boolean is_disjoint(const isl::map &map2) const;
  1544.   inline boolean is_disjoint(const isl::union_map &umap2) const;
  1545.   inline boolean is_empty() const;
  1546.   inline boolean is_equal(const isl::basic_map &bmap2) const;
  1547.   inline boolean is_equal(const isl::map &map2) const;
  1548.   inline boolean is_equal(const isl::union_map &umap2) const;
  1549.   inline boolean is_injective() const;
  1550.   inline boolean is_single_valued() const;
  1551.   inline boolean is_strict_subset(const isl::map &map2) const;
  1552.   inline boolean is_strict_subset(const isl::union_map &umap2) const;
  1553.   inline boolean is_subset(const isl::basic_map &bmap2) const;
  1554.   inline boolean is_subset(const isl::map &map2) const;
  1555.   inline boolean is_subset(const isl::union_map &umap2) const;
  1556.   inline boolean isa_map() const;
  1557.   inline isl::map lex_ge_at(const isl::multi_pw_aff &mpa) const;
  1558.   inline isl::map lex_gt_at(const isl::multi_pw_aff &mpa) const;
  1559.   inline isl::map lex_le_at(const isl::multi_pw_aff &mpa) const;
  1560.   inline isl::map lex_lt_at(const isl::multi_pw_aff &mpa) const;
  1561.   inline isl::map lexmax() const;
  1562.   inline isl::pw_multi_aff lexmax_pw_multi_aff() const;
  1563.   inline isl::map lexmin() const;
  1564.   inline isl::pw_multi_aff lexmin_pw_multi_aff() const;
  1565.   inline isl::map lower_bound(const isl::multi_pw_aff &lower) const;
  1566.   inline isl::map lower_bound_si(isl::dim type, unsigned int pos, int value) const;
  1567.   inline isl::map_list map_list() const;
  1568.   inline isl::multi_pw_aff max_multi_pw_aff() const;
  1569.   inline isl::multi_pw_aff min_multi_pw_aff() const;
  1570.   inline isl::map move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const;
  1571.   inline class size n_basic_map() const;
  1572.   inline isl::map order_lt(isl::dim type1, int pos1, isl::dim type2, int pos2) const;
  1573.   inline isl::set params() const;
  1574.   inline isl::val plain_get_val_if_fixed(isl::dim type, unsigned int pos) const;
  1575.   inline isl::basic_map polyhedral_hull() const;
  1576.   inline isl::map preimage_domain(const isl::multi_aff &ma) const;
  1577.   inline isl::map preimage_domain(const isl::multi_pw_aff &mpa) const;
  1578.   inline isl::map preimage_domain(const isl::pw_multi_aff &pma) const;
  1579.   inline isl::union_map preimage_domain(const isl::union_pw_multi_aff &upma) const;
  1580.   inline isl::map preimage_range(const isl::multi_aff &ma) const;
  1581.   inline isl::map preimage_range(const isl::pw_multi_aff &pma) const;
  1582.   inline isl::union_map preimage_range(const isl::union_pw_multi_aff &upma) const;
  1583.   inline isl::map product(const isl::map &map2) const;
  1584.   inline isl::union_map product(const isl::union_map &umap2) const;
  1585.   inline isl::map project_out(isl::dim type, unsigned int first, unsigned int n) const;
  1586.   inline isl::map project_out_all_params() const;
  1587.   inline isl::set range() const;
  1588.   inline isl::map range_factor_domain() const;
  1589.   inline isl::map range_factor_range() const;
  1590.   inline isl::fixed_box range_lattice_tile() const;
  1591.   inline isl::map range_map() const;
  1592.   inline isl::map range_product(const isl::map &map2) const;
  1593.   inline isl::union_map range_product(const isl::union_map &umap2) const;
  1594.   inline isl::map range_reverse() const;
  1595.   inline isl::fixed_box range_simple_fixed_box_hull() const;
  1596.   inline class size range_tuple_dim() const;
  1597.   inline isl::id range_tuple_id() const;
  1598.   inline isl::basic_map reverse() const;
  1599.   inline isl::basic_map sample() const;
  1600.   inline isl::map set_domain_tuple(const isl::id &id) const;
  1601.   inline isl::map set_domain_tuple(const std::string &id) const;
  1602.   inline isl::map set_range_tuple(const isl::id &id) const;
  1603.   inline isl::map set_range_tuple(const std::string &id) const;
  1604.   inline isl::map set_tuple_id(isl::dim type, const isl::id &id) const;
  1605.   inline isl::map set_tuple_id(isl::dim type, const std::string &id) const;
  1606.   inline isl::space space() const;
  1607.   inline isl::map subtract(const isl::map &map2) const;
  1608.   inline isl::union_map subtract(const isl::union_map &umap2) const;
  1609.   inline isl::union_map subtract_domain(const isl::union_set &dom) const;
  1610.   inline isl::union_map subtract_range(const isl::union_set &dom) const;
  1611.   inline isl::map sum(const isl::map &map2) const;
  1612.   inline isl::basic_map_list to_list() const;
  1613.   inline isl::union_map to_union_map() const;
  1614.   inline isl::id tuple_id(isl::dim type) const;
  1615.   inline isl::map uncurry() const;
  1616.   inline isl::map unite(isl::basic_map bmap2) const;
  1617.   inline isl::map unite(const isl::map &map2) const;
  1618.   inline isl::union_map unite(const isl::union_map &umap2) const;
  1619.   static inline isl::basic_map universe(isl::space space);
  1620.   inline isl::basic_map unshifted_simple_hull() const;
  1621.   inline isl::map upper_bound(const isl::multi_pw_aff &upper) const;
  1622.   inline isl::map upper_bound_si(isl::dim type, unsigned int pos, int value) const;
  1623.   inline isl::set wrap() const;
  1624.   inline isl::map zip() const;
  1625. };
  1626.  
  1627. // declarations for isl::basic_map_list
  1628. inline basic_map_list manage(__isl_take isl_basic_map_list *ptr);
  1629. inline basic_map_list manage_copy(__isl_keep isl_basic_map_list *ptr);
  1630.  
  1631. class basic_map_list {
  1632.   friend inline basic_map_list manage(__isl_take isl_basic_map_list *ptr);
  1633.   friend inline basic_map_list manage_copy(__isl_keep isl_basic_map_list *ptr);
  1634.  
  1635. protected:
  1636.   isl_basic_map_list *ptr = nullptr;
  1637.  
  1638.   inline explicit basic_map_list(__isl_take isl_basic_map_list *ptr);
  1639.  
  1640. public:
  1641.   inline /* implicit */ basic_map_list();
  1642.   inline /* implicit */ basic_map_list(const basic_map_list &obj);
  1643.   inline explicit basic_map_list(isl::ctx ctx, int n);
  1644.   inline explicit basic_map_list(isl::basic_map el);
  1645.   inline basic_map_list &operator=(basic_map_list obj);
  1646.   inline ~basic_map_list();
  1647.   inline __isl_give isl_basic_map_list *copy() const &;
  1648.   inline __isl_give isl_basic_map_list *copy() && = delete;
  1649.   inline __isl_keep isl_basic_map_list *get() const;
  1650.   inline __isl_give isl_basic_map_list *release();
  1651.   inline bool is_null() const;
  1652.   inline isl::ctx ctx() const;
  1653.  
  1654.   inline isl::basic_map_list add(isl::basic_map el) const;
  1655.   inline isl::basic_map at(int index) const;
  1656.   inline isl::basic_map get_at(int index) const;
  1657.   inline isl::basic_map_list clear() const;
  1658.   inline isl::basic_map_list concat(isl::basic_map_list list2) const;
  1659.   inline isl::basic_map_list drop(unsigned int first, unsigned int n) const;
  1660.   inline stat foreach(const std::function<stat(isl::basic_map)> &fn) const;
  1661.   inline isl::basic_map_list insert(unsigned int pos, isl::basic_map el) const;
  1662.   inline class size size() const;
  1663. };
  1664.  
  1665. // declarations for isl::basic_set
  1666. inline basic_set manage(__isl_take isl_basic_set *ptr);
  1667. inline basic_set manage_copy(__isl_keep isl_basic_set *ptr);
  1668.  
  1669. class basic_set {
  1670.   friend inline basic_set manage(__isl_take isl_basic_set *ptr);
  1671.   friend inline basic_set manage_copy(__isl_keep isl_basic_set *ptr);
  1672.  
  1673. protected:
  1674.   isl_basic_set *ptr = nullptr;
  1675.  
  1676.   inline explicit basic_set(__isl_take isl_basic_set *ptr);
  1677.  
  1678. public:
  1679.   inline /* implicit */ basic_set();
  1680.   inline /* implicit */ basic_set(const basic_set &obj);
  1681.   inline /* implicit */ basic_set(isl::point pnt);
  1682.   inline explicit basic_set(isl::ctx ctx, const std::string &str);
  1683.   inline basic_set &operator=(basic_set obj);
  1684.   inline ~basic_set();
  1685.   inline __isl_give isl_basic_set *copy() const &;
  1686.   inline __isl_give isl_basic_set *copy() && = delete;
  1687.   inline __isl_keep isl_basic_set *get() const;
  1688.   inline __isl_give isl_basic_set *release();
  1689.   inline bool is_null() const;
  1690.   inline isl::ctx ctx() const;
  1691.  
  1692.   inline isl::set add_constraint(const isl::constraint &constraint) const;
  1693.   inline isl::set add_dims(isl::dim type, unsigned int n) const;
  1694.   inline isl::basic_set affine_hull() const;
  1695.   inline isl::set align_params(const isl::space &model) const;
  1696.   inline isl::basic_set apply(isl::basic_map bmap) const;
  1697.   inline isl::set apply(const isl::map &map) const;
  1698.   inline isl::union_set apply(const isl::union_map &umap) const;
  1699.   inline isl::pw_multi_aff as_pw_multi_aff() const;
  1700.   inline isl::set as_set() const;
  1701.   inline isl::basic_set_list basic_set_list() const;
  1702.   inline isl::set bind(const isl::multi_id &tuple) const;
  1703.   inline isl::set coalesce() const;
  1704.   inline isl::set complement() const;
  1705.   inline isl::union_set compute_divs() const;
  1706.   inline boolean contains(const isl::space &space) const;
  1707.   inline isl::basic_set convex_hull() const;
  1708.   inline isl::basic_set detect_equalities() const;
  1709.   inline class size dim(isl::dim type) const;
  1710.   inline boolean dim_has_any_lower_bound(isl::dim type, unsigned int pos) const;
  1711.   inline isl::id dim_id(isl::dim type, unsigned int pos) const;
  1712.   inline isl::pw_aff dim_max(int pos) const;
  1713.   inline isl::val dim_max_val(int pos) const;
  1714.   inline isl::pw_aff dim_min(int pos) const;
  1715.   inline isl::val dim_min_val(int pos) const;
  1716.   inline std::string dim_name(isl::dim type, unsigned int pos) const;
  1717.   inline isl::aff div(int pos) const;
  1718.   inline isl::aff get_div(int pos) const;
  1719.   inline isl::set drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const;
  1720.   inline isl::set eliminate(isl::dim type, unsigned int first, unsigned int n) const;
  1721.   inline boolean every_set(const std::function<boolean(isl::set)> &test) const;
  1722.   inline isl::set extract_set(const isl::space &space) const;
  1723.   inline int find_dim_by_id(isl::dim type, const isl::id &id) const;
  1724.   inline int find_dim_by_id(isl::dim type, const std::string &id) const;
  1725.   inline isl::basic_set fix_si(isl::dim type, unsigned int pos, int value) const;
  1726.   inline isl::basic_set fix_val(isl::dim type, unsigned int pos, isl::val v) const;
  1727.   inline isl::basic_set fix_val(isl::dim type, unsigned int pos, long v) const;
  1728.   inline isl::basic_set flatten() const;
  1729.   inline stat foreach_basic_set(const std::function<stat(isl::basic_set)> &fn) const;
  1730.   inline stat foreach_point(const std::function<stat(isl::point)> &fn) const;
  1731.   inline stat foreach_set(const std::function<stat(isl::set)> &fn) const;
  1732.   inline isl::basic_set gist(isl::basic_set context) const;
  1733.   inline isl::set gist(const isl::set &context) const;
  1734.   inline isl::union_set gist(const isl::union_set &context) const;
  1735.   inline isl::basic_set gist(const isl::point &context) const;
  1736.   inline isl::set gist_params(const isl::set &context) const;
  1737.   inline boolean has_equal_space(const isl::set &set2) const;
  1738.   inline isl::map identity() const;
  1739.   inline isl::union_pw_multi_aff identity_union_pw_multi_aff() const;
  1740.   inline isl::pw_aff indicator_function() const;
  1741.   inline isl::set insert_dims(isl::dim type, unsigned int pos, unsigned int n) const;
  1742.   inline isl::map insert_domain(const isl::space &domain) const;
  1743.   inline isl::basic_set intersect(isl::basic_set bset2) const;
  1744.   inline isl::set intersect(const isl::set &set2) const;
  1745.   inline isl::union_set intersect(const isl::union_set &uset2) const;
  1746.   inline isl::basic_set intersect(const isl::point &bset2) const;
  1747.   inline isl::basic_set intersect_params(isl::basic_set bset2) const;
  1748.   inline isl::set intersect_params(const isl::set &params) const;
  1749.   inline isl::basic_set intersect_params(const isl::point &bset2) const;
  1750.   inline boolean involves_dims(isl::dim type, unsigned int first, unsigned int n) const;
  1751.   inline boolean involves_locals() const;
  1752.   inline boolean is_bounded() const;
  1753.   inline boolean is_disjoint(const isl::set &set2) const;
  1754.   inline boolean is_disjoint(const isl::union_set &uset2) const;
  1755.   inline boolean is_empty() const;
  1756.   inline boolean is_equal(const isl::basic_set &bset2) const;
  1757.   inline boolean is_equal(const isl::set &set2) const;
  1758.   inline boolean is_equal(const isl::union_set &uset2) const;
  1759.   inline boolean is_equal(const isl::point &bset2) const;
  1760.   inline boolean is_params() const;
  1761.   inline boolean is_singleton() const;
  1762.   inline boolean is_strict_subset(const isl::set &set2) const;
  1763.   inline boolean is_strict_subset(const isl::union_set &uset2) const;
  1764.   inline boolean is_subset(const isl::basic_set &bset2) const;
  1765.   inline boolean is_subset(const isl::set &set2) const;
  1766.   inline boolean is_subset(const isl::union_set &uset2) const;
  1767.   inline boolean is_subset(const isl::point &bset2) const;
  1768.   inline boolean is_wrapping() const;
  1769.   inline boolean isa_set() const;
  1770.   inline isl::set lexmax() const;
  1771.   inline isl::pw_multi_aff lexmax_pw_multi_aff() const;
  1772.   inline isl::set lexmin() const;
  1773.   inline isl::pw_multi_aff lexmin_pw_multi_aff() const;
  1774.   inline isl::set lower_bound(const isl::multi_pw_aff &lower) const;
  1775.   inline isl::set lower_bound(const isl::multi_val &lower) const;
  1776.   inline isl::set lower_bound_si(isl::dim type, unsigned int pos, int value) const;
  1777.   inline isl::set lower_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const;
  1778.   inline isl::set lower_bound_val(isl::dim type, unsigned int pos, long value) const;
  1779.   inline isl::multi_pw_aff max_multi_pw_aff() const;
  1780.   inline isl::val max_val(const isl::aff &obj) const;
  1781.   inline isl::multi_pw_aff min_multi_pw_aff() const;
  1782.   inline isl::val min_val(const isl::aff &obj) const;
  1783.   inline class size n_basic_set() const;
  1784.   inline isl::basic_set params() const;
  1785.   inline isl::val plain_get_val_if_fixed(isl::dim type, unsigned int pos) const;
  1786.   inline isl::multi_val plain_multi_val_if_fixed() const;
  1787.   inline isl::basic_set polyhedral_hull() const;
  1788.   inline isl::set preimage(const isl::multi_aff &ma) const;
  1789.   inline isl::set preimage(const isl::multi_pw_aff &mpa) const;
  1790.   inline isl::set preimage(const isl::pw_multi_aff &pma) const;
  1791.   inline isl::union_set preimage(const isl::union_pw_multi_aff &upma) const;
  1792.   inline isl::set product(const isl::set &set2) const;
  1793.   inline isl::basic_set project_out(isl::dim type, unsigned int first, unsigned int n) const;
  1794.   inline isl::set project_out_all_params() const;
  1795.   inline isl::set project_out_param(const isl::id &id) const;
  1796.   inline isl::set project_out_param(const std::string &id) const;
  1797.   inline isl::set project_out_param(const isl::id_list &list) const;
  1798.   inline isl::pw_multi_aff pw_multi_aff_on_domain(const isl::multi_val &mv) const;
  1799.   inline isl::set remove_dims(isl::dim type, unsigned int first, unsigned int n) const;
  1800.   inline isl::set remove_divs() const;
  1801.   inline isl::set remove_redundancies() const;
  1802.   inline isl::set reset_tuple_id() const;
  1803.   inline isl::basic_set sample() const;
  1804.   inline isl::point sample_point() const;
  1805.   inline isl::set set_dim_id(isl::dim type, unsigned int pos, const isl::id &id) const;
  1806.   inline isl::set set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const;
  1807.   inline isl::set_list set_list() const;
  1808.   inline isl::set set_tuple_id(const isl::id &id) const;
  1809.   inline isl::set set_tuple_id(const std::string &id) const;
  1810.   inline isl::fixed_box simple_fixed_box_hull() const;
  1811.   inline isl::basic_set simple_hull() const;
  1812.   inline isl::space space() const;
  1813.   inline isl::space get_space() const;
  1814.   inline isl::val stride(int pos) const;
  1815.   inline isl::set subtract(const isl::set &set2) const;
  1816.   inline isl::union_set subtract(const isl::union_set &uset2) const;
  1817.   inline isl::basic_set_list to_list() const;
  1818.   inline isl::set to_set() const;
  1819.   inline isl::union_set to_union_set() const;
  1820.   inline isl::map translation() const;
  1821.   inline class size tuple_dim() const;
  1822.   inline isl::id tuple_id() const;
  1823.   inline std::string tuple_name() const;
  1824.   inline isl::set unbind_params(const isl::multi_id &tuple) const;
  1825.   inline isl::map unbind_params_insert_domain(const isl::multi_id &domain) const;
  1826.   inline isl::set unite(isl::basic_set bset2) const;
  1827.   inline isl::set unite(const isl::set &set2) const;
  1828.   inline isl::union_set unite(const isl::union_set &uset2) const;
  1829.   inline isl::set unite(const isl::point &bset2) const;
  1830.   static inline isl::basic_set universe(isl::space space);
  1831.   inline isl::basic_set unshifted_simple_hull() const;
  1832.   inline isl::map unwrap() const;
  1833.   inline isl::set upper_bound(const isl::multi_pw_aff &upper) const;
  1834.   inline isl::set upper_bound(const isl::multi_val &upper) const;
  1835.   inline isl::set upper_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const;
  1836.   inline isl::set upper_bound_val(isl::dim type, unsigned int pos, long value) const;
  1837. };
  1838.  
  1839. // declarations for isl::basic_set_list
  1840. inline basic_set_list manage(__isl_take isl_basic_set_list *ptr);
  1841. inline basic_set_list manage_copy(__isl_keep isl_basic_set_list *ptr);
  1842.  
  1843. class basic_set_list {
  1844.   friend inline basic_set_list manage(__isl_take isl_basic_set_list *ptr);
  1845.   friend inline basic_set_list manage_copy(__isl_keep isl_basic_set_list *ptr);
  1846.  
  1847. protected:
  1848.   isl_basic_set_list *ptr = nullptr;
  1849.  
  1850.   inline explicit basic_set_list(__isl_take isl_basic_set_list *ptr);
  1851.  
  1852. public:
  1853.   inline /* implicit */ basic_set_list();
  1854.   inline /* implicit */ basic_set_list(const basic_set_list &obj);
  1855.   inline explicit basic_set_list(isl::ctx ctx, int n);
  1856.   inline explicit basic_set_list(isl::basic_set el);
  1857.   inline basic_set_list &operator=(basic_set_list obj);
  1858.   inline ~basic_set_list();
  1859.   inline __isl_give isl_basic_set_list *copy() const &;
  1860.   inline __isl_give isl_basic_set_list *copy() && = delete;
  1861.   inline __isl_keep isl_basic_set_list *get() const;
  1862.   inline __isl_give isl_basic_set_list *release();
  1863.   inline bool is_null() const;
  1864.   inline isl::ctx ctx() const;
  1865.  
  1866.   inline isl::basic_set_list add(isl::basic_set el) const;
  1867.   inline isl::basic_set at(int index) const;
  1868.   inline isl::basic_set get_at(int index) const;
  1869.   inline isl::basic_set_list clear() const;
  1870.   inline isl::basic_set_list concat(isl::basic_set_list list2) const;
  1871.   inline isl::basic_set_list drop(unsigned int first, unsigned int n) const;
  1872.   inline stat foreach(const std::function<stat(isl::basic_set)> &fn) const;
  1873.   inline isl::basic_set_list insert(unsigned int pos, isl::basic_set el) const;
  1874.   inline class size size() const;
  1875. };
  1876.  
  1877. // declarations for isl::constraint
  1878. inline constraint manage(__isl_take isl_constraint *ptr);
  1879. inline constraint manage_copy(__isl_keep isl_constraint *ptr);
  1880.  
  1881. class constraint {
  1882.   friend inline constraint manage(__isl_take isl_constraint *ptr);
  1883.   friend inline constraint manage_copy(__isl_keep isl_constraint *ptr);
  1884.  
  1885. protected:
  1886.   isl_constraint *ptr = nullptr;
  1887.  
  1888.   inline explicit constraint(__isl_take isl_constraint *ptr);
  1889.  
  1890. public:
  1891.   inline /* implicit */ constraint();
  1892.   inline /* implicit */ constraint(const constraint &obj);
  1893.   inline constraint &operator=(constraint obj);
  1894.   inline ~constraint();
  1895.   inline __isl_give isl_constraint *copy() const &;
  1896.   inline __isl_give isl_constraint *copy() && = delete;
  1897.   inline __isl_keep isl_constraint *get() const;
  1898.   inline __isl_give isl_constraint *release();
  1899.   inline bool is_null() const;
  1900.   inline isl::ctx ctx() const;
  1901.  
  1902.   static inline isl::constraint alloc_equality(isl::local_space ls);
  1903.   static inline isl::constraint alloc_inequality(isl::local_space ls);
  1904.   inline isl::constraint set_coefficient_si(isl::dim type, int pos, int v) const;
  1905.   inline isl::constraint set_constant_si(int v) const;
  1906.   inline isl::constraint set_constant_val(isl::val v) const;
  1907.   inline isl::constraint set_constant_val(long v) const;
  1908. };
  1909.  
  1910. // declarations for isl::fixed_box
  1911. inline fixed_box manage(__isl_take isl_fixed_box *ptr);
  1912. inline fixed_box manage_copy(__isl_keep isl_fixed_box *ptr);
  1913.  
  1914. class fixed_box {
  1915.   friend inline fixed_box manage(__isl_take isl_fixed_box *ptr);
  1916.   friend inline fixed_box manage_copy(__isl_keep isl_fixed_box *ptr);
  1917.  
  1918. protected:
  1919.   isl_fixed_box *ptr = nullptr;
  1920.  
  1921.   inline explicit fixed_box(__isl_take isl_fixed_box *ptr);
  1922.  
  1923. public:
  1924.   inline /* implicit */ fixed_box();
  1925.   inline /* implicit */ fixed_box(const fixed_box &obj);
  1926.   inline fixed_box &operator=(fixed_box obj);
  1927.   inline ~fixed_box();
  1928.   inline __isl_give isl_fixed_box *copy() const &;
  1929.   inline __isl_give isl_fixed_box *copy() && = delete;
  1930.   inline __isl_keep isl_fixed_box *get() const;
  1931.   inline __isl_give isl_fixed_box *release();
  1932.   inline bool is_null() const;
  1933.   inline isl::ctx ctx() const;
  1934.  
  1935.   inline boolean is_valid() const;
  1936.   inline isl::multi_aff offset() const;
  1937.   inline isl::multi_aff get_offset() const;
  1938.   inline isl::multi_val size() const;
  1939.   inline isl::multi_val get_size() const;
  1940.   inline isl::space space() const;
  1941.   inline isl::space get_space() const;
  1942. };
  1943.  
  1944. // declarations for isl::id
  1945. inline id manage(__isl_take isl_id *ptr);
  1946. inline id manage_copy(__isl_keep isl_id *ptr);
  1947.  
  1948. class id {
  1949.   friend inline id manage(__isl_take isl_id *ptr);
  1950.   friend inline id manage_copy(__isl_keep isl_id *ptr);
  1951.  
  1952. protected:
  1953.   isl_id *ptr = nullptr;
  1954.  
  1955.   inline explicit id(__isl_take isl_id *ptr);
  1956.  
  1957. public:
  1958.   inline /* implicit */ id();
  1959.   inline /* implicit */ id(const id &obj);
  1960.   inline explicit id(isl::ctx ctx, const std::string &str);
  1961.   inline id &operator=(id obj);
  1962.   inline ~id();
  1963.   inline __isl_give isl_id *copy() const &;
  1964.   inline __isl_give isl_id *copy() && = delete;
  1965.   inline __isl_keep isl_id *get() const;
  1966.   inline __isl_give isl_id *release();
  1967.   inline bool is_null() const;
  1968.   inline isl::ctx ctx() const;
  1969.  
  1970.   static inline isl::id alloc(isl::ctx ctx, const std::string &name, void * user);
  1971.   inline std::string name() const;
  1972.   inline std::string get_name() const;
  1973.   inline isl::id_list to_list() const;
  1974.   inline void * user() const;
  1975.   inline void * get_user() const;
  1976. };
  1977.  
  1978. // declarations for isl::id_list
  1979. inline id_list manage(__isl_take isl_id_list *ptr);
  1980. inline id_list manage_copy(__isl_keep isl_id_list *ptr);
  1981.  
  1982. class id_list {
  1983.   friend inline id_list manage(__isl_take isl_id_list *ptr);
  1984.   friend inline id_list manage_copy(__isl_keep isl_id_list *ptr);
  1985.  
  1986. protected:
  1987.   isl_id_list *ptr = nullptr;
  1988.  
  1989.   inline explicit id_list(__isl_take isl_id_list *ptr);
  1990.  
  1991. public:
  1992.   inline /* implicit */ id_list();
  1993.   inline /* implicit */ id_list(const id_list &obj);
  1994.   inline explicit id_list(isl::ctx ctx, int n);
  1995.   inline explicit id_list(isl::id el);
  1996.   inline explicit id_list(isl::ctx ctx, const std::string &str);
  1997.   inline id_list &operator=(id_list obj);
  1998.   inline ~id_list();
  1999.   inline __isl_give isl_id_list *copy() const &;
  2000.   inline __isl_give isl_id_list *copy() && = delete;
  2001.   inline __isl_keep isl_id_list *get() const;
  2002.   inline __isl_give isl_id_list *release();
  2003.   inline bool is_null() const;
  2004.   inline isl::ctx ctx() const;
  2005.  
  2006.   inline isl::id_list add(isl::id el) const;
  2007.   inline isl::id_list add(const std::string &el) const;
  2008.   inline isl::id at(int index) const;
  2009.   inline isl::id get_at(int index) const;
  2010.   inline isl::id_list clear() const;
  2011.   inline isl::id_list concat(isl::id_list list2) const;
  2012.   inline isl::id_list drop(unsigned int first, unsigned int n) const;
  2013.   inline stat foreach(const std::function<stat(isl::id)> &fn) const;
  2014.   inline isl::id_list insert(unsigned int pos, isl::id el) const;
  2015.   inline isl::id_list insert(unsigned int pos, const std::string &el) const;
  2016.   inline class size size() const;
  2017. };
  2018.  
  2019. // declarations for isl::id_to_ast_expr
  2020. inline id_to_ast_expr manage(__isl_take isl_id_to_ast_expr *ptr);
  2021. inline id_to_ast_expr manage_copy(__isl_keep isl_id_to_ast_expr *ptr);
  2022.  
  2023. class id_to_ast_expr {
  2024.   friend inline id_to_ast_expr manage(__isl_take isl_id_to_ast_expr *ptr);
  2025.   friend inline id_to_ast_expr manage_copy(__isl_keep isl_id_to_ast_expr *ptr);
  2026.  
  2027. protected:
  2028.   isl_id_to_ast_expr *ptr = nullptr;
  2029.  
  2030.   inline explicit id_to_ast_expr(__isl_take isl_id_to_ast_expr *ptr);
  2031.  
  2032. public:
  2033.   inline /* implicit */ id_to_ast_expr();
  2034.   inline /* implicit */ id_to_ast_expr(const id_to_ast_expr &obj);
  2035.   inline id_to_ast_expr &operator=(id_to_ast_expr obj);
  2036.   inline ~id_to_ast_expr();
  2037.   inline __isl_give isl_id_to_ast_expr *copy() const &;
  2038.   inline __isl_give isl_id_to_ast_expr *copy() && = delete;
  2039.   inline __isl_keep isl_id_to_ast_expr *get() const;
  2040.   inline __isl_give isl_id_to_ast_expr *release();
  2041.   inline bool is_null() const;
  2042.   inline isl::ctx ctx() const;
  2043.  
  2044.   static inline isl::id_to_ast_expr alloc(isl::ctx ctx, int min_size);
  2045.   inline isl::id_to_ast_expr set(isl::id key, isl::ast_expr val) const;
  2046.   inline isl::id_to_ast_expr set(const std::string &key, const isl::ast_expr &val) const;
  2047. };
  2048.  
  2049. // declarations for isl::local_space
  2050. inline local_space manage(__isl_take isl_local_space *ptr);
  2051. inline local_space manage_copy(__isl_keep isl_local_space *ptr);
  2052.  
  2053. class local_space {
  2054.   friend inline local_space manage(__isl_take isl_local_space *ptr);
  2055.   friend inline local_space manage_copy(__isl_keep isl_local_space *ptr);
  2056.  
  2057. protected:
  2058.   isl_local_space *ptr = nullptr;
  2059.  
  2060.   inline explicit local_space(__isl_take isl_local_space *ptr);
  2061.  
  2062. public:
  2063.   inline /* implicit */ local_space();
  2064.   inline /* implicit */ local_space(const local_space &obj);
  2065.   inline explicit local_space(isl::space space);
  2066.   inline local_space &operator=(local_space obj);
  2067.   inline ~local_space();
  2068.   inline __isl_give isl_local_space *copy() const &;
  2069.   inline __isl_give isl_local_space *copy() && = delete;
  2070.   inline __isl_keep isl_local_space *get() const;
  2071.   inline __isl_give isl_local_space *release();
  2072.   inline bool is_null() const;
  2073.   inline isl::ctx ctx() const;
  2074.  
  2075. };
  2076.  
  2077. // declarations for isl::map
  2078. inline map manage(__isl_take isl_map *ptr);
  2079. inline map manage_copy(__isl_keep isl_map *ptr);
  2080.  
  2081. class map {
  2082.   friend inline map manage(__isl_take isl_map *ptr);
  2083.   friend inline map manage_copy(__isl_keep isl_map *ptr);
  2084.  
  2085. protected:
  2086.   isl_map *ptr = nullptr;
  2087.  
  2088.   inline explicit map(__isl_take isl_map *ptr);
  2089.  
  2090. public:
  2091.   inline /* implicit */ map();
  2092.   inline /* implicit */ map(const map &obj);
  2093.   inline /* implicit */ map(isl::basic_map bmap);
  2094.   inline explicit map(isl::ctx ctx, const std::string &str);
  2095.   inline map &operator=(map obj);
  2096.   inline ~map();
  2097.   inline __isl_give isl_map *copy() const &;
  2098.   inline __isl_give isl_map *copy() && = delete;
  2099.   inline __isl_keep isl_map *get() const;
  2100.   inline __isl_give isl_map *release();
  2101.   inline bool is_null() const;
  2102.   inline isl::ctx ctx() const;
  2103.  
  2104.   inline isl::map add_constraint(isl::constraint constraint) const;
  2105.   inline isl::map add_dims(isl::dim type, unsigned int n) const;
  2106.   inline isl::basic_map affine_hull() const;
  2107.   inline isl::map align_params(isl::space model) const;
  2108.   inline isl::map apply_domain(isl::map map2) const;
  2109.   inline isl::union_map apply_domain(const isl::union_map &umap2) const;
  2110.   inline isl::map apply_domain(const isl::basic_map &map2) const;
  2111.   inline isl::map apply_range(isl::map map2) const;
  2112.   inline isl::union_map apply_range(const isl::union_map &umap2) const;
  2113.   inline isl::map apply_range(const isl::basic_map &map2) const;
  2114.   inline isl::map as_map() const;
  2115.   inline isl::multi_union_pw_aff as_multi_union_pw_aff() const;
  2116.   inline isl::pw_multi_aff as_pw_multi_aff() const;
  2117.   inline isl::union_pw_multi_aff as_union_pw_multi_aff() const;
  2118.   inline isl::basic_map_list basic_map_list() const;
  2119.   inline isl::basic_map_list get_basic_map_list() const;
  2120.   inline isl::set bind_domain(isl::multi_id tuple) const;
  2121.   inline isl::set bind_range(isl::multi_id tuple) const;
  2122.   inline boolean can_curry() const;
  2123.   inline isl::map coalesce() const;
  2124.   inline isl::map complement() const;
  2125.   inline isl::union_map compute_divs() const;
  2126.   inline isl::map curry() const;
  2127.   inline isl::set deltas() const;
  2128.   inline isl::map detect_equalities() const;
  2129.   inline class size dim(isl::dim type) const;
  2130.   inline isl::pw_aff dim_max(int pos) const;
  2131.   inline isl::pw_aff dim_min(int pos) const;
  2132.   inline isl::set domain() const;
  2133.   inline isl::map domain_factor_domain() const;
  2134.   inline isl::map domain_factor_range() const;
  2135.   inline isl::map domain_map() const;
  2136.   inline isl::union_pw_multi_aff domain_map_union_pw_multi_aff() const;
  2137.   inline isl::map domain_product(isl::map map2) const;
  2138.   inline isl::union_map domain_product(const isl::union_map &umap2) const;
  2139.   inline isl::map domain_product(const isl::basic_map &map2) const;
  2140.   inline class size domain_tuple_dim() const;
  2141.   inline isl::id domain_tuple_id() const;
  2142.   inline isl::id get_domain_tuple_id() const;
  2143.   static inline isl::map empty(isl::space space);
  2144.   inline isl::map eq_at(isl::multi_pw_aff mpa) const;
  2145.   inline isl::union_map eq_at(const isl::multi_union_pw_aff &mupa) const;
  2146.   inline isl::map eq_at(const isl::aff &mpa) const;
  2147.   inline isl::map eq_at(const isl::multi_aff &mpa) const;
  2148.   inline isl::map eq_at(const isl::pw_aff &mpa) const;
  2149.   inline isl::map eq_at(const isl::pw_multi_aff &mpa) const;
  2150.   inline isl::map equate(isl::dim type1, int pos1, isl::dim type2, int pos2) const;
  2151.   inline boolean every_map(const std::function<boolean(isl::map)> &test) const;
  2152.   inline isl::map extract_map(const isl::space &space) const;
  2153.   inline isl::map factor_domain() const;
  2154.   inline isl::map factor_range() const;
  2155.   inline isl::map fix_si(isl::dim type, unsigned int pos, int value) const;
  2156.   inline isl::union_map fixed_power(const isl::val &exp) const;
  2157.   inline isl::union_map fixed_power(long exp) const;
  2158.   inline isl::map flat_range_product(isl::map map2) const;
  2159.   inline isl::union_map flat_range_product(const isl::union_map &umap2) const;
  2160.   inline isl::map flat_range_product(const isl::basic_map &map2) const;
  2161.   inline isl::map flatten() const;
  2162.   inline isl::map flatten_domain() const;
  2163.   inline isl::map flatten_range() const;
  2164.   inline isl::map floordiv_val(isl::val d) const;
  2165.   inline isl::map floordiv_val(long d) const;
  2166.   inline stat foreach_basic_map(const std::function<stat(isl::basic_map)> &fn) const;
  2167.   inline stat foreach_map(const std::function<stat(isl::map)> &fn) const;
  2168.   static inline isl::map from_aff(isl::aff aff);
  2169.   static inline isl::map from_domain(isl::set set);
  2170.   static inline isl::map from_domain_and_range(isl::set domain, isl::set range);
  2171.   static inline isl::map from_multi_aff(isl::multi_aff maff);
  2172.   static inline isl::map from_pw_aff(isl::pw_aff pwaff);
  2173.   static inline isl::map from_range(isl::set set);
  2174.   static inline isl::map from_union_map(isl::union_map umap);
  2175.   inline isl::map gist(isl::map context) const;
  2176.   inline isl::union_map gist(const isl::union_map &context) const;
  2177.   inline isl::map gist(const isl::basic_map &context) const;
  2178.   inline isl::map gist_domain(isl::set context) const;
  2179.   inline isl::union_map gist_domain(const isl::union_set &uset) const;
  2180.   inline isl::map gist_domain(const isl::basic_set &context) const;
  2181.   inline isl::map gist_domain(const isl::point &context) const;
  2182.   inline isl::map gist_params(isl::set context) const;
  2183.   inline isl::union_map gist_range(const isl::union_set &uset) const;
  2184.   inline boolean has_domain_tuple_id() const;
  2185.   inline boolean has_equal_space(const isl::map &map2) const;
  2186.   inline boolean has_range_tuple_id() const;
  2187.   inline boolean has_tuple_id(isl::dim type) const;
  2188.   inline boolean has_tuple_name(isl::dim type) const;
  2189.   static inline isl::map identity(isl::space space);
  2190.   inline isl::map intersect(isl::map map2) const;
  2191.   inline isl::union_map intersect(const isl::union_map &umap2) const;
  2192.   inline isl::map intersect(const isl::basic_map &map2) const;
  2193.   inline isl::map intersect_domain(isl::set set) const;
  2194.   inline isl::union_map intersect_domain(const isl::space &space) const;
  2195.   inline isl::union_map intersect_domain(const isl::union_set &uset) const;
  2196.   inline isl::map intersect_domain(const isl::basic_set &set) const;
  2197.   inline isl::map intersect_domain(const isl::point &set) const;
  2198.   inline isl::map intersect_domain_factor_domain(isl::map factor) const;
  2199.   inline isl::union_map intersect_domain_factor_domain(const isl::union_map &factor) const;
  2200.   inline isl::map intersect_domain_factor_domain(const isl::basic_map &factor) const;
  2201.   inline isl::map intersect_domain_factor_range(isl::map factor) const;
  2202.   inline isl::union_map intersect_domain_factor_range(const isl::union_map &factor) const;
  2203.   inline isl::map intersect_domain_factor_range(const isl::basic_map &factor) const;
  2204.   inline isl::map intersect_params(isl::set params) const;
  2205.   inline isl::map intersect_range(isl::set set) const;
  2206.   inline isl::union_map intersect_range(const isl::space &space) const;
  2207.   inline isl::union_map intersect_range(const isl::union_set &uset) const;
  2208.   inline isl::map intersect_range(const isl::basic_set &set) const;
  2209.   inline isl::map intersect_range(const isl::point &set) const;
  2210.   inline isl::map intersect_range_factor_domain(isl::map factor) const;
  2211.   inline isl::union_map intersect_range_factor_domain(const isl::union_map &factor) const;
  2212.   inline isl::map intersect_range_factor_domain(const isl::basic_map &factor) const;
  2213.   inline isl::map intersect_range_factor_range(isl::map factor) const;
  2214.   inline isl::union_map intersect_range_factor_range(const isl::union_map &factor) const;
  2215.   inline isl::map intersect_range_factor_range(const isl::basic_map &factor) const;
  2216.   inline boolean involves_dims(isl::dim type, unsigned int first, unsigned int n) const;
  2217.   inline boolean is_bijective() const;
  2218.   inline boolean is_disjoint(const isl::map &map2) const;
  2219.   inline boolean is_disjoint(const isl::union_map &umap2) const;
  2220.   inline boolean is_disjoint(const isl::basic_map &map2) const;
  2221.   inline boolean is_empty() const;
  2222.   inline boolean is_equal(const isl::map &map2) const;
  2223.   inline boolean is_equal(const isl::union_map &umap2) const;
  2224.   inline boolean is_equal(const isl::basic_map &map2) const;
  2225.   inline boolean is_injective() const;
  2226.   inline boolean is_single_valued() const;
  2227.   inline boolean is_strict_subset(const isl::map &map2) const;
  2228.   inline boolean is_strict_subset(const isl::union_map &umap2) const;
  2229.   inline boolean is_strict_subset(const isl::basic_map &map2) const;
  2230.   inline boolean is_subset(const isl::map &map2) const;
  2231.   inline boolean is_subset(const isl::union_map &umap2) const;
  2232.   inline boolean is_subset(const isl::basic_map &map2) const;
  2233.   inline boolean isa_map() const;
  2234.   static inline isl::map lex_ge(isl::space set_space);
  2235.   inline isl::map lex_ge_at(isl::multi_pw_aff mpa) const;
  2236.   static inline isl::map lex_gt(isl::space set_space);
  2237.   inline isl::map lex_gt_at(isl::multi_pw_aff mpa) const;
  2238.   static inline isl::map lex_le(isl::space set_space);
  2239.   inline isl::map lex_le_at(isl::multi_pw_aff mpa) const;
  2240.   static inline isl::map lex_lt(isl::space set_space);
  2241.   inline isl::map lex_lt_at(isl::multi_pw_aff mpa) const;
  2242.   inline isl::map lexmax() const;
  2243.   inline isl::pw_multi_aff lexmax_pw_multi_aff() const;
  2244.   inline isl::map lexmin() const;
  2245.   inline isl::pw_multi_aff lexmin_pw_multi_aff() const;
  2246.   inline isl::map lower_bound(isl::multi_pw_aff lower) const;
  2247.   inline isl::map lower_bound_si(isl::dim type, unsigned int pos, int value) const;
  2248.   inline isl::map_list map_list() const;
  2249.   inline isl::multi_pw_aff max_multi_pw_aff() const;
  2250.   inline isl::multi_pw_aff min_multi_pw_aff() const;
  2251.   inline isl::map move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const;
  2252.   inline class size n_basic_map() const;
  2253.   inline isl::map order_lt(isl::dim type1, int pos1, isl::dim type2, int pos2) const;
  2254.   inline isl::set params() const;
  2255.   inline isl::basic_map polyhedral_hull() const;
  2256.   inline isl::map preimage_domain(isl::multi_aff ma) const;
  2257.   inline isl::map preimage_domain(isl::multi_pw_aff mpa) const;
  2258.   inline isl::map preimage_domain(isl::pw_multi_aff pma) const;
  2259.   inline isl::union_map preimage_domain(const isl::union_pw_multi_aff &upma) const;
  2260.   inline isl::map preimage_range(isl::multi_aff ma) const;
  2261.   inline isl::map preimage_range(isl::pw_multi_aff pma) const;
  2262.   inline isl::union_map preimage_range(const isl::union_pw_multi_aff &upma) const;
  2263.   inline isl::map product(isl::map map2) const;
  2264.   inline isl::union_map product(const isl::union_map &umap2) const;
  2265.   inline isl::map product(const isl::basic_map &map2) const;
  2266.   inline isl::map project_out(isl::dim type, unsigned int first, unsigned int n) const;
  2267.   inline isl::map project_out_all_params() const;
  2268.   inline isl::set range() const;
  2269.   inline isl::map range_factor_domain() const;
  2270.   inline isl::map range_factor_range() const;
  2271.   inline isl::fixed_box range_lattice_tile() const;
  2272.   inline isl::fixed_box get_range_lattice_tile() const;
  2273.   inline isl::map range_map() const;
  2274.   inline isl::map range_product(isl::map map2) const;
  2275.   inline isl::union_map range_product(const isl::union_map &umap2) const;
  2276.   inline isl::map range_product(const isl::basic_map &map2) const;
  2277.   inline isl::map range_reverse() const;
  2278.   inline isl::fixed_box range_simple_fixed_box_hull() const;
  2279.   inline isl::fixed_box get_range_simple_fixed_box_hull() const;
  2280.   inline class size range_tuple_dim() const;
  2281.   inline isl::id range_tuple_id() const;
  2282.   inline isl::id get_range_tuple_id() const;
  2283.   inline isl::map reverse() const;
  2284.   inline isl::basic_map sample() const;
  2285.   inline isl::map set_domain_tuple(isl::id id) const;
  2286.   inline isl::map set_domain_tuple(const std::string &id) const;
  2287.   inline isl::map set_range_tuple(isl::id id) const;
  2288.   inline isl::map set_range_tuple(const std::string &id) const;
  2289.   inline isl::map set_tuple_id(isl::dim type, isl::id id) const;
  2290.   inline isl::map set_tuple_id(isl::dim type, const std::string &id) const;
  2291.   inline isl::space space() const;
  2292.   inline isl::space get_space() const;
  2293.   inline isl::map subtract(isl::map map2) const;
  2294.   inline isl::union_map subtract(const isl::union_map &umap2) const;
  2295.   inline isl::map subtract(const isl::basic_map &map2) const;
  2296.   inline isl::union_map subtract_domain(const isl::union_set &dom) const;
  2297.   inline isl::union_map subtract_range(const isl::union_set &dom) const;
  2298.   inline isl::map sum(isl::map map2) const;
  2299.   inline isl::map_list to_list() const;
  2300.   inline isl::union_map to_union_map() const;
  2301.   inline isl::id tuple_id(isl::dim type) const;
  2302.   inline isl::id get_tuple_id(isl::dim type) const;
  2303.   inline isl::map uncurry() const;
  2304.   inline isl::map unite(isl::map map2) const;
  2305.   inline isl::union_map unite(const isl::union_map &umap2) const;
  2306.   inline isl::map unite(const isl::basic_map &map2) const;
  2307.   static inline isl::map universe(isl::space space);
  2308.   inline isl::basic_map unshifted_simple_hull() const;
  2309.   inline isl::map upper_bound(isl::multi_pw_aff upper) const;
  2310.   inline isl::map upper_bound_si(isl::dim type, unsigned int pos, int value) const;
  2311.   inline isl::set wrap() const;
  2312.   inline isl::map zip() const;
  2313. };
  2314.  
  2315. // declarations for isl::map_list
  2316. inline map_list manage(__isl_take isl_map_list *ptr);
  2317. inline map_list manage_copy(__isl_keep isl_map_list *ptr);
  2318.  
  2319. class map_list {
  2320.   friend inline map_list manage(__isl_take isl_map_list *ptr);
  2321.   friend inline map_list manage_copy(__isl_keep isl_map_list *ptr);
  2322.  
  2323. protected:
  2324.   isl_map_list *ptr = nullptr;
  2325.  
  2326.   inline explicit map_list(__isl_take isl_map_list *ptr);
  2327.  
  2328. public:
  2329.   inline /* implicit */ map_list();
  2330.   inline /* implicit */ map_list(const map_list &obj);
  2331.   inline explicit map_list(isl::ctx ctx, int n);
  2332.   inline explicit map_list(isl::map el);
  2333.   inline explicit map_list(isl::ctx ctx, const std::string &str);
  2334.   inline map_list &operator=(map_list obj);
  2335.   inline ~map_list();
  2336.   inline __isl_give isl_map_list *copy() const &;
  2337.   inline __isl_give isl_map_list *copy() && = delete;
  2338.   inline __isl_keep isl_map_list *get() const;
  2339.   inline __isl_give isl_map_list *release();
  2340.   inline bool is_null() const;
  2341.   inline isl::ctx ctx() const;
  2342.  
  2343.   inline isl::map_list add(isl::map el) const;
  2344.   inline isl::map at(int index) const;
  2345.   inline isl::map get_at(int index) const;
  2346.   inline isl::map_list clear() const;
  2347.   inline isl::map_list concat(isl::map_list list2) const;
  2348.   inline isl::map_list drop(unsigned int first, unsigned int n) const;
  2349.   inline stat foreach(const std::function<stat(isl::map)> &fn) const;
  2350.   inline isl::map_list insert(unsigned int pos, isl::map el) const;
  2351.   inline class size size() const;
  2352. };
  2353.  
  2354. // declarations for isl::multi_aff
  2355. inline multi_aff manage(__isl_take isl_multi_aff *ptr);
  2356. inline multi_aff manage_copy(__isl_keep isl_multi_aff *ptr);
  2357.  
  2358. class multi_aff {
  2359.   friend inline multi_aff manage(__isl_take isl_multi_aff *ptr);
  2360.   friend inline multi_aff manage_copy(__isl_keep isl_multi_aff *ptr);
  2361.  
  2362. protected:
  2363.   isl_multi_aff *ptr = nullptr;
  2364.  
  2365.   inline explicit multi_aff(__isl_take isl_multi_aff *ptr);
  2366.  
  2367. public:
  2368.   inline /* implicit */ multi_aff();
  2369.   inline /* implicit */ multi_aff(const multi_aff &obj);
  2370.   inline /* implicit */ multi_aff(isl::aff aff);
  2371.   inline explicit multi_aff(isl::space space, isl::aff_list list);
  2372.   inline explicit multi_aff(isl::ctx ctx, const std::string &str);
  2373.   inline multi_aff &operator=(multi_aff obj);
  2374.   inline ~multi_aff();
  2375.   inline __isl_give isl_multi_aff *copy() const &;
  2376.   inline __isl_give isl_multi_aff *copy() && = delete;
  2377.   inline __isl_keep isl_multi_aff *get() const;
  2378.   inline __isl_give isl_multi_aff *release();
  2379.   inline bool is_null() const;
  2380.   inline isl::ctx ctx() const;
  2381.  
  2382.   inline isl::multi_aff add(isl::multi_aff multi2) const;
  2383.   inline isl::multi_pw_aff add(const isl::multi_pw_aff &multi2) const;
  2384.   inline isl::multi_union_pw_aff add(const isl::multi_union_pw_aff &multi2) const;
  2385.   inline isl::pw_multi_aff add(const isl::pw_multi_aff &pma2) const;
  2386.   inline isl::union_pw_multi_aff add(const isl::union_pw_multi_aff &upma2) const;
  2387.   inline isl::multi_aff add(const isl::aff &multi2) const;
  2388.   inline isl::multi_aff add_constant(isl::multi_val mv) const;
  2389.   inline isl::multi_aff add_constant(isl::val v) const;
  2390.   inline isl::multi_aff add_constant(long v) const;
  2391.   inline isl::union_pw_multi_aff add_pw_multi_aff(const isl::pw_multi_aff &pma) const;
  2392.   inline isl::union_pw_multi_aff apply(const isl::union_pw_multi_aff &upma2) const;
  2393.   inline isl::map as_map() const;
  2394.   inline isl::multi_aff as_multi_aff() const;
  2395.   inline isl::multi_union_pw_aff as_multi_union_pw_aff() const;
  2396.   inline isl::pw_multi_aff as_pw_multi_aff() const;
  2397.   inline isl::set as_set() const;
  2398.   inline isl::union_map as_union_map() const;
  2399.   inline isl::aff at(int pos) const;
  2400.   inline isl::aff get_at(int pos) const;
  2401.   inline isl::basic_set bind(isl::multi_id tuple) const;
  2402.   inline isl::multi_aff bind_domain(isl::multi_id tuple) const;
  2403.   inline isl::multi_aff bind_domain_wrapped_domain(isl::multi_id tuple) const;
  2404.   inline isl::pw_multi_aff coalesce() const;
  2405.   inline isl::multi_val constant_multi_val() const;
  2406.   inline isl::multi_val get_constant_multi_val() const;
  2407.   inline class size dim(isl::dim type) const;
  2408.   inline isl::set domain() const;
  2409.   static inline isl::multi_aff domain_map(isl::space space);
  2410.   inline isl::pw_multi_aff drop_dims(isl::dim type, unsigned int first, unsigned int n) const;
  2411.   inline isl::pw_multi_aff extract_pw_multi_aff(const isl::space &space) const;
  2412.   inline isl::multi_aff flat_range_product(isl::multi_aff multi2) const;
  2413.   inline isl::multi_pw_aff flat_range_product(const isl::multi_pw_aff &multi2) const;
  2414.   inline isl::multi_union_pw_aff flat_range_product(const isl::multi_union_pw_aff &multi2) const;
  2415.   inline isl::pw_multi_aff flat_range_product(const isl::pw_multi_aff &pma2) const;
  2416.   inline isl::union_pw_multi_aff flat_range_product(const isl::union_pw_multi_aff &upma2) const;
  2417.   inline isl::multi_aff flat_range_product(const isl::aff &multi2) const;
  2418.   inline isl::multi_aff floor() const;
  2419.   inline stat foreach_piece(const std::function<stat(isl::set, isl::multi_aff)> &fn) const;
  2420.   inline isl::multi_aff gist(isl::set context) const;
  2421.   inline isl::union_pw_multi_aff gist(const isl::union_set &context) const;
  2422.   inline isl::multi_aff gist(const isl::basic_set &context) const;
  2423.   inline isl::multi_aff gist(const isl::point &context) const;
  2424.   inline boolean has_range_tuple_id() const;
  2425.   static inline isl::multi_aff identity(isl::space space);
  2426.   inline isl::multi_aff identity() const;
  2427.   static inline isl::multi_aff identity_on_domain(isl::space space);
  2428.   inline isl::multi_aff insert_domain(isl::space domain) const;
  2429.   inline isl::pw_multi_aff intersect_domain(const isl::set &set) const;
  2430.   inline isl::union_pw_multi_aff intersect_domain(const isl::space &space) const;
  2431.   inline isl::union_pw_multi_aff intersect_domain(const isl::union_set &uset) const;
  2432.   inline isl::union_pw_multi_aff intersect_domain_wrapped_domain(const isl::union_set &uset) const;
  2433.   inline isl::union_pw_multi_aff intersect_domain_wrapped_range(const isl::union_set &uset) const;
  2434.   inline isl::pw_multi_aff intersect_params(const isl::set &set) const;
  2435.   inline boolean involves_locals() const;
  2436.   inline boolean involves_nan() const;
  2437.   inline boolean involves_param(const isl::id &id) const;
  2438.   inline boolean involves_param(const std::string &id) const;
  2439.   inline boolean involves_param(const isl::id_list &list) const;
  2440.   inline boolean isa_multi_aff() const;
  2441.   inline boolean isa_pw_multi_aff() const;
  2442.   inline isl::aff_list list() const;
  2443.   inline isl::aff_list get_list() const;
  2444.   inline isl::multi_pw_aff max(const isl::multi_pw_aff &multi2) const;
  2445.   inline isl::multi_val max_multi_val() const;
  2446.   inline isl::multi_pw_aff min(const isl::multi_pw_aff &multi2) const;
  2447.   inline isl::multi_val min_multi_val() const;
  2448.   static inline isl::multi_aff multi_val_on_domain(isl::space space, isl::multi_val mv);
  2449.   inline class size n_piece() const;
  2450.   inline isl::multi_aff neg() const;
  2451.   inline boolean plain_is_empty() const;
  2452.   inline boolean plain_is_equal(const isl::multi_aff &multi2) const;
  2453.   inline boolean plain_is_equal(const isl::multi_pw_aff &multi2) const;
  2454.   inline boolean plain_is_equal(const isl::multi_union_pw_aff &multi2) const;
  2455.   inline boolean plain_is_equal(const isl::aff &multi2) const;
  2456.   inline isl::pw_multi_aff preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const;
  2457.   inline isl::union_pw_multi_aff preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const;
  2458.   inline isl::multi_aff product(isl::multi_aff multi2) const;
  2459.   inline isl::multi_pw_aff product(const isl::multi_pw_aff &multi2) const;
  2460.   inline isl::pw_multi_aff product(const isl::pw_multi_aff &pma2) const;
  2461.   inline isl::multi_aff product(const isl::aff &multi2) const;
  2462.   inline isl::multi_aff pullback(isl::multi_aff ma2) const;
  2463.   inline isl::multi_pw_aff pullback(const isl::multi_pw_aff &mpa2) const;
  2464.   inline isl::pw_multi_aff pullback(const isl::pw_multi_aff &pma2) const;
  2465.   inline isl::union_pw_multi_aff pullback(const isl::union_pw_multi_aff &upma2) const;
  2466.   inline isl::multi_aff pullback(const isl::aff &ma2) const;
  2467.   inline isl::pw_multi_aff_list pw_multi_aff_list() const;
  2468.   inline isl::pw_multi_aff range_factor_domain() const;
  2469.   inline isl::pw_multi_aff range_factor_range() const;
  2470.   static inline isl::multi_aff range_map(isl::space space);
  2471.   inline isl::multi_aff range_product(isl::multi_aff multi2) const;
  2472.   inline isl::multi_pw_aff range_product(const isl::multi_pw_aff &multi2) const;
  2473.   inline isl::multi_union_pw_aff range_product(const isl::multi_union_pw_aff &multi2) const;
  2474.   inline isl::pw_multi_aff range_product(const isl::pw_multi_aff &pma2) const;
  2475.   inline isl::union_pw_multi_aff range_product(const isl::union_pw_multi_aff &upma2) const;
  2476.   inline isl::multi_aff range_product(const isl::aff &multi2) const;
  2477.   inline isl::id range_tuple_id() const;
  2478.   inline isl::id get_range_tuple_id() const;
  2479.   inline isl::multi_aff reset_range_tuple_id() const;
  2480.   inline isl::multi_aff reset_tuple_id(isl::dim type) const;
  2481.   inline isl::multi_aff scale(isl::multi_val mv) const;
  2482.   inline isl::multi_aff scale(isl::val v) const;
  2483.   inline isl::multi_aff scale(long v) const;
  2484.   inline isl::multi_aff scale_down(isl::multi_val mv) const;
  2485.   inline isl::multi_aff scale_down(isl::val v) const;
  2486.   inline isl::multi_aff scale_down(long v) const;
  2487.   inline isl::multi_aff set_aff(int pos, isl::aff el) const;
  2488.   inline isl::multi_aff set_at(int pos, isl::aff el) const;
  2489.   inline isl::multi_pw_aff set_at(int pos, const isl::pw_aff &el) const;
  2490.   inline isl::multi_union_pw_aff set_at(int pos, const isl::union_pw_aff &el) const;
  2491.   inline isl::multi_pw_aff set_pw_aff(int pos, const isl::pw_aff &el) const;
  2492.   inline isl::pw_multi_aff set_pw_aff(unsigned int pos, const isl::pw_aff &pa) const;
  2493.   inline isl::multi_aff set_range_tuple(isl::id id) const;
  2494.   inline isl::multi_aff set_range_tuple(const std::string &id) const;
  2495.   inline isl::multi_union_pw_aff set_union_pw_aff(int pos, const isl::union_pw_aff &el) const;
  2496.   inline class size size() const;
  2497.   inline isl::space space() const;
  2498.   inline isl::space get_space() const;
  2499.   inline isl::multi_aff sub(isl::multi_aff multi2) const;
  2500.   inline isl::multi_pw_aff sub(const isl::multi_pw_aff &multi2) const;
  2501.   inline isl::multi_union_pw_aff sub(const isl::multi_union_pw_aff &multi2) const;
  2502.   inline isl::pw_multi_aff sub(const isl::pw_multi_aff &pma2) const;
  2503.   inline isl::union_pw_multi_aff sub(const isl::union_pw_multi_aff &upma2) const;
  2504.   inline isl::multi_aff sub(const isl::aff &multi2) const;
  2505.   inline isl::pw_multi_aff subtract_domain(const isl::set &set) const;
  2506.   inline isl::union_pw_multi_aff subtract_domain(const isl::space &space) const;
  2507.   inline isl::union_pw_multi_aff subtract_domain(const isl::union_set &uset) const;
  2508.   inline isl::pw_multi_aff_list to_list() const;
  2509.   inline isl::multi_pw_aff to_multi_pw_aff() const;
  2510.   inline isl::multi_union_pw_aff to_multi_union_pw_aff() const;
  2511.   inline isl::pw_multi_aff to_pw_multi_aff() const;
  2512.   inline isl::union_pw_multi_aff to_union_pw_multi_aff() const;
  2513.   inline isl::id tuple_id(isl::dim type) const;
  2514.   inline isl::multi_aff unbind_params_insert_domain(isl::multi_id domain) const;
  2515.   inline isl::multi_pw_aff union_add(const isl::multi_pw_aff &mpa2) const;
  2516.   inline isl::multi_union_pw_aff union_add(const isl::multi_union_pw_aff &mupa2) const;
  2517.   inline isl::pw_multi_aff union_add(const isl::pw_multi_aff &pma2) const;
  2518.   inline isl::union_pw_multi_aff union_add(const isl::union_pw_multi_aff &upma2) const;
  2519.   static inline isl::multi_aff zero(isl::space space);
  2520. };
  2521.  
  2522. // declarations for isl::multi_id
  2523. inline multi_id manage(__isl_take isl_multi_id *ptr);
  2524. inline multi_id manage_copy(__isl_keep isl_multi_id *ptr);
  2525.  
  2526. class multi_id {
  2527.   friend inline multi_id manage(__isl_take isl_multi_id *ptr);
  2528.   friend inline multi_id manage_copy(__isl_keep isl_multi_id *ptr);
  2529.  
  2530. protected:
  2531.   isl_multi_id *ptr = nullptr;
  2532.  
  2533.   inline explicit multi_id(__isl_take isl_multi_id *ptr);
  2534.  
  2535. public:
  2536.   inline /* implicit */ multi_id();
  2537.   inline /* implicit */ multi_id(const multi_id &obj);
  2538.   inline explicit multi_id(isl::space space, isl::id_list list);
  2539.   inline explicit multi_id(isl::ctx ctx, const std::string &str);
  2540.   inline multi_id &operator=(multi_id obj);
  2541.   inline ~multi_id();
  2542.   inline __isl_give isl_multi_id *copy() const &;
  2543.   inline __isl_give isl_multi_id *copy() && = delete;
  2544.   inline __isl_keep isl_multi_id *get() const;
  2545.   inline __isl_give isl_multi_id *release();
  2546.   inline bool is_null() const;
  2547.   inline isl::ctx ctx() const;
  2548.  
  2549.   inline isl::id at(int pos) const;
  2550.   inline isl::id get_at(int pos) const;
  2551.   inline isl::multi_id flat_range_product(isl::multi_id multi2) const;
  2552.   inline isl::id_list list() const;
  2553.   inline isl::id_list get_list() const;
  2554.   inline boolean plain_is_equal(const isl::multi_id &multi2) const;
  2555.   inline isl::multi_id range_product(isl::multi_id multi2) const;
  2556.   inline isl::multi_id set_at(int pos, isl::id el) const;
  2557.   inline isl::multi_id set_at(int pos, const std::string &el) const;
  2558.   inline isl::multi_id set_id(int pos, isl::id el) const;
  2559.   inline isl::multi_id set_id(int pos, const std::string &el) const;
  2560.   inline class size size() const;
  2561.   inline isl::space space() const;
  2562.   inline isl::space get_space() const;
  2563. };
  2564.  
  2565. // declarations for isl::multi_pw_aff
  2566. inline multi_pw_aff manage(__isl_take isl_multi_pw_aff *ptr);
  2567. inline multi_pw_aff manage_copy(__isl_keep isl_multi_pw_aff *ptr);
  2568.  
  2569. class multi_pw_aff {
  2570.   friend inline multi_pw_aff manage(__isl_take isl_multi_pw_aff *ptr);
  2571.   friend inline multi_pw_aff manage_copy(__isl_keep isl_multi_pw_aff *ptr);
  2572.  
  2573. protected:
  2574.   isl_multi_pw_aff *ptr = nullptr;
  2575.  
  2576.   inline explicit multi_pw_aff(__isl_take isl_multi_pw_aff *ptr);
  2577.  
  2578. public:
  2579.   inline /* implicit */ multi_pw_aff();
  2580.   inline /* implicit */ multi_pw_aff(const multi_pw_aff &obj);
  2581.   inline /* implicit */ multi_pw_aff(isl::aff aff);
  2582.   inline /* implicit */ multi_pw_aff(isl::multi_aff ma);
  2583.   inline /* implicit */ multi_pw_aff(isl::pw_aff pa);
  2584.   inline explicit multi_pw_aff(isl::space space, isl::pw_aff_list list);
  2585.   inline /* implicit */ multi_pw_aff(isl::pw_multi_aff pma);
  2586.   inline explicit multi_pw_aff(isl::ctx ctx, const std::string &str);
  2587.   inline multi_pw_aff &operator=(multi_pw_aff obj);
  2588.   inline ~multi_pw_aff();
  2589.   inline __isl_give isl_multi_pw_aff *copy() const &;
  2590.   inline __isl_give isl_multi_pw_aff *copy() && = delete;
  2591.   inline __isl_keep isl_multi_pw_aff *get() const;
  2592.   inline __isl_give isl_multi_pw_aff *release();
  2593.   inline bool is_null() const;
  2594.   inline isl::ctx ctx() const;
  2595.  
  2596.   inline isl::multi_pw_aff add(isl::multi_pw_aff multi2) const;
  2597.   inline isl::multi_union_pw_aff add(const isl::multi_union_pw_aff &multi2) const;
  2598.   inline isl::multi_pw_aff add(const isl::aff &multi2) const;
  2599.   inline isl::multi_pw_aff add(const isl::multi_aff &multi2) const;
  2600.   inline isl::multi_pw_aff add(const isl::pw_aff &multi2) const;
  2601.   inline isl::multi_pw_aff add(const isl::pw_multi_aff &multi2) const;
  2602.   inline isl::multi_pw_aff add_constant(isl::multi_val mv) const;
  2603.   inline isl::multi_pw_aff add_constant(isl::val v) const;
  2604.   inline isl::multi_pw_aff add_constant(long v) const;
  2605.   inline isl::map as_map() const;
  2606.   inline isl::multi_aff as_multi_aff() const;
  2607.   inline isl::set as_set() const;
  2608.   inline isl::pw_aff at(int pos) const;
  2609.   inline isl::pw_aff get_at(int pos) const;
  2610.   inline isl::set bind(isl::multi_id tuple) const;
  2611.   inline isl::multi_pw_aff bind_domain(isl::multi_id tuple) const;
  2612.   inline isl::multi_pw_aff bind_domain_wrapped_domain(isl::multi_id tuple) const;
  2613.   inline isl::multi_pw_aff coalesce() const;
  2614.   inline class size dim(isl::dim type) const;
  2615.   inline isl::set domain() const;
  2616.   inline isl::multi_pw_aff flat_range_product(isl::multi_pw_aff multi2) const;
  2617.   inline isl::multi_union_pw_aff flat_range_product(const isl::multi_union_pw_aff &multi2) const;
  2618.   inline isl::multi_pw_aff flat_range_product(const isl::aff &multi2) const;
  2619.   inline isl::multi_pw_aff flat_range_product(const isl::multi_aff &multi2) const;
  2620.   inline isl::multi_pw_aff flat_range_product(const isl::pw_aff &multi2) const;
  2621.   inline isl::multi_pw_aff flat_range_product(const isl::pw_multi_aff &multi2) const;
  2622.   inline isl::multi_pw_aff gist(isl::set set) const;
  2623.   inline isl::multi_union_pw_aff gist(const isl::union_set &context) const;
  2624.   inline isl::multi_pw_aff gist(const isl::basic_set &set) const;
  2625.   inline isl::multi_pw_aff gist(const isl::point &set) const;
  2626.   inline boolean has_range_tuple_id() const;
  2627.   static inline isl::multi_pw_aff identity(isl::space space);
  2628.   inline isl::multi_pw_aff identity() const;
  2629.   static inline isl::multi_pw_aff identity_on_domain(isl::space space);
  2630.   inline isl::multi_pw_aff insert_domain(isl::space domain) const;
  2631.   inline isl::multi_pw_aff intersect_domain(isl::set domain) const;
  2632.   inline isl::multi_union_pw_aff intersect_domain(const isl::union_set &uset) const;
  2633.   inline isl::multi_pw_aff intersect_domain(const isl::basic_set &domain) const;
  2634.   inline isl::multi_pw_aff intersect_domain(const isl::point &domain) const;
  2635.   inline isl::multi_pw_aff intersect_params(isl::set set) const;
  2636.   inline boolean involves_nan() const;
  2637.   inline boolean involves_param(const isl::id &id) const;
  2638.   inline boolean involves_param(const std::string &id) const;
  2639.   inline boolean involves_param(const isl::id_list &list) const;
  2640.   inline boolean isa_multi_aff() const;
  2641.   inline isl::pw_aff_list list() const;
  2642.   inline isl::pw_aff_list get_list() const;
  2643.   inline isl::multi_pw_aff max(isl::multi_pw_aff multi2) const;
  2644.   inline isl::multi_val max_multi_val() const;
  2645.   inline isl::multi_pw_aff min(isl::multi_pw_aff multi2) const;
  2646.   inline isl::multi_val min_multi_val() const;
  2647.   inline isl::multi_pw_aff neg() const;
  2648.   inline boolean plain_is_equal(const isl::multi_pw_aff &multi2) const;
  2649.   inline boolean plain_is_equal(const isl::multi_union_pw_aff &multi2) const;
  2650.   inline boolean plain_is_equal(const isl::aff &multi2) const;
  2651.   inline boolean plain_is_equal(const isl::multi_aff &multi2) const;
  2652.   inline boolean plain_is_equal(const isl::pw_aff &multi2) const;
  2653.   inline boolean plain_is_equal(const isl::pw_multi_aff &multi2) const;
  2654.   inline isl::multi_pw_aff product(isl::multi_pw_aff multi2) const;
  2655.   inline isl::multi_pw_aff pullback(isl::multi_aff ma) const;
  2656.   inline isl::multi_pw_aff pullback(isl::multi_pw_aff mpa2) const;
  2657.   inline isl::multi_pw_aff pullback(isl::pw_multi_aff pma) const;
  2658.   inline isl::multi_union_pw_aff pullback(const isl::union_pw_multi_aff &upma) const;
  2659.   inline isl::multi_pw_aff range_product(isl::multi_pw_aff multi2) const;
  2660.   inline isl::multi_union_pw_aff range_product(const isl::multi_union_pw_aff &multi2) const;
  2661.   inline isl::multi_pw_aff range_product(const isl::aff &multi2) const;
  2662.   inline isl::multi_pw_aff range_product(const isl::multi_aff &multi2) const;
  2663.   inline isl::multi_pw_aff range_product(const isl::pw_aff &multi2) const;
  2664.   inline isl::multi_pw_aff range_product(const isl::pw_multi_aff &multi2) const;
  2665.   inline isl::id range_tuple_id() const;
  2666.   inline isl::id get_range_tuple_id() const;
  2667.   inline isl::multi_pw_aff reset_range_tuple_id() const;
  2668.   inline isl::multi_pw_aff reset_tuple_id(isl::dim type) const;
  2669.   inline isl::multi_pw_aff scale(isl::multi_val mv) const;
  2670.   inline isl::multi_pw_aff scale(isl::val v) const;
  2671.   inline isl::multi_pw_aff scale(long v) const;
  2672.   inline isl::multi_pw_aff scale_down(isl::multi_val mv) const;
  2673.   inline isl::multi_pw_aff scale_down(isl::val v) const;
  2674.   inline isl::multi_pw_aff scale_down(long v) const;
  2675.   inline isl::multi_pw_aff set_at(int pos, isl::pw_aff el) const;
  2676.   inline isl::multi_union_pw_aff set_at(int pos, const isl::union_pw_aff &el) const;
  2677.   inline isl::multi_pw_aff set_pw_aff(int pos, isl::pw_aff el) const;
  2678.   inline isl::multi_pw_aff set_range_tuple(isl::id id) const;
  2679.   inline isl::multi_pw_aff set_range_tuple(const std::string &id) const;
  2680.   inline isl::multi_union_pw_aff set_union_pw_aff(int pos, const isl::union_pw_aff &el) const;
  2681.   inline class size size() const;
  2682.   inline isl::space space() const;
  2683.   inline isl::space get_space() const;
  2684.   inline isl::multi_pw_aff sub(isl::multi_pw_aff multi2) const;
  2685.   inline isl::multi_union_pw_aff sub(const isl::multi_union_pw_aff &multi2) const;
  2686.   inline isl::multi_pw_aff sub(const isl::aff &multi2) const;
  2687.   inline isl::multi_pw_aff sub(const isl::multi_aff &multi2) const;
  2688.   inline isl::multi_pw_aff sub(const isl::pw_aff &multi2) const;
  2689.   inline isl::multi_pw_aff sub(const isl::pw_multi_aff &multi2) const;
  2690.   inline isl::multi_pw_aff unbind_params_insert_domain(isl::multi_id domain) const;
  2691.   inline isl::multi_pw_aff union_add(isl::multi_pw_aff mpa2) const;
  2692.   inline isl::multi_union_pw_aff union_add(const isl::multi_union_pw_aff &mupa2) const;
  2693.   inline isl::multi_pw_aff union_add(const isl::aff &mpa2) const;
  2694.   inline isl::multi_pw_aff union_add(const isl::multi_aff &mpa2) const;
  2695.   inline isl::multi_pw_aff union_add(const isl::pw_aff &mpa2) const;
  2696.   inline isl::multi_pw_aff union_add(const isl::pw_multi_aff &mpa2) const;
  2697.   static inline isl::multi_pw_aff zero(isl::space space);
  2698. };
  2699.  
  2700. // declarations for isl::multi_union_pw_aff
  2701. inline multi_union_pw_aff manage(__isl_take isl_multi_union_pw_aff *ptr);
  2702. inline multi_union_pw_aff manage_copy(__isl_keep isl_multi_union_pw_aff *ptr);
  2703.  
  2704. class multi_union_pw_aff {
  2705.   friend inline multi_union_pw_aff manage(__isl_take isl_multi_union_pw_aff *ptr);
  2706.   friend inline multi_union_pw_aff manage_copy(__isl_keep isl_multi_union_pw_aff *ptr);
  2707.  
  2708. protected:
  2709.   isl_multi_union_pw_aff *ptr = nullptr;
  2710.  
  2711.   inline explicit multi_union_pw_aff(__isl_take isl_multi_union_pw_aff *ptr);
  2712.  
  2713. public:
  2714.   inline /* implicit */ multi_union_pw_aff();
  2715.   inline /* implicit */ multi_union_pw_aff(const multi_union_pw_aff &obj);
  2716.   inline /* implicit */ multi_union_pw_aff(isl::multi_pw_aff mpa);
  2717.   inline /* implicit */ multi_union_pw_aff(isl::union_pw_aff upa);
  2718.   inline explicit multi_union_pw_aff(isl::space space, isl::union_pw_aff_list list);
  2719.   inline explicit multi_union_pw_aff(isl::union_pw_multi_aff upma);
  2720.   inline explicit multi_union_pw_aff(isl::ctx ctx, const std::string &str);
  2721.   inline multi_union_pw_aff &operator=(multi_union_pw_aff obj);
  2722.   inline ~multi_union_pw_aff();
  2723.   inline __isl_give isl_multi_union_pw_aff *copy() const &;
  2724.   inline __isl_give isl_multi_union_pw_aff *copy() && = delete;
  2725.   inline __isl_keep isl_multi_union_pw_aff *get() const;
  2726.   inline __isl_give isl_multi_union_pw_aff *release();
  2727.   inline bool is_null() const;
  2728.   inline isl::ctx ctx() const;
  2729.  
  2730.   inline isl::multi_union_pw_aff add(isl::multi_union_pw_aff multi2) const;
  2731.   inline isl::union_pw_aff at(int pos) const;
  2732.   inline isl::union_pw_aff get_at(int pos) const;
  2733.   inline isl::union_set bind(isl::multi_id tuple) const;
  2734.   inline isl::multi_union_pw_aff coalesce() const;
  2735.   inline class size dim(isl::dim type) const;
  2736.   inline isl::union_set domain() const;
  2737.   inline isl::multi_union_pw_aff flat_range_product(isl::multi_union_pw_aff multi2) const;
  2738.   static inline isl::multi_union_pw_aff from_union_map(isl::union_map umap);
  2739.   inline isl::multi_union_pw_aff gist(isl::union_set context) const;
  2740.   inline boolean has_range_tuple_id() const;
  2741.   inline isl::multi_union_pw_aff intersect_domain(isl::union_set uset) const;
  2742.   inline isl::multi_union_pw_aff intersect_params(isl::set params) const;
  2743.   inline boolean involves_nan() const;
  2744.   inline isl::union_pw_aff_list list() const;
  2745.   inline isl::union_pw_aff_list get_list() const;
  2746.   inline isl::multi_union_pw_aff neg() const;
  2747.   inline boolean plain_is_equal(const isl::multi_union_pw_aff &multi2) const;
  2748.   inline isl::multi_union_pw_aff pullback(isl::union_pw_multi_aff upma) const;
  2749.   inline isl::multi_union_pw_aff range_product(isl::multi_union_pw_aff multi2) const;
  2750.   inline isl::id range_tuple_id() const;
  2751.   inline isl::id get_range_tuple_id() const;
  2752.   inline isl::multi_union_pw_aff reset_range_tuple_id() const;
  2753.   inline isl::multi_union_pw_aff reset_tuple_id(isl::dim type) const;
  2754.   inline isl::multi_union_pw_aff scale(isl::multi_val mv) const;
  2755.   inline isl::multi_union_pw_aff scale(isl::val v) const;
  2756.   inline isl::multi_union_pw_aff scale(long v) const;
  2757.   inline isl::multi_union_pw_aff scale_down(isl::multi_val mv) const;
  2758.   inline isl::multi_union_pw_aff scale_down(isl::val v) const;
  2759.   inline isl::multi_union_pw_aff scale_down(long v) const;
  2760.   inline isl::multi_union_pw_aff set_at(int pos, isl::union_pw_aff el) const;
  2761.   inline isl::multi_union_pw_aff set_range_tuple(isl::id id) const;
  2762.   inline isl::multi_union_pw_aff set_range_tuple(const std::string &id) const;
  2763.   inline isl::multi_union_pw_aff set_union_pw_aff(int pos, isl::union_pw_aff el) const;
  2764.   inline class size size() const;
  2765.   inline isl::space space() const;
  2766.   inline isl::space get_space() const;
  2767.   inline isl::multi_union_pw_aff sub(isl::multi_union_pw_aff multi2) const;
  2768.   inline isl::multi_union_pw_aff union_add(isl::multi_union_pw_aff mupa2) const;
  2769.   static inline isl::multi_union_pw_aff zero(isl::space space);
  2770. };
  2771.  
  2772. // declarations for isl::multi_val
  2773. inline multi_val manage(__isl_take isl_multi_val *ptr);
  2774. inline multi_val manage_copy(__isl_keep isl_multi_val *ptr);
  2775.  
  2776. class multi_val {
  2777.   friend inline multi_val manage(__isl_take isl_multi_val *ptr);
  2778.   friend inline multi_val manage_copy(__isl_keep isl_multi_val *ptr);
  2779.  
  2780. protected:
  2781.   isl_multi_val *ptr = nullptr;
  2782.  
  2783.   inline explicit multi_val(__isl_take isl_multi_val *ptr);
  2784.  
  2785. public:
  2786.   inline /* implicit */ multi_val();
  2787.   inline /* implicit */ multi_val(const multi_val &obj);
  2788.   inline explicit multi_val(isl::space space, isl::val_list list);
  2789.   inline explicit multi_val(isl::ctx ctx, const std::string &str);
  2790.   inline multi_val &operator=(multi_val obj);
  2791.   inline ~multi_val();
  2792.   inline __isl_give isl_multi_val *copy() const &;
  2793.   inline __isl_give isl_multi_val *copy() && = delete;
  2794.   inline __isl_keep isl_multi_val *get() const;
  2795.   inline __isl_give isl_multi_val *release();
  2796.   inline bool is_null() const;
  2797.   inline isl::ctx ctx() const;
  2798.  
  2799.   inline isl::multi_val add(isl::multi_val multi2) const;
  2800.   inline isl::multi_val add(isl::val v) const;
  2801.   inline isl::multi_val add(long v) const;
  2802.   inline isl::val at(int pos) const;
  2803.   inline isl::val get_at(int pos) const;
  2804.   inline class size dim(isl::dim type) const;
  2805.   inline isl::multi_val flat_range_product(isl::multi_val multi2) const;
  2806.   inline boolean has_range_tuple_id() const;
  2807.   inline boolean involves_nan() const;
  2808.   inline isl::val_list list() const;
  2809.   inline isl::val_list get_list() const;
  2810.   inline isl::multi_val max(isl::multi_val multi2) const;
  2811.   inline isl::multi_val min(isl::multi_val multi2) const;
  2812.   inline isl::multi_val neg() const;
  2813.   inline boolean plain_is_equal(const isl::multi_val &multi2) const;
  2814.   inline isl::multi_val product(isl::multi_val multi2) const;
  2815.   inline isl::multi_val range_product(isl::multi_val multi2) const;
  2816.   inline isl::id range_tuple_id() const;
  2817.   inline isl::id get_range_tuple_id() const;
  2818.   inline isl::multi_val reset_range_tuple_id() const;
  2819.   inline isl::multi_val reset_tuple_id(isl::dim type) const;
  2820.   inline isl::multi_val scale(isl::multi_val mv) const;
  2821.   inline isl::multi_val scale(isl::val v) const;
  2822.   inline isl::multi_val scale(long v) const;
  2823.   inline isl::multi_val scale_down(isl::multi_val mv) const;
  2824.   inline isl::multi_val scale_down(isl::val v) const;
  2825.   inline isl::multi_val scale_down(long v) const;
  2826.   inline isl::multi_val set_at(int pos, isl::val el) const;
  2827.   inline isl::multi_val set_at(int pos, long el) const;
  2828.   inline isl::multi_val set_range_tuple(isl::id id) const;
  2829.   inline isl::multi_val set_range_tuple(const std::string &id) const;
  2830.   inline isl::multi_val set_val(int pos, isl::val el) const;
  2831.   inline isl::multi_val set_val(int pos, long el) const;
  2832.   inline class size size() const;
  2833.   inline isl::space space() const;
  2834.   inline isl::space get_space() const;
  2835.   inline isl::multi_val sub(isl::multi_val multi2) const;
  2836.   static inline isl::multi_val zero(isl::space space);
  2837. };
  2838.  
  2839. // declarations for isl::point
  2840. inline point manage(__isl_take isl_point *ptr);
  2841. inline point manage_copy(__isl_keep isl_point *ptr);
  2842.  
  2843. class point {
  2844.   friend inline point manage(__isl_take isl_point *ptr);
  2845.   friend inline point manage_copy(__isl_keep isl_point *ptr);
  2846.  
  2847. protected:
  2848.   isl_point *ptr = nullptr;
  2849.  
  2850.   inline explicit point(__isl_take isl_point *ptr);
  2851.  
  2852. public:
  2853.   inline /* implicit */ point();
  2854.   inline /* implicit */ point(const point &obj);
  2855.   inline explicit point(isl::space space);
  2856.   inline point &operator=(point obj);
  2857.   inline ~point();
  2858.   inline __isl_give isl_point *copy() const &;
  2859.   inline __isl_give isl_point *copy() && = delete;
  2860.   inline __isl_keep isl_point *get() const;
  2861.   inline __isl_give isl_point *release();
  2862.   inline bool is_null() const;
  2863.   inline isl::ctx ctx() const;
  2864.  
  2865.   inline isl::set add_constraint(const isl::constraint &constraint) const;
  2866.   inline isl::set add_dims(isl::dim type, unsigned int n) const;
  2867.   inline isl::basic_set affine_hull() const;
  2868.   inline isl::set align_params(const isl::space &model) const;
  2869.   inline isl::basic_set apply(const isl::basic_map &bmap) const;
  2870.   inline isl::set apply(const isl::map &map) const;
  2871.   inline isl::union_set apply(const isl::union_map &umap) const;
  2872.   inline isl::pw_multi_aff as_pw_multi_aff() const;
  2873.   inline isl::set as_set() const;
  2874.   inline isl::basic_set_list basic_set_list() const;
  2875.   inline isl::set bind(const isl::multi_id &tuple) const;
  2876.   inline isl::set coalesce() const;
  2877.   inline isl::set complement() const;
  2878.   inline isl::union_set compute_divs() const;
  2879.   inline boolean contains(const isl::space &space) const;
  2880.   inline isl::basic_set convex_hull() const;
  2881.   inline isl::val coordinate_val(isl::dim type, int pos) const;
  2882.   inline isl::val get_coordinate_val(isl::dim type, int pos) const;
  2883.   inline isl::basic_set detect_equalities() const;
  2884.   inline class size dim(isl::dim type) const;
  2885.   inline boolean dim_has_any_lower_bound(isl::dim type, unsigned int pos) const;
  2886.   inline isl::id dim_id(isl::dim type, unsigned int pos) const;
  2887.   inline isl::pw_aff dim_max(int pos) const;
  2888.   inline isl::val dim_max_val(int pos) const;
  2889.   inline isl::pw_aff dim_min(int pos) const;
  2890.   inline isl::val dim_min_val(int pos) const;
  2891.   inline std::string dim_name(isl::dim type, unsigned int pos) const;
  2892.   inline isl::aff div(int pos) const;
  2893.   inline isl::set drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const;
  2894.   inline isl::set eliminate(isl::dim type, unsigned int first, unsigned int n) const;
  2895.   inline boolean every_set(const std::function<boolean(isl::set)> &test) const;
  2896.   inline isl::set extract_set(const isl::space &space) const;
  2897.   inline int find_dim_by_id(isl::dim type, const isl::id &id) const;
  2898.   inline int find_dim_by_id(isl::dim type, const std::string &id) const;
  2899.   inline isl::basic_set fix_si(isl::dim type, unsigned int pos, int value) const;
  2900.   inline isl::basic_set fix_val(isl::dim type, unsigned int pos, const isl::val &v) const;
  2901.   inline isl::basic_set fix_val(isl::dim type, unsigned int pos, long v) const;
  2902.   inline isl::basic_set flatten() const;
  2903.   inline stat foreach_basic_set(const std::function<stat(isl::basic_set)> &fn) const;
  2904.   inline stat foreach_point(const std::function<stat(isl::point)> &fn) const;
  2905.   inline stat foreach_set(const std::function<stat(isl::set)> &fn) const;
  2906.   inline isl::basic_set gist(const isl::basic_set &context) const;
  2907.   inline isl::set gist(const isl::set &context) const;
  2908.   inline isl::union_set gist(const isl::union_set &context) const;
  2909.   inline isl::set gist_params(const isl::set &context) const;
  2910.   inline boolean has_equal_space(const isl::set &set2) const;
  2911.   inline isl::map identity() const;
  2912.   inline isl::union_pw_multi_aff identity_union_pw_multi_aff() const;
  2913.   inline isl::pw_aff indicator_function() const;
  2914.   inline isl::set insert_dims(isl::dim type, unsigned int pos, unsigned int n) const;
  2915.   inline isl::map insert_domain(const isl::space &domain) const;
  2916.   inline isl::basic_set intersect(const isl::basic_set &bset2) const;
  2917.   inline isl::set intersect(const isl::set &set2) const;
  2918.   inline isl::union_set intersect(const isl::union_set &uset2) const;
  2919.   inline isl::basic_set intersect_params(const isl::basic_set &bset2) const;
  2920.   inline isl::set intersect_params(const isl::set &params) const;
  2921.   inline boolean involves_dims(isl::dim type, unsigned int first, unsigned int n) const;
  2922.   inline boolean involves_locals() const;
  2923.   inline boolean is_bounded() const;
  2924.   inline boolean is_disjoint(const isl::set &set2) const;
  2925.   inline boolean is_disjoint(const isl::union_set &uset2) const;
  2926.   inline boolean is_empty() const;
  2927.   inline boolean is_equal(const isl::basic_set &bset2) const;
  2928.   inline boolean is_equal(const isl::set &set2) const;
  2929.   inline boolean is_equal(const isl::union_set &uset2) const;
  2930.   inline boolean is_params() const;
  2931.   inline boolean is_singleton() const;
  2932.   inline boolean is_strict_subset(const isl::set &set2) const;
  2933.   inline boolean is_strict_subset(const isl::union_set &uset2) const;
  2934.   inline boolean is_subset(const isl::basic_set &bset2) const;
  2935.   inline boolean is_subset(const isl::set &set2) const;
  2936.   inline boolean is_subset(const isl::union_set &uset2) const;
  2937.   inline boolean is_wrapping() const;
  2938.   inline boolean isa_set() const;
  2939.   inline isl::set lexmax() const;
  2940.   inline isl::pw_multi_aff lexmax_pw_multi_aff() const;
  2941.   inline isl::set lexmin() const;
  2942.   inline isl::pw_multi_aff lexmin_pw_multi_aff() const;
  2943.   inline isl::set lower_bound(const isl::multi_pw_aff &lower) const;
  2944.   inline isl::set lower_bound(const isl::multi_val &lower) const;
  2945.   inline isl::set lower_bound_si(isl::dim type, unsigned int pos, int value) const;
  2946.   inline isl::set lower_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const;
  2947.   inline isl::set lower_bound_val(isl::dim type, unsigned int pos, long value) const;
  2948.   inline isl::multi_pw_aff max_multi_pw_aff() const;
  2949.   inline isl::val max_val(const isl::aff &obj) const;
  2950.   inline isl::multi_pw_aff min_multi_pw_aff() const;
  2951.   inline isl::val min_val(const isl::aff &obj) const;
  2952.   inline isl::multi_val multi_val() const;
  2953.   inline isl::multi_val get_multi_val() const;
  2954.   inline class size n_basic_set() const;
  2955.   inline isl::basic_set params() const;
  2956.   inline isl::val plain_get_val_if_fixed(isl::dim type, unsigned int pos) const;
  2957.   inline isl::multi_val plain_multi_val_if_fixed() const;
  2958.   inline isl::basic_set polyhedral_hull() const;
  2959.   inline isl::set preimage(const isl::multi_aff &ma) const;
  2960.   inline isl::set preimage(const isl::multi_pw_aff &mpa) const;
  2961.   inline isl::set preimage(const isl::pw_multi_aff &pma) const;
  2962.   inline isl::union_set preimage(const isl::union_pw_multi_aff &upma) const;
  2963.   inline isl::set product(const isl::set &set2) const;
  2964.   inline isl::basic_set project_out(isl::dim type, unsigned int first, unsigned int n) const;
  2965.   inline isl::set project_out_all_params() const;
  2966.   inline isl::set project_out_param(const isl::id &id) const;
  2967.   inline isl::set project_out_param(const std::string &id) const;
  2968.   inline isl::set project_out_param(const isl::id_list &list) const;
  2969.   inline isl::pw_multi_aff pw_multi_aff_on_domain(const isl::multi_val &mv) const;
  2970.   inline isl::set remove_dims(isl::dim type, unsigned int first, unsigned int n) const;
  2971.   inline isl::set remove_divs() const;
  2972.   inline isl::set remove_redundancies() const;
  2973.   inline isl::set reset_tuple_id() const;
  2974.   inline isl::basic_set sample() const;
  2975.   inline isl::point sample_point() const;
  2976.   inline isl::set set_dim_id(isl::dim type, unsigned int pos, const isl::id &id) const;
  2977.   inline isl::set set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const;
  2978.   inline isl::set_list set_list() const;
  2979.   inline isl::set set_tuple_id(const isl::id &id) const;
  2980.   inline isl::set set_tuple_id(const std::string &id) const;
  2981.   inline isl::fixed_box simple_fixed_box_hull() const;
  2982.   inline isl::basic_set simple_hull() const;
  2983.   inline isl::space space() const;
  2984.   inline isl::val stride(int pos) const;
  2985.   inline isl::set subtract(const isl::set &set2) const;
  2986.   inline isl::union_set subtract(const isl::union_set &uset2) const;
  2987.   inline isl::basic_set_list to_list() const;
  2988.   inline isl::set to_set() const;
  2989.   inline isl::union_set to_union_set() const;
  2990.   inline isl::map translation() const;
  2991.   inline class size tuple_dim() const;
  2992.   inline isl::id tuple_id() const;
  2993.   inline std::string tuple_name() const;
  2994.   inline isl::set unbind_params(const isl::multi_id &tuple) const;
  2995.   inline isl::map unbind_params_insert_domain(const isl::multi_id &domain) const;
  2996.   inline isl::set unite(const isl::basic_set &bset2) const;
  2997.   inline isl::set unite(const isl::set &set2) const;
  2998.   inline isl::union_set unite(const isl::union_set &uset2) const;
  2999.   inline isl::basic_set unshifted_simple_hull() const;
  3000.   inline isl::map unwrap() const;
  3001.   inline isl::set upper_bound(const isl::multi_pw_aff &upper) const;
  3002.   inline isl::set upper_bound(const isl::multi_val &upper) const;
  3003.   inline isl::set upper_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const;
  3004.   inline isl::set upper_bound_val(isl::dim type, unsigned int pos, long value) const;
  3005. };
  3006.  
  3007. // declarations for isl::pw_aff
  3008. inline pw_aff manage(__isl_take isl_pw_aff *ptr);
  3009. inline pw_aff manage_copy(__isl_keep isl_pw_aff *ptr);
  3010.  
  3011. class pw_aff {
  3012.   friend inline pw_aff manage(__isl_take isl_pw_aff *ptr);
  3013.   friend inline pw_aff manage_copy(__isl_keep isl_pw_aff *ptr);
  3014.  
  3015. protected:
  3016.   isl_pw_aff *ptr = nullptr;
  3017.  
  3018.   inline explicit pw_aff(__isl_take isl_pw_aff *ptr);
  3019.  
  3020. public:
  3021.   inline /* implicit */ pw_aff();
  3022.   inline /* implicit */ pw_aff(const pw_aff &obj);
  3023.   inline /* implicit */ pw_aff(isl::aff aff);
  3024.   inline explicit pw_aff(isl::ctx ctx, const std::string &str);
  3025.   inline explicit pw_aff(isl::set domain, isl::val v);
  3026.   inline explicit pw_aff(isl::local_space ls);
  3027.   inline pw_aff &operator=(pw_aff obj);
  3028.   inline ~pw_aff();
  3029.   inline __isl_give isl_pw_aff *copy() const &;
  3030.   inline __isl_give isl_pw_aff *copy() && = delete;
  3031.   inline __isl_keep isl_pw_aff *get() const;
  3032.   inline __isl_give isl_pw_aff *release();
  3033.   inline bool is_null() const;
  3034.   inline isl::ctx ctx() const;
  3035.  
  3036.   inline isl::multi_pw_aff add(const isl::multi_pw_aff &multi2) const;
  3037.   inline isl::multi_union_pw_aff add(const isl::multi_union_pw_aff &multi2) const;
  3038.   inline isl::pw_aff add(isl::pw_aff pwaff2) const;
  3039.   inline isl::pw_multi_aff add(const isl::pw_multi_aff &pma2) const;
  3040.   inline isl::union_pw_aff add(const isl::union_pw_aff &upa2) const;
  3041.   inline isl::union_pw_multi_aff add(const isl::union_pw_multi_aff &upma2) const;
  3042.   inline isl::pw_aff add(const isl::aff &pwaff2) const;
  3043.   inline isl::pw_aff add_constant(isl::val v) const;
  3044.   inline isl::pw_aff add_constant(long v) const;
  3045.   inline isl::pw_multi_aff add_constant(const isl::multi_val &mv) const;
  3046.   inline isl::pw_aff add_dims(isl::dim type, unsigned int n) const;
  3047.   inline isl::union_pw_multi_aff add_pw_multi_aff(const isl::pw_multi_aff &pma) const;
  3048.   inline isl::union_pw_multi_aff apply(const isl::union_pw_multi_aff &upma2) const;
  3049.   inline isl::aff as_aff() const;
  3050.   inline isl::map as_map() const;
  3051.   inline isl::multi_aff as_multi_aff() const;
  3052.   inline isl::multi_union_pw_aff as_multi_union_pw_aff() const;
  3053.   inline isl::pw_multi_aff as_pw_multi_aff() const;
  3054.   inline isl::set as_set() const;
  3055.   inline isl::union_map as_union_map() const;
  3056.   inline isl::pw_aff at(int pos) const;
  3057.   inline isl::set bind(const isl::multi_id &tuple) const;
  3058.   inline isl::set bind(isl::id id) const;
  3059.   inline isl::set bind(const std::string &id) const;
  3060.   inline isl::pw_aff bind_domain(isl::multi_id tuple) const;
  3061.   inline isl::pw_aff bind_domain_wrapped_domain(isl::multi_id tuple) const;
  3062.   inline isl::pw_aff ceil() const;
  3063.   inline isl::pw_aff coalesce() const;
  3064.   inline isl::pw_aff cond(isl::pw_aff pwaff_true, isl::pw_aff pwaff_false) const;
  3065.   inline class size dim(isl::dim type) const;
  3066.   inline isl::id dim_id(isl::dim type, unsigned int pos) const;
  3067.   inline isl::id get_dim_id(isl::dim type, unsigned int pos) const;
  3068.   inline isl::pw_aff div(isl::pw_aff pa2) const;
  3069.   inline isl::set domain() const;
  3070.   inline isl::space domain_space() const;
  3071.   inline isl::space get_domain_space() const;
  3072.   inline isl::pw_multi_aff drop_dims(isl::dim type, unsigned int first, unsigned int n) const;
  3073.   inline isl::set eq_set(isl::pw_aff pwaff2) const;
  3074.   inline isl::val eval(isl::point pnt) const;
  3075.   inline isl::pw_multi_aff extract_pw_multi_aff(const isl::space &space) const;
  3076.   inline isl::multi_pw_aff flat_range_product(const isl::multi_pw_aff &multi2) const;
  3077.   inline isl::multi_union_pw_aff flat_range_product(const isl::multi_union_pw_aff &multi2) const;
  3078.   inline isl::pw_multi_aff flat_range_product(const isl::pw_multi_aff &pma2) const;
  3079.   inline isl::union_pw_multi_aff flat_range_product(const isl::union_pw_multi_aff &upma2) const;
  3080.   inline isl::pw_aff floor() const;
  3081.   inline stat foreach_piece(const std::function<stat(isl::set, isl::aff)> &fn) const;
  3082.   inline stat foreach_piece(const std::function<stat(isl::set, isl::multi_aff)> &fn) const;
  3083.   inline stat foreach_pw_aff(const std::function<stat(isl::pw_aff)> &fn) const;
  3084.   inline isl::set ge_set(isl::pw_aff pwaff2) const;
  3085.   inline isl::pw_aff gist(isl::set context) const;
  3086.   inline isl::union_pw_aff gist(const isl::union_set &context) const;
  3087.   inline isl::pw_aff gist(const isl::basic_set &context) const;
  3088.   inline isl::pw_aff gist(const isl::point &context) const;
  3089.   inline isl::set gt_set(isl::pw_aff pwaff2) const;
  3090.   inline boolean has_range_tuple_id() const;
  3091.   inline isl::multi_pw_aff identity() const;
  3092.   inline isl::pw_aff insert_domain(isl::space domain) const;
  3093.   inline isl::pw_aff intersect_domain(isl::set set) const;
  3094.   inline isl::union_pw_aff intersect_domain(const isl::space &space) const;
  3095.   inline isl::union_pw_aff intersect_domain(const isl::union_set &uset) const;
  3096.   inline isl::pw_aff intersect_domain(const isl::basic_set &set) const;
  3097.   inline isl::pw_aff intersect_domain(const isl::point &set) const;
  3098.   inline isl::union_pw_aff intersect_domain_wrapped_domain(const isl::union_set &uset) const;
  3099.   inline isl::union_pw_aff intersect_domain_wrapped_range(const isl::union_set &uset) const;
  3100.   inline isl::pw_aff intersect_params(isl::set set) const;
  3101.   inline boolean involves_locals() const;
  3102.   inline boolean involves_nan() const;
  3103.   inline boolean involves_param(const isl::id &id) const;
  3104.   inline boolean involves_param(const std::string &id) const;
  3105.   inline boolean involves_param(const isl::id_list &list) const;
  3106.   inline boolean is_cst() const;
  3107.   inline boolean is_equal(const isl::pw_aff &pa2) const;
  3108.   inline boolean isa_aff() const;
  3109.   inline boolean isa_multi_aff() const;
  3110.   inline boolean isa_pw_multi_aff() const;
  3111.   inline isl::set le_set(isl::pw_aff pwaff2) const;
  3112.   inline isl::pw_aff_list list() const;
  3113.   inline isl::set lt_set(isl::pw_aff pwaff2) const;
  3114.   inline isl::multi_pw_aff max(const isl::multi_pw_aff &multi2) const;
  3115.   inline isl::pw_aff max(isl::pw_aff pwaff2) const;
  3116.   inline isl::pw_aff max(const isl::aff &pwaff2) const;
  3117.   inline isl::multi_val max_multi_val() const;
  3118.   inline isl::multi_pw_aff min(const isl::multi_pw_aff &multi2) const;
  3119.   inline isl::pw_aff min(isl::pw_aff pwaff2) const;
  3120.   inline isl::pw_aff min(const isl::aff &pwaff2) const;
  3121.   inline isl::multi_val min_multi_val() const;
  3122.   inline isl::pw_aff mod(isl::val mod) const;
  3123.   inline isl::pw_aff mod(long mod) const;
  3124.   inline isl::pw_aff mul(isl::pw_aff pwaff2) const;
  3125.   inline class size n_piece() const;
  3126.   inline isl::set ne_set(isl::pw_aff pwaff2) const;
  3127.   inline isl::pw_aff neg() const;
  3128.   static inline isl::pw_aff param_on_domain(isl::set domain, isl::id id);
  3129.   inline boolean plain_is_empty() const;
  3130.   inline boolean plain_is_equal(const isl::multi_pw_aff &multi2) const;
  3131.   inline boolean plain_is_equal(const isl::multi_union_pw_aff &multi2) const;
  3132.   inline isl::pw_multi_aff preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const;
  3133.   inline isl::union_pw_multi_aff preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const;
  3134.   inline isl::multi_pw_aff product(const isl::multi_pw_aff &multi2) const;
  3135.   inline isl::pw_multi_aff product(const isl::pw_multi_aff &pma2) const;
  3136.   inline isl::pw_aff pullback(isl::multi_aff ma) const;
  3137.   inline isl::pw_aff pullback(isl::multi_pw_aff mpa) const;
  3138.   inline isl::pw_aff pullback(isl::pw_multi_aff pma) const;
  3139.   inline isl::union_pw_aff pullback(const isl::union_pw_multi_aff &upma) const;
  3140.   inline isl::pw_multi_aff_list pw_multi_aff_list() const;
  3141.   inline isl::pw_multi_aff range_factor_domain() const;
  3142.   inline isl::pw_multi_aff range_factor_range() const;
  3143.   inline isl::multi_pw_aff range_product(const isl::multi_pw_aff &multi2) const;
  3144.   inline isl::multi_union_pw_aff range_product(const isl::multi_union_pw_aff &multi2) const;
  3145.   inline isl::pw_multi_aff range_product(const isl::pw_multi_aff &pma2) const;
  3146.   inline isl::union_pw_multi_aff range_product(const isl::union_pw_multi_aff &upma2) const;
  3147.   inline isl::id range_tuple_id() const;
  3148.   inline isl::multi_pw_aff reset_range_tuple_id() const;
  3149.   inline isl::multi_pw_aff reset_tuple_id(isl::dim type) const;
  3150.   inline isl::multi_pw_aff scale(const isl::multi_val &mv) const;
  3151.   inline isl::pw_aff scale(isl::val v) const;
  3152.   inline isl::pw_aff scale(long v) const;
  3153.   inline isl::multi_pw_aff scale_down(const isl::multi_val &mv) const;
  3154.   inline isl::pw_aff scale_down(isl::val f) const;
  3155.   inline isl::pw_aff scale_down(long f) const;
  3156.   inline isl::multi_pw_aff set_at(int pos, const isl::pw_aff &el) const;
  3157.   inline isl::multi_union_pw_aff set_at(int pos, const isl::union_pw_aff &el) const;
  3158.   inline isl::multi_pw_aff set_pw_aff(int pos, const isl::pw_aff &el) const;
  3159.   inline isl::pw_multi_aff set_pw_aff(unsigned int pos, const isl::pw_aff &pa) const;
  3160.   inline isl::pw_multi_aff set_range_tuple(const isl::id &id) const;
  3161.   inline isl::pw_multi_aff set_range_tuple(const std::string &id) const;
  3162.   inline isl::pw_aff set_tuple_id(isl::dim type, isl::id id) const;
  3163.   inline isl::pw_aff set_tuple_id(isl::dim type, const std::string &id) const;
  3164.   inline isl::multi_union_pw_aff set_union_pw_aff(int pos, const isl::union_pw_aff &el) const;
  3165.   inline class size size() const;
  3166.   inline isl::space space() const;
  3167.   inline isl::space get_space() const;
  3168.   inline isl::multi_pw_aff sub(const isl::multi_pw_aff &multi2) const;
  3169.   inline isl::multi_union_pw_aff sub(const isl::multi_union_pw_aff &multi2) const;
  3170.   inline isl::pw_aff sub(isl::pw_aff pwaff2) const;
  3171.   inline isl::pw_multi_aff sub(const isl::pw_multi_aff &pma2) const;
  3172.   inline isl::union_pw_aff sub(const isl::union_pw_aff &upa2) const;
  3173.   inline isl::union_pw_multi_aff sub(const isl::union_pw_multi_aff &upma2) const;
  3174.   inline isl::pw_aff sub(const isl::aff &pwaff2) const;
  3175.   inline isl::pw_aff subtract_domain(isl::set set) const;
  3176.   inline isl::union_pw_aff subtract_domain(const isl::space &space) const;
  3177.   inline isl::union_pw_aff subtract_domain(const isl::union_set &uset) const;
  3178.   inline isl::pw_aff subtract_domain(const isl::basic_set &set) const;
  3179.   inline isl::pw_aff subtract_domain(const isl::point &set) const;
  3180.   inline isl::pw_aff tdiv_q(isl::pw_aff pa2) const;
  3181.   inline isl::pw_aff tdiv_r(isl::pw_aff pa2) const;
  3182.   inline isl::pw_aff_list to_list() const;
  3183.   inline isl::multi_pw_aff to_multi_pw_aff() const;
  3184.   inline isl::union_pw_aff to_union_pw_aff() const;
  3185.   inline isl::union_pw_multi_aff to_union_pw_multi_aff() const;
  3186.   inline isl::id tuple_id(isl::dim type) const;
  3187.   inline isl::id get_tuple_id(isl::dim type) const;
  3188.   inline isl::multi_pw_aff unbind_params_insert_domain(const isl::multi_id &domain) const;
  3189.   inline isl::multi_pw_aff union_add(const isl::multi_pw_aff &mpa2) const;
  3190.   inline isl::multi_union_pw_aff union_add(const isl::multi_union_pw_aff &mupa2) const;
  3191.   inline isl::pw_aff union_add(isl::pw_aff pwaff2) const;
  3192.   inline isl::pw_multi_aff union_add(const isl::pw_multi_aff &pma2) const;
  3193.   inline isl::union_pw_aff union_add(const isl::union_pw_aff &upa2) const;
  3194.   inline isl::union_pw_multi_aff union_add(const isl::union_pw_multi_aff &upma2) const;
  3195.   inline isl::pw_aff union_add(const isl::aff &pwaff2) const;
  3196.   static inline isl::pw_aff var_on_domain(isl::local_space ls, isl::dim type, unsigned int pos);
  3197. };
  3198.  
  3199. // declarations for isl::pw_aff_list
  3200. inline pw_aff_list manage(__isl_take isl_pw_aff_list *ptr);
  3201. inline pw_aff_list manage_copy(__isl_keep isl_pw_aff_list *ptr);
  3202.  
  3203. class pw_aff_list {
  3204.   friend inline pw_aff_list manage(__isl_take isl_pw_aff_list *ptr);
  3205.   friend inline pw_aff_list manage_copy(__isl_keep isl_pw_aff_list *ptr);
  3206.  
  3207. protected:
  3208.   isl_pw_aff_list *ptr = nullptr;
  3209.  
  3210.   inline explicit pw_aff_list(__isl_take isl_pw_aff_list *ptr);
  3211.  
  3212. public:
  3213.   inline /* implicit */ pw_aff_list();
  3214.   inline /* implicit */ pw_aff_list(const pw_aff_list &obj);
  3215.   inline explicit pw_aff_list(isl::ctx ctx, int n);
  3216.   inline explicit pw_aff_list(isl::pw_aff el);
  3217.   inline explicit pw_aff_list(isl::ctx ctx, const std::string &str);
  3218.   inline pw_aff_list &operator=(pw_aff_list obj);
  3219.   inline ~pw_aff_list();
  3220.   inline __isl_give isl_pw_aff_list *copy() const &;
  3221.   inline __isl_give isl_pw_aff_list *copy() && = delete;
  3222.   inline __isl_keep isl_pw_aff_list *get() const;
  3223.   inline __isl_give isl_pw_aff_list *release();
  3224.   inline bool is_null() const;
  3225.   inline isl::ctx ctx() const;
  3226.  
  3227.   inline isl::pw_aff_list add(isl::pw_aff el) const;
  3228.   inline isl::pw_aff at(int index) const;
  3229.   inline isl::pw_aff get_at(int index) const;
  3230.   inline isl::pw_aff_list clear() const;
  3231.   inline isl::pw_aff_list concat(isl::pw_aff_list list2) const;
  3232.   inline isl::pw_aff_list drop(unsigned int first, unsigned int n) const;
  3233.   inline stat foreach(const std::function<stat(isl::pw_aff)> &fn) const;
  3234.   inline isl::pw_aff_list insert(unsigned int pos, isl::pw_aff el) const;
  3235.   inline class size size() const;
  3236. };
  3237.  
  3238. // declarations for isl::pw_multi_aff
  3239. inline pw_multi_aff manage(__isl_take isl_pw_multi_aff *ptr);
  3240. inline pw_multi_aff manage_copy(__isl_keep isl_pw_multi_aff *ptr);
  3241.  
  3242. class pw_multi_aff {
  3243.   friend inline pw_multi_aff manage(__isl_take isl_pw_multi_aff *ptr);
  3244.   friend inline pw_multi_aff manage_copy(__isl_keep isl_pw_multi_aff *ptr);
  3245.  
  3246. protected:
  3247.   isl_pw_multi_aff *ptr = nullptr;
  3248.  
  3249.   inline explicit pw_multi_aff(__isl_take isl_pw_multi_aff *ptr);
  3250.  
  3251. public:
  3252.   inline /* implicit */ pw_multi_aff();
  3253.   inline /* implicit */ pw_multi_aff(const pw_multi_aff &obj);
  3254.   inline /* implicit */ pw_multi_aff(isl::multi_aff ma);
  3255.   inline /* implicit */ pw_multi_aff(isl::pw_aff pa);
  3256.   inline explicit pw_multi_aff(isl::ctx ctx, const std::string &str);
  3257.   inline pw_multi_aff &operator=(pw_multi_aff obj);
  3258.   inline ~pw_multi_aff();
  3259.   inline __isl_give isl_pw_multi_aff *copy() const &;
  3260.   inline __isl_give isl_pw_multi_aff *copy() && = delete;
  3261.   inline __isl_keep isl_pw_multi_aff *get() const;
  3262.   inline __isl_give isl_pw_multi_aff *release();
  3263.   inline bool is_null() const;
  3264.   inline isl::ctx ctx() const;
  3265.  
  3266.   inline isl::multi_pw_aff add(const isl::multi_pw_aff &multi2) const;
  3267.   inline isl::multi_union_pw_aff add(const isl::multi_union_pw_aff &multi2) const;
  3268.   inline isl::pw_multi_aff add(isl::pw_multi_aff pma2) const;
  3269.   inline isl::union_pw_multi_aff add(const isl::union_pw_multi_aff &upma2) const;
  3270.   inline isl::pw_multi_aff add(const isl::multi_aff &pma2) const;
  3271.   inline isl::pw_multi_aff add(const isl::pw_aff &pma2) const;
  3272.   inline isl::pw_multi_aff add_constant(isl::multi_val mv) const;
  3273.   inline isl::pw_multi_aff add_constant(isl::val v) const;
  3274.   inline isl::pw_multi_aff add_constant(long v) const;
  3275.   inline isl::union_pw_multi_aff add_pw_multi_aff(const isl::pw_multi_aff &pma) const;
  3276.   inline isl::union_pw_multi_aff apply(const isl::union_pw_multi_aff &upma2) const;
  3277.   inline isl::map as_map() const;
  3278.   inline isl::multi_aff as_multi_aff() const;
  3279.   inline isl::multi_union_pw_aff as_multi_union_pw_aff() const;
  3280.   inline isl::pw_multi_aff as_pw_multi_aff() const;
  3281.   inline isl::set as_set() const;
  3282.   inline isl::union_map as_union_map() const;
  3283.   inline isl::pw_aff at(int pos) const;
  3284.   inline isl::pw_aff get_at(int pos) const;
  3285.   inline isl::set bind(const isl::multi_id &tuple) const;
  3286.   inline isl::pw_multi_aff bind_domain(isl::multi_id tuple) const;
  3287.   inline isl::pw_multi_aff bind_domain_wrapped_domain(isl::multi_id tuple) const;
  3288.   inline isl::pw_multi_aff coalesce() const;
  3289.   inline class size dim(isl::dim type) const;
  3290.   inline isl::set domain() const;
  3291.   static inline isl::pw_multi_aff domain_map(isl::space space);
  3292.   inline isl::pw_multi_aff drop_dims(isl::dim type, unsigned int first, unsigned int n) const;
  3293.   inline isl::pw_multi_aff extract_pw_multi_aff(const isl::space &space) const;
  3294.   inline isl::multi_pw_aff flat_range_product(const isl::multi_pw_aff &multi2) const;
  3295.   inline isl::multi_union_pw_aff flat_range_product(const isl::multi_union_pw_aff &multi2) const;
  3296.   inline isl::pw_multi_aff flat_range_product(isl::pw_multi_aff pma2) const;
  3297.   inline isl::union_pw_multi_aff flat_range_product(const isl::union_pw_multi_aff &upma2) const;
  3298.   inline isl::pw_multi_aff flat_range_product(const isl::multi_aff &pma2) const;
  3299.   inline isl::pw_multi_aff flat_range_product(const isl::pw_aff &pma2) const;
  3300.   inline stat foreach_piece(const std::function<stat(isl::set, isl::multi_aff)> &fn) const;
  3301.   static inline isl::pw_multi_aff from_map(isl::map map);
  3302.   inline isl::pw_multi_aff gist(isl::set set) const;
  3303.   inline isl::union_pw_multi_aff gist(const isl::union_set &context) const;
  3304.   inline isl::pw_multi_aff gist(const isl::basic_set &set) const;
  3305.   inline isl::pw_multi_aff gist(const isl::point &set) const;
  3306.   inline boolean has_range_tuple_id() const;
  3307.   inline isl::multi_pw_aff identity() const;
  3308.   static inline isl::pw_multi_aff identity_on_domain(isl::space space);
  3309.   inline isl::pw_multi_aff insert_domain(isl::space domain) const;
  3310.   inline isl::pw_multi_aff intersect_domain(isl::set set) const;
  3311.   inline isl::union_pw_multi_aff intersect_domain(const isl::space &space) const;
  3312.   inline isl::union_pw_multi_aff intersect_domain(const isl::union_set &uset) const;
  3313.   inline isl::pw_multi_aff intersect_domain(const isl::basic_set &set) const;
  3314.   inline isl::pw_multi_aff intersect_domain(const isl::point &set) const;
  3315.   inline isl::union_pw_multi_aff intersect_domain_wrapped_domain(const isl::union_set &uset) const;
  3316.   inline isl::union_pw_multi_aff intersect_domain_wrapped_range(const isl::union_set &uset) const;
  3317.   inline isl::pw_multi_aff intersect_params(isl::set set) const;
  3318.   inline boolean involves_locals() const;
  3319.   inline boolean involves_nan() const;
  3320.   inline boolean involves_param(const isl::id &id) const;
  3321.   inline boolean involves_param(const std::string &id) const;
  3322.   inline boolean involves_param(const isl::id_list &list) const;
  3323.   inline boolean isa_multi_aff() const;
  3324.   inline boolean isa_pw_multi_aff() const;
  3325.   inline isl::pw_aff_list list() const;
  3326.   inline isl::multi_pw_aff max(const isl::multi_pw_aff &multi2) const;
  3327.   inline isl::multi_val max_multi_val() const;
  3328.   inline isl::multi_pw_aff min(const isl::multi_pw_aff &multi2) const;
  3329.   inline isl::multi_val min_multi_val() const;
  3330.   static inline isl::pw_multi_aff multi_val_on_domain(isl::set domain, isl::multi_val mv);
  3331.   inline class size n_piece() const;
  3332.   inline isl::multi_pw_aff neg() const;
  3333.   inline boolean plain_is_empty() const;
  3334.   inline boolean plain_is_equal(const isl::multi_pw_aff &multi2) const;
  3335.   inline boolean plain_is_equal(const isl::multi_union_pw_aff &multi2) const;
  3336.   inline isl::pw_multi_aff preimage_domain_wrapped_domain(isl::pw_multi_aff pma2) const;
  3337.   inline isl::union_pw_multi_aff preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const;
  3338.   inline isl::pw_multi_aff preimage_domain_wrapped_domain(const isl::multi_aff &pma2) const;
  3339.   inline isl::pw_multi_aff preimage_domain_wrapped_domain(const isl::pw_aff &pma2) const;
  3340.   inline isl::multi_pw_aff product(const isl::multi_pw_aff &multi2) const;
  3341.   inline isl::pw_multi_aff product(isl::pw_multi_aff pma2) const;
  3342.   inline isl::pw_multi_aff product(const isl::multi_aff &pma2) const;
  3343.   inline isl::pw_multi_aff product(const isl::pw_aff &pma2) const;
  3344.   static inline isl::pw_multi_aff project_out_map(isl::space space, isl::dim type, unsigned int first, unsigned int n);
  3345.   inline isl::multi_pw_aff pullback(const isl::multi_pw_aff &mpa2) const;
  3346.   inline isl::pw_multi_aff pullback(isl::multi_aff ma) const;
  3347.   inline isl::pw_multi_aff pullback(isl::pw_multi_aff pma2) const;
  3348.   inline isl::union_pw_multi_aff pullback(const isl::union_pw_multi_aff &upma2) const;
  3349.   inline isl::pw_multi_aff_list pw_multi_aff_list() const;
  3350.   inline isl::pw_multi_aff range_factor_domain() const;
  3351.   inline isl::pw_multi_aff range_factor_range() const;
  3352.   static inline isl::pw_multi_aff range_map(isl::space space);
  3353.   inline isl::multi_pw_aff range_product(const isl::multi_pw_aff &multi2) const;
  3354.   inline isl::multi_union_pw_aff range_product(const isl::multi_union_pw_aff &multi2) const;
  3355.   inline isl::pw_multi_aff range_product(isl::pw_multi_aff pma2) const;
  3356.   inline isl::union_pw_multi_aff range_product(const isl::union_pw_multi_aff &upma2) const;
  3357.   inline isl::pw_multi_aff range_product(const isl::multi_aff &pma2) const;
  3358.   inline isl::pw_multi_aff range_product(const isl::pw_aff &pma2) const;
  3359.   inline isl::id range_tuple_id() const;
  3360.   inline isl::id get_range_tuple_id() const;
  3361.   inline isl::multi_pw_aff reset_range_tuple_id() const;
  3362.   inline isl::multi_pw_aff reset_tuple_id(isl::dim type) const;
  3363.   inline isl::multi_pw_aff scale(const isl::multi_val &mv) const;
  3364.   inline isl::pw_multi_aff scale(isl::val v) const;
  3365.   inline isl::pw_multi_aff scale(long v) const;
  3366.   inline isl::multi_pw_aff scale_down(const isl::multi_val &mv) const;
  3367.   inline isl::pw_multi_aff scale_down(isl::val v) const;
  3368.   inline isl::pw_multi_aff scale_down(long v) const;
  3369.   inline isl::multi_pw_aff set_at(int pos, const isl::pw_aff &el) const;
  3370.   inline isl::multi_union_pw_aff set_at(int pos, const isl::union_pw_aff &el) const;
  3371.   inline isl::multi_pw_aff set_pw_aff(int pos, const isl::pw_aff &el) const;
  3372.   inline isl::pw_multi_aff set_pw_aff(unsigned int pos, isl::pw_aff pa) const;
  3373.   inline isl::pw_multi_aff set_range_tuple(isl::id id) const;
  3374.   inline isl::pw_multi_aff set_range_tuple(const std::string &id) const;
  3375.   inline isl::multi_union_pw_aff set_union_pw_aff(int pos, const isl::union_pw_aff &el) const;
  3376.   inline class size size() const;
  3377.   inline isl::space space() const;
  3378.   inline isl::space get_space() const;
  3379.   inline isl::multi_pw_aff sub(const isl::multi_pw_aff &multi2) const;
  3380.   inline isl::multi_union_pw_aff sub(const isl::multi_union_pw_aff &multi2) const;
  3381.   inline isl::pw_multi_aff sub(isl::pw_multi_aff pma2) const;
  3382.   inline isl::union_pw_multi_aff sub(const isl::union_pw_multi_aff &upma2) const;
  3383.   inline isl::pw_multi_aff sub(const isl::multi_aff &pma2) const;
  3384.   inline isl::pw_multi_aff sub(const isl::pw_aff &pma2) const;
  3385.   inline isl::pw_multi_aff subtract_domain(isl::set set) const;
  3386.   inline isl::union_pw_multi_aff subtract_domain(const isl::space &space) const;
  3387.   inline isl::union_pw_multi_aff subtract_domain(const isl::union_set &uset) const;
  3388.   inline isl::pw_multi_aff subtract_domain(const isl::basic_set &set) const;
  3389.   inline isl::pw_multi_aff subtract_domain(const isl::point &set) const;
  3390.   inline isl::pw_multi_aff_list to_list() const;
  3391.   inline isl::multi_pw_aff to_multi_pw_aff() const;
  3392.   inline isl::union_pw_multi_aff to_union_pw_multi_aff() const;
  3393.   inline isl::id tuple_id(isl::dim type) const;
  3394.   inline isl::id get_tuple_id(isl::dim type) const;
  3395.   inline isl::multi_pw_aff unbind_params_insert_domain(const isl::multi_id &domain) const;
  3396.   inline isl::multi_pw_aff union_add(const isl::multi_pw_aff &mpa2) const;
  3397.   inline isl::multi_union_pw_aff union_add(const isl::multi_union_pw_aff &mupa2) const;
  3398.   inline isl::pw_multi_aff union_add(isl::pw_multi_aff pma2) const;
  3399.   inline isl::union_pw_multi_aff union_add(const isl::union_pw_multi_aff &upma2) const;
  3400.   inline isl::pw_multi_aff union_add(const isl::multi_aff &pma2) const;
  3401.   inline isl::pw_multi_aff union_add(const isl::pw_aff &pma2) const;
  3402.   static inline isl::pw_multi_aff zero(isl::space space);
  3403. };
  3404.  
  3405. // declarations for isl::pw_multi_aff_list
  3406. inline pw_multi_aff_list manage(__isl_take isl_pw_multi_aff_list *ptr);
  3407. inline pw_multi_aff_list manage_copy(__isl_keep isl_pw_multi_aff_list *ptr);
  3408.  
  3409. class pw_multi_aff_list {
  3410.   friend inline pw_multi_aff_list manage(__isl_take isl_pw_multi_aff_list *ptr);
  3411.   friend inline pw_multi_aff_list manage_copy(__isl_keep isl_pw_multi_aff_list *ptr);
  3412.  
  3413. protected:
  3414.   isl_pw_multi_aff_list *ptr = nullptr;
  3415.  
  3416.   inline explicit pw_multi_aff_list(__isl_take isl_pw_multi_aff_list *ptr);
  3417.  
  3418. public:
  3419.   inline /* implicit */ pw_multi_aff_list();
  3420.   inline /* implicit */ pw_multi_aff_list(const pw_multi_aff_list &obj);
  3421.   inline explicit pw_multi_aff_list(isl::ctx ctx, int n);
  3422.   inline explicit pw_multi_aff_list(isl::pw_multi_aff el);
  3423.   inline explicit pw_multi_aff_list(isl::ctx ctx, const std::string &str);
  3424.   inline pw_multi_aff_list &operator=(pw_multi_aff_list obj);
  3425.   inline ~pw_multi_aff_list();
  3426.   inline __isl_give isl_pw_multi_aff_list *copy() const &;
  3427.   inline __isl_give isl_pw_multi_aff_list *copy() && = delete;
  3428.   inline __isl_keep isl_pw_multi_aff_list *get() const;
  3429.   inline __isl_give isl_pw_multi_aff_list *release();
  3430.   inline bool is_null() const;
  3431.   inline isl::ctx ctx() const;
  3432.  
  3433.   inline isl::pw_multi_aff_list add(isl::pw_multi_aff el) const;
  3434.   inline isl::pw_multi_aff at(int index) const;
  3435.   inline isl::pw_multi_aff get_at(int index) const;
  3436.   inline isl::pw_multi_aff_list clear() const;
  3437.   inline isl::pw_multi_aff_list concat(isl::pw_multi_aff_list list2) const;
  3438.   inline isl::pw_multi_aff_list drop(unsigned int first, unsigned int n) const;
  3439.   inline stat foreach(const std::function<stat(isl::pw_multi_aff)> &fn) const;
  3440.   inline isl::pw_multi_aff_list insert(unsigned int pos, isl::pw_multi_aff el) const;
  3441.   inline class size size() const;
  3442. };
  3443.  
  3444. // declarations for isl::schedule
  3445. inline schedule manage(__isl_take isl_schedule *ptr);
  3446. inline schedule manage_copy(__isl_keep isl_schedule *ptr);
  3447.  
  3448. class schedule {
  3449.   friend inline schedule manage(__isl_take isl_schedule *ptr);
  3450.   friend inline schedule manage_copy(__isl_keep isl_schedule *ptr);
  3451.  
  3452. protected:
  3453.   isl_schedule *ptr = nullptr;
  3454.  
  3455.   inline explicit schedule(__isl_take isl_schedule *ptr);
  3456.  
  3457. public:
  3458.   inline /* implicit */ schedule();
  3459.   inline /* implicit */ schedule(const schedule &obj);
  3460.   inline explicit schedule(isl::ctx ctx, const std::string &str);
  3461.   inline schedule &operator=(schedule obj);
  3462.   inline ~schedule();
  3463.   inline __isl_give isl_schedule *copy() const &;
  3464.   inline __isl_give isl_schedule *copy() && = delete;
  3465.   inline __isl_keep isl_schedule *get() const;
  3466.   inline __isl_give isl_schedule *release();
  3467.   inline bool is_null() const;
  3468.   inline isl::ctx ctx() const;
  3469.  
  3470.   inline isl::schedule align_params(isl::space space) const;
  3471.   inline isl::union_set domain() const;
  3472.   inline isl::union_set get_domain() const;
  3473.   static inline isl::schedule from_domain(isl::union_set domain);
  3474.   inline isl::schedule gist_domain_params(isl::set context) const;
  3475.   inline isl::schedule insert_partial_schedule(isl::multi_union_pw_aff partial) const;
  3476.   inline isl::schedule intersect_domain(isl::union_set domain) const;
  3477.   inline isl::union_map map() const;
  3478.   inline isl::union_map get_map() const;
  3479.   inline isl::schedule pullback(isl::union_pw_multi_aff upma) const;
  3480.   inline isl::schedule_node root() const;
  3481.   inline isl::schedule_node get_root() const;
  3482.   inline isl::schedule sequence(isl::schedule schedule2) const;
  3483. };
  3484.  
  3485. // declarations for isl::schedule_constraints
  3486. inline schedule_constraints manage(__isl_take isl_schedule_constraints *ptr);
  3487. inline schedule_constraints manage_copy(__isl_keep isl_schedule_constraints *ptr);
  3488.  
  3489. class schedule_constraints {
  3490.   friend inline schedule_constraints manage(__isl_take isl_schedule_constraints *ptr);
  3491.   friend inline schedule_constraints manage_copy(__isl_keep isl_schedule_constraints *ptr);
  3492.  
  3493. protected:
  3494.   isl_schedule_constraints *ptr = nullptr;
  3495.  
  3496.   inline explicit schedule_constraints(__isl_take isl_schedule_constraints *ptr);
  3497.  
  3498. public:
  3499.   inline /* implicit */ schedule_constraints();
  3500.   inline /* implicit */ schedule_constraints(const schedule_constraints &obj);
  3501.   inline explicit schedule_constraints(isl::ctx ctx, const std::string &str);
  3502.   inline schedule_constraints &operator=(schedule_constraints obj);
  3503.   inline ~schedule_constraints();
  3504.   inline __isl_give isl_schedule_constraints *copy() const &;
  3505.   inline __isl_give isl_schedule_constraints *copy() && = delete;
  3506.   inline __isl_keep isl_schedule_constraints *get() const;
  3507.   inline __isl_give isl_schedule_constraints *release();
  3508.   inline bool is_null() const;
  3509.   inline isl::ctx ctx() const;
  3510.  
  3511.   inline isl::union_map coincidence() const;
  3512.   inline isl::union_map get_coincidence() const;
  3513.   inline isl::schedule compute_schedule() const;
  3514.   inline isl::union_map conditional_validity() const;
  3515.   inline isl::union_map get_conditional_validity() const;
  3516.   inline isl::union_map conditional_validity_condition() const;
  3517.   inline isl::union_map get_conditional_validity_condition() const;
  3518.   inline isl::set context() const;
  3519.   inline isl::set get_context() const;
  3520.   inline isl::union_set domain() const;
  3521.   inline isl::union_set get_domain() const;
  3522.   static inline isl::schedule_constraints on_domain(isl::union_set domain);
  3523.   inline isl::union_map proximity() const;
  3524.   inline isl::union_map get_proximity() const;
  3525.   inline isl::schedule_constraints set_coincidence(isl::union_map coincidence) const;
  3526.   inline isl::schedule_constraints set_conditional_validity(isl::union_map condition, isl::union_map validity) const;
  3527.   inline isl::schedule_constraints set_context(isl::set context) const;
  3528.   inline isl::schedule_constraints set_proximity(isl::union_map proximity) const;
  3529.   inline isl::schedule_constraints set_validity(isl::union_map validity) const;
  3530.   inline isl::union_map validity() const;
  3531.   inline isl::union_map get_validity() const;
  3532. };
  3533.  
  3534. // declarations for isl::schedule_node
  3535. inline schedule_node manage(__isl_take isl_schedule_node *ptr);
  3536. inline schedule_node manage_copy(__isl_keep isl_schedule_node *ptr);
  3537.  
  3538. class schedule_node {
  3539.   friend inline schedule_node manage(__isl_take isl_schedule_node *ptr);
  3540.   friend inline schedule_node manage_copy(__isl_keep isl_schedule_node *ptr);
  3541.  
  3542. protected:
  3543.   isl_schedule_node *ptr = nullptr;
  3544.  
  3545.   inline explicit schedule_node(__isl_take isl_schedule_node *ptr);
  3546.  
  3547. public:
  3548.   inline /* implicit */ schedule_node();
  3549.   inline /* implicit */ schedule_node(const schedule_node &obj);
  3550.   inline schedule_node &operator=(schedule_node obj);
  3551.   inline ~schedule_node();
  3552.   inline __isl_give isl_schedule_node *copy() const &;
  3553.   inline __isl_give isl_schedule_node *copy() && = delete;
  3554.   inline __isl_keep isl_schedule_node *get() const;
  3555.   inline __isl_give isl_schedule_node *release();
  3556.   inline bool is_null() const;
  3557. private:
  3558.   template <typename T,
  3559.           typename = typename std::enable_if<std::is_same<
  3560.                   const decltype(isl_schedule_node_get_type(nullptr)),
  3561.                   const T>::value>::type>
  3562.   inline boolean isa_type(T subtype) const;
  3563. public:
  3564.   template <class T> inline boolean isa() const;
  3565.   template <class T> inline T as() const;
  3566.   inline isl::ctx ctx() const;
  3567.  
  3568.   inline isl::schedule_node ancestor(int generation) const;
  3569.   inline class size ancestor_child_position(const isl::schedule_node &ancestor) const;
  3570.   inline class size get_ancestor_child_position(const isl::schedule_node &ancestor) const;
  3571.   inline isl::schedule_node child(int pos) const;
  3572.   inline class size child_position() const;
  3573.   inline class size get_child_position() const;
  3574.   inline isl::union_set domain() const;
  3575.   inline isl::union_set get_domain() const;
  3576.   inline boolean every_descendant(const std::function<boolean(isl::schedule_node)> &test) const;
  3577.   inline isl::schedule_node first_child() const;
  3578.   inline stat foreach_ancestor_top_down(const std::function<stat(isl::schedule_node)> &fn) const;
  3579.   inline stat foreach_descendant_top_down(const std::function<boolean(isl::schedule_node)> &fn) const;
  3580.   static inline isl::schedule_node from_domain(isl::union_set domain);
  3581.   static inline isl::schedule_node from_extension(isl::union_map extension);
  3582.   inline isl::schedule_node graft_after(isl::schedule_node graft) const;
  3583.   inline isl::schedule_node graft_before(isl::schedule_node graft) const;
  3584.   inline boolean has_children() const;
  3585.   inline boolean has_next_sibling() const;
  3586.   inline boolean has_parent() const;
  3587.   inline boolean has_previous_sibling() const;
  3588.   inline isl::schedule_node insert_context(isl::set context) const;
  3589.   inline isl::schedule_node insert_filter(isl::union_set filter) const;
  3590.   inline isl::schedule_node insert_guard(isl::set context) const;
  3591.   inline isl::schedule_node insert_mark(isl::id mark) const;
  3592.   inline isl::schedule_node insert_mark(const std::string &mark) const;
  3593.   inline isl::schedule_node insert_partial_schedule(isl::multi_union_pw_aff schedule) const;
  3594.   inline isl::schedule_node insert_sequence(isl::union_set_list filters) const;
  3595.   inline isl::schedule_node insert_set(isl::union_set_list filters) const;
  3596.   inline boolean is_equal(const isl::schedule_node &node2) const;
  3597.   inline boolean is_subtree_anchored() const;
  3598.   inline isl::schedule_node map_descendant_bottom_up(const std::function<isl::schedule_node(isl::schedule_node)> &fn) const;
  3599.   inline class size n_children() const;
  3600.   inline isl::schedule_node next_sibling() const;
  3601.   inline isl::schedule_node order_after(isl::union_set filter) const;
  3602.   inline isl::schedule_node order_before(isl::union_set filter) const;
  3603.   inline isl::schedule_node parent() const;
  3604.   inline isl::multi_union_pw_aff prefix_schedule_multi_union_pw_aff() const;
  3605.   inline isl::multi_union_pw_aff get_prefix_schedule_multi_union_pw_aff() const;
  3606.   inline isl::union_map prefix_schedule_relation() const;
  3607.   inline isl::union_map get_prefix_schedule_relation() const;
  3608.   inline isl::union_map prefix_schedule_union_map() const;
  3609.   inline isl::union_map get_prefix_schedule_union_map() const;
  3610.   inline isl::union_pw_multi_aff prefix_schedule_union_pw_multi_aff() const;
  3611.   inline isl::union_pw_multi_aff get_prefix_schedule_union_pw_multi_aff() const;
  3612.   inline isl::schedule_node previous_sibling() const;
  3613.   inline isl::schedule_node root() const;
  3614.   inline isl::schedule schedule() const;
  3615.   inline isl::schedule get_schedule() const;
  3616.   inline class size schedule_depth() const;
  3617.   inline class size get_schedule_depth() const;
  3618.   inline isl::schedule_node shared_ancestor(const isl::schedule_node &node2) const;
  3619.   inline isl::schedule_node get_shared_ancestor(const isl::schedule_node &node2) const;
  3620.   inline class size tree_depth() const;
  3621.   inline class size get_tree_depth() const;
  3622.   inline isl::union_set universe_domain() const;
  3623.   inline isl::union_set get_universe_domain() const;
  3624. };
  3625.  
  3626. // declarations for isl::schedule_node_band
  3627.  
  3628. class schedule_node_band : public schedule_node {
  3629.   template <class T>
  3630.   friend boolean schedule_node::isa() const;
  3631.   friend schedule_node_band schedule_node::as<schedule_node_band>() const;
  3632.   static const auto type = isl_schedule_node_band;
  3633.  
  3634. protected:
  3635.   inline explicit schedule_node_band(__isl_take isl_schedule_node *ptr);
  3636.  
  3637. public:
  3638.   inline /* implicit */ schedule_node_band();
  3639.   inline /* implicit */ schedule_node_band(const schedule_node_band &obj);
  3640.   inline schedule_node_band &operator=(schedule_node_band obj);
  3641.   inline isl::ctx ctx() const;
  3642.  
  3643.   inline isl::union_set ast_build_options() const;
  3644.   inline isl::union_set get_ast_build_options() const;
  3645.   inline isl::set ast_isolate_option() const;
  3646.   inline isl::set get_ast_isolate_option() const;
  3647.   inline boolean member_get_coincident(int pos) const;
  3648.   inline schedule_node_band member_set_coincident(int pos, int coincident) const;
  3649.   inline schedule_node_band mod(isl::multi_val mv) const;
  3650.   inline class size n_member() const;
  3651.   inline isl::multi_union_pw_aff partial_schedule() const;
  3652.   inline isl::multi_union_pw_aff get_partial_schedule() const;
  3653.   inline boolean permutable() const;
  3654.   inline boolean get_permutable() const;
  3655.   inline schedule_node_band scale(isl::multi_val mv) const;
  3656.   inline schedule_node_band scale_down(isl::multi_val mv) const;
  3657.   inline schedule_node_band set_ast_build_options(isl::union_set options) const;
  3658.   inline schedule_node_band set_permutable(int permutable) const;
  3659.   inline schedule_node_band shift(isl::multi_union_pw_aff shift) const;
  3660.   inline schedule_node_band split(int pos) const;
  3661.   inline schedule_node_band tile(isl::multi_val sizes) const;
  3662.   inline schedule_node_band member_set_ast_loop_default(int pos) const;
  3663.   inline schedule_node_band member_set_ast_loop_atomic(int pos) const;
  3664.   inline schedule_node_band member_set_ast_loop_unroll(int pos) const;
  3665.   inline schedule_node_band member_set_ast_loop_separate(int pos) const;
  3666. };
  3667.  
  3668. // declarations for isl::schedule_node_context
  3669.  
  3670. class schedule_node_context : public schedule_node {
  3671.   template <class T>
  3672.   friend boolean schedule_node::isa() const;
  3673.   friend schedule_node_context schedule_node::as<schedule_node_context>() const;
  3674.   static const auto type = isl_schedule_node_context;
  3675.  
  3676. protected:
  3677.   inline explicit schedule_node_context(__isl_take isl_schedule_node *ptr);
  3678.  
  3679. public:
  3680.   inline /* implicit */ schedule_node_context();
  3681.   inline /* implicit */ schedule_node_context(const schedule_node_context &obj);
  3682.   inline schedule_node_context &operator=(schedule_node_context obj);
  3683.   inline isl::ctx ctx() const;
  3684.  
  3685.   inline isl::set context() const;
  3686.   inline isl::set get_context() const;
  3687. };
  3688.  
  3689. // declarations for isl::schedule_node_domain
  3690.  
  3691. class schedule_node_domain : public schedule_node {
  3692.   template <class T>
  3693.   friend boolean schedule_node::isa() const;
  3694.   friend schedule_node_domain schedule_node::as<schedule_node_domain>() const;
  3695.   static const auto type = isl_schedule_node_domain;
  3696.  
  3697. protected:
  3698.   inline explicit schedule_node_domain(__isl_take isl_schedule_node *ptr);
  3699.  
  3700. public:
  3701.   inline /* implicit */ schedule_node_domain();
  3702.   inline /* implicit */ schedule_node_domain(const schedule_node_domain &obj);
  3703.   inline schedule_node_domain &operator=(schedule_node_domain obj);
  3704.   inline isl::ctx ctx() const;
  3705.  
  3706.   inline isl::union_set domain() const;
  3707.   inline isl::union_set get_domain() const;
  3708. };
  3709.  
  3710. // declarations for isl::schedule_node_expansion
  3711.  
  3712. class schedule_node_expansion : public schedule_node {
  3713.   template <class T>
  3714.   friend boolean schedule_node::isa() const;
  3715.   friend schedule_node_expansion schedule_node::as<schedule_node_expansion>() const;
  3716.   static const auto type = isl_schedule_node_expansion;
  3717.  
  3718. protected:
  3719.   inline explicit schedule_node_expansion(__isl_take isl_schedule_node *ptr);
  3720.  
  3721. public:
  3722.   inline /* implicit */ schedule_node_expansion();
  3723.   inline /* implicit */ schedule_node_expansion(const schedule_node_expansion &obj);
  3724.   inline schedule_node_expansion &operator=(schedule_node_expansion obj);
  3725.   inline isl::ctx ctx() const;
  3726.  
  3727.   inline isl::union_pw_multi_aff contraction() const;
  3728.   inline isl::union_pw_multi_aff get_contraction() const;
  3729.   inline isl::union_map expansion() const;
  3730.   inline isl::union_map get_expansion() const;
  3731. };
  3732.  
  3733. // declarations for isl::schedule_node_extension
  3734.  
  3735. class schedule_node_extension : public schedule_node {
  3736.   template <class T>
  3737.   friend boolean schedule_node::isa() const;
  3738.   friend schedule_node_extension schedule_node::as<schedule_node_extension>() const;
  3739.   static const auto type = isl_schedule_node_extension;
  3740.  
  3741. protected:
  3742.   inline explicit schedule_node_extension(__isl_take isl_schedule_node *ptr);
  3743.  
  3744. public:
  3745.   inline /* implicit */ schedule_node_extension();
  3746.   inline /* implicit */ schedule_node_extension(const schedule_node_extension &obj);
  3747.   inline schedule_node_extension &operator=(schedule_node_extension obj);
  3748.   inline isl::ctx ctx() const;
  3749.  
  3750.   inline isl::union_map extension() const;
  3751.   inline isl::union_map get_extension() const;
  3752. };
  3753.  
  3754. // declarations for isl::schedule_node_filter
  3755.  
  3756. class schedule_node_filter : public schedule_node {
  3757.   template <class T>
  3758.   friend boolean schedule_node::isa() const;
  3759.   friend schedule_node_filter schedule_node::as<schedule_node_filter>() const;
  3760.   static const auto type = isl_schedule_node_filter;
  3761.  
  3762. protected:
  3763.   inline explicit schedule_node_filter(__isl_take isl_schedule_node *ptr);
  3764.  
  3765. public:
  3766.   inline /* implicit */ schedule_node_filter();
  3767.   inline /* implicit */ schedule_node_filter(const schedule_node_filter &obj);
  3768.   inline schedule_node_filter &operator=(schedule_node_filter obj);
  3769.   inline isl::ctx ctx() const;
  3770.  
  3771.   inline isl::union_set filter() const;
  3772.   inline isl::union_set get_filter() const;
  3773. };
  3774.  
  3775. // declarations for isl::schedule_node_guard
  3776.  
  3777. class schedule_node_guard : public schedule_node {
  3778.   template <class T>
  3779.   friend boolean schedule_node::isa() const;
  3780.   friend schedule_node_guard schedule_node::as<schedule_node_guard>() const;
  3781.   static const auto type = isl_schedule_node_guard;
  3782.  
  3783. protected:
  3784.   inline explicit schedule_node_guard(__isl_take isl_schedule_node *ptr);
  3785.  
  3786. public:
  3787.   inline /* implicit */ schedule_node_guard();
  3788.   inline /* implicit */ schedule_node_guard(const schedule_node_guard &obj);
  3789.   inline schedule_node_guard &operator=(schedule_node_guard obj);
  3790.   inline isl::ctx ctx() const;
  3791.  
  3792.   inline isl::set guard() const;
  3793.   inline isl::set get_guard() const;
  3794. };
  3795.  
  3796. // declarations for isl::schedule_node_leaf
  3797.  
  3798. class schedule_node_leaf : public schedule_node {
  3799.   template <class T>
  3800.   friend boolean schedule_node::isa() const;
  3801.   friend schedule_node_leaf schedule_node::as<schedule_node_leaf>() const;
  3802.   static const auto type = isl_schedule_node_leaf;
  3803.  
  3804. protected:
  3805.   inline explicit schedule_node_leaf(__isl_take isl_schedule_node *ptr);
  3806.  
  3807. public:
  3808.   inline /* implicit */ schedule_node_leaf();
  3809.   inline /* implicit */ schedule_node_leaf(const schedule_node_leaf &obj);
  3810.   inline schedule_node_leaf &operator=(schedule_node_leaf obj);
  3811.   inline isl::ctx ctx() const;
  3812.  
  3813. };
  3814.  
  3815. // declarations for isl::schedule_node_mark
  3816.  
  3817. class schedule_node_mark : public schedule_node {
  3818.   template <class T>
  3819.   friend boolean schedule_node::isa() const;
  3820.   friend schedule_node_mark schedule_node::as<schedule_node_mark>() const;
  3821.   static const auto type = isl_schedule_node_mark;
  3822.  
  3823. protected:
  3824.   inline explicit schedule_node_mark(__isl_take isl_schedule_node *ptr);
  3825.  
  3826. public:
  3827.   inline /* implicit */ schedule_node_mark();
  3828.   inline /* implicit */ schedule_node_mark(const schedule_node_mark &obj);
  3829.   inline schedule_node_mark &operator=(schedule_node_mark obj);
  3830.   inline isl::ctx ctx() const;
  3831.  
  3832.   inline isl::id id() const;
  3833.   inline isl::id get_id() const;
  3834. };
  3835.  
  3836. // declarations for isl::schedule_node_sequence
  3837.  
  3838. class schedule_node_sequence : public schedule_node {
  3839.   template <class T>
  3840.   friend boolean schedule_node::isa() const;
  3841.   friend schedule_node_sequence schedule_node::as<schedule_node_sequence>() const;
  3842.   static const auto type = isl_schedule_node_sequence;
  3843.  
  3844. protected:
  3845.   inline explicit schedule_node_sequence(__isl_take isl_schedule_node *ptr);
  3846.  
  3847. public:
  3848.   inline /* implicit */ schedule_node_sequence();
  3849.   inline /* implicit */ schedule_node_sequence(const schedule_node_sequence &obj);
  3850.   inline schedule_node_sequence &operator=(schedule_node_sequence obj);
  3851.   inline isl::ctx ctx() const;
  3852.  
  3853. };
  3854.  
  3855. // declarations for isl::schedule_node_set
  3856.  
  3857. class schedule_node_set : public schedule_node {
  3858.   template <class T>
  3859.   friend boolean schedule_node::isa() const;
  3860.   friend schedule_node_set schedule_node::as<schedule_node_set>() const;
  3861.   static const auto type = isl_schedule_node_set;
  3862.  
  3863. protected:
  3864.   inline explicit schedule_node_set(__isl_take isl_schedule_node *ptr);
  3865.  
  3866. public:
  3867.   inline /* implicit */ schedule_node_set();
  3868.   inline /* implicit */ schedule_node_set(const schedule_node_set &obj);
  3869.   inline schedule_node_set &operator=(schedule_node_set obj);
  3870.   inline isl::ctx ctx() const;
  3871.  
  3872. };
  3873.  
  3874. // declarations for isl::set
  3875. inline set manage(__isl_take isl_set *ptr);
  3876. inline set manage_copy(__isl_keep isl_set *ptr);
  3877.  
  3878. class set {
  3879.   friend inline set manage(__isl_take isl_set *ptr);
  3880.   friend inline set manage_copy(__isl_keep isl_set *ptr);
  3881.  
  3882. protected:
  3883.   isl_set *ptr = nullptr;
  3884.  
  3885.   inline explicit set(__isl_take isl_set *ptr);
  3886.  
  3887. public:
  3888.   inline /* implicit */ set();
  3889.   inline /* implicit */ set(const set &obj);
  3890.   inline /* implicit */ set(isl::basic_set bset);
  3891.   inline /* implicit */ set(isl::point pnt);
  3892.   inline explicit set(isl::union_set uset);
  3893.   inline explicit set(isl::ctx ctx, const std::string &str);
  3894.   inline set &operator=(set obj);
  3895.   inline ~set();
  3896.   inline __isl_give isl_set *copy() const &;
  3897.   inline __isl_give isl_set *copy() && = delete;
  3898.   inline __isl_keep isl_set *get() const;
  3899.   inline __isl_give isl_set *release();
  3900.   inline bool is_null() const;
  3901.   inline isl::ctx ctx() const;
  3902.  
  3903.   inline isl::set add_constraint(isl::constraint constraint) const;
  3904.   inline isl::set add_dims(isl::dim type, unsigned int n) const;
  3905.   inline isl::basic_set affine_hull() const;
  3906.   inline isl::set align_params(isl::space model) const;
  3907.   inline isl::set apply(isl::map map) const;
  3908.   inline isl::union_set apply(const isl::union_map &umap) const;
  3909.   inline isl::set apply(const isl::basic_map &map) const;
  3910.   inline isl::pw_multi_aff as_pw_multi_aff() const;
  3911.   inline isl::set as_set() const;
  3912.   inline isl::basic_set_list basic_set_list() const;
  3913.   inline isl::basic_set_list get_basic_set_list() const;
  3914.   inline isl::set bind(isl::multi_id tuple) const;
  3915.   inline isl::set coalesce() const;
  3916.   inline isl::set complement() const;
  3917.   inline isl::union_set compute_divs() const;
  3918.   inline boolean contains(const isl::space &space) const;
  3919.   inline isl::basic_set convex_hull() const;
  3920.   inline isl::set detect_equalities() const;
  3921.   inline class size dim(isl::dim type) const;
  3922.   inline boolean dim_has_any_lower_bound(isl::dim type, unsigned int pos) const;
  3923.   inline isl::id dim_id(isl::dim type, unsigned int pos) const;
  3924.   inline isl::id get_dim_id(isl::dim type, unsigned int pos) const;
  3925.   inline isl::pw_aff dim_max(int pos) const;
  3926.   inline isl::val dim_max_val(int pos) const;
  3927.   inline isl::pw_aff dim_min(int pos) const;
  3928.   inline isl::val dim_min_val(int pos) const;
  3929.   inline std::string dim_name(isl::dim type, unsigned int pos) const;
  3930.   inline std::string get_dim_name(isl::dim type, unsigned int pos) const;
  3931.   inline isl::set drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const;
  3932.   inline isl::set eliminate(isl::dim type, unsigned int first, unsigned int n) const;
  3933.   static inline isl::set empty(isl::space space);
  3934.   inline boolean every_set(const std::function<boolean(isl::set)> &test) const;
  3935.   inline isl::set extract_set(const isl::space &space) const;
  3936.   inline int find_dim_by_id(isl::dim type, const isl::id &id) const;
  3937.   inline int find_dim_by_id(isl::dim type, const std::string &id) const;
  3938.   inline isl::set fix_si(isl::dim type, unsigned int pos, int value) const;
  3939.   inline isl::set flatten() const;
  3940.   inline stat foreach_basic_set(const std::function<stat(isl::basic_set)> &fn) const;
  3941.   inline stat foreach_point(const std::function<stat(isl::point)> &fn) const;
  3942.   inline stat foreach_set(const std::function<stat(isl::set)> &fn) const;
  3943.   inline isl::set gist(isl::set context) const;
  3944.   inline isl::union_set gist(const isl::union_set &context) const;
  3945.   inline isl::set gist(const isl::basic_set &context) const;
  3946.   inline isl::set gist(const isl::point &context) const;
  3947.   inline isl::set gist_params(isl::set context) const;
  3948.   inline boolean has_equal_space(const isl::set &set2) const;
  3949.   inline isl::map identity() const;
  3950.   inline isl::union_pw_multi_aff identity_union_pw_multi_aff() const;
  3951.   inline isl::pw_aff indicator_function() const;
  3952.   inline isl::set insert_dims(isl::dim type, unsigned int pos, unsigned int n) const;
  3953.   inline isl::map insert_domain(isl::space domain) const;
  3954.   inline isl::set intersect(isl::set set2) const;
  3955.   inline isl::union_set intersect(const isl::union_set &uset2) const;
  3956.   inline isl::set intersect(const isl::basic_set &set2) const;
  3957.   inline isl::set intersect(const isl::point &set2) const;
  3958.   inline isl::set intersect_params(isl::set params) const;
  3959.   inline boolean involves_dims(isl::dim type, unsigned int first, unsigned int n) const;
  3960.   inline boolean involves_locals() const;
  3961.   inline boolean is_bounded() const;
  3962.   inline boolean is_disjoint(const isl::set &set2) const;
  3963.   inline boolean is_disjoint(const isl::union_set &uset2) const;
  3964.   inline boolean is_disjoint(const isl::basic_set &set2) const;
  3965.   inline boolean is_disjoint(const isl::point &set2) const;
  3966.   inline boolean is_empty() const;
  3967.   inline boolean is_equal(const isl::set &set2) const;
  3968.   inline boolean is_equal(const isl::union_set &uset2) const;
  3969.   inline boolean is_equal(const isl::basic_set &set2) const;
  3970.   inline boolean is_equal(const isl::point &set2) const;
  3971.   inline boolean is_params() const;
  3972.   inline boolean is_singleton() const;
  3973.   inline boolean is_strict_subset(const isl::set &set2) const;
  3974.   inline boolean is_strict_subset(const isl::union_set &uset2) const;
  3975.   inline boolean is_strict_subset(const isl::basic_set &set2) const;
  3976.   inline boolean is_strict_subset(const isl::point &set2) const;
  3977.   inline boolean is_subset(const isl::set &set2) const;
  3978.   inline boolean is_subset(const isl::union_set &uset2) const;
  3979.   inline boolean is_subset(const isl::basic_set &set2) const;
  3980.   inline boolean is_subset(const isl::point &set2) const;
  3981.   inline boolean is_wrapping() const;
  3982.   inline boolean isa_set() const;
  3983.   inline isl::set lexmax() const;
  3984.   inline isl::pw_multi_aff lexmax_pw_multi_aff() const;
  3985.   inline isl::set lexmin() const;
  3986.   inline isl::pw_multi_aff lexmin_pw_multi_aff() const;
  3987.   inline isl::set lower_bound(isl::multi_pw_aff lower) const;
  3988.   inline isl::set lower_bound(isl::multi_val lower) const;
  3989.   inline isl::set lower_bound_si(isl::dim type, unsigned int pos, int value) const;
  3990.   inline isl::set lower_bound_val(isl::dim type, unsigned int pos, isl::val value) const;
  3991.   inline isl::set lower_bound_val(isl::dim type, unsigned int pos, long value) const;
  3992.   inline isl::multi_pw_aff max_multi_pw_aff() const;
  3993.   inline isl::val max_val(const isl::aff &obj) const;
  3994.   inline isl::multi_pw_aff min_multi_pw_aff() const;
  3995.   inline isl::val min_val(const isl::aff &obj) const;
  3996.   inline class size n_basic_set() const;
  3997.   inline isl::set params() const;
  3998.   inline isl::val plain_get_val_if_fixed(isl::dim type, unsigned int pos) const;
  3999.   inline isl::multi_val plain_multi_val_if_fixed() const;
  4000.   inline isl::multi_val get_plain_multi_val_if_fixed() const;
  4001.   inline isl::basic_set polyhedral_hull() const;
  4002.   inline isl::set preimage(isl::multi_aff ma) const;
  4003.   inline isl::set preimage(isl::multi_pw_aff mpa) const;
  4004.   inline isl::set preimage(isl::pw_multi_aff pma) const;
  4005.   inline isl::union_set preimage(const isl::union_pw_multi_aff &upma) const;
  4006.   inline isl::set product(isl::set set2) const;
  4007.   inline isl::set project_out(isl::dim type, unsigned int first, unsigned int n) const;
  4008.   inline isl::set project_out_all_params() const;
  4009.   inline isl::set project_out_param(isl::id id) const;
  4010.   inline isl::set project_out_param(const std::string &id) const;
  4011.   inline isl::set project_out_param(isl::id_list list) const;
  4012.   inline isl::pw_multi_aff pw_multi_aff_on_domain(isl::multi_val mv) const;
  4013.   inline isl::set remove_dims(isl::dim type, unsigned int first, unsigned int n) const;
  4014.   inline isl::set remove_divs() const;
  4015.   inline isl::set remove_redundancies() const;
  4016.   inline isl::set reset_tuple_id() const;
  4017.   inline isl::basic_set sample() const;
  4018.   inline isl::point sample_point() const;
  4019.   inline isl::set set_dim_id(isl::dim type, unsigned int pos, isl::id id) const;
  4020.   inline isl::set set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const;
  4021.   inline isl::set_list set_list() const;
  4022.   inline isl::set set_tuple_id(isl::id id) const;
  4023.   inline isl::set set_tuple_id(const std::string &id) const;
  4024.   inline isl::fixed_box simple_fixed_box_hull() const;
  4025.   inline isl::fixed_box get_simple_fixed_box_hull() const;
  4026.   inline isl::basic_set simple_hull() const;
  4027.   inline isl::space space() const;
  4028.   inline isl::space get_space() const;
  4029.   inline isl::val stride(int pos) const;
  4030.   inline isl::val get_stride(int pos) const;
  4031.   inline isl::set subtract(isl::set set2) const;
  4032.   inline isl::union_set subtract(const isl::union_set &uset2) const;
  4033.   inline isl::set subtract(const isl::basic_set &set2) const;
  4034.   inline isl::set subtract(const isl::point &set2) const;
  4035.   inline isl::set_list to_list() const;
  4036.   inline isl::union_set to_union_set() const;
  4037.   inline isl::map translation() const;
  4038.   inline class size tuple_dim() const;
  4039.   inline isl::id tuple_id() const;
  4040.   inline isl::id get_tuple_id() const;
  4041.   inline std::string tuple_name() const;
  4042.   inline std::string get_tuple_name() const;
  4043.   inline isl::set unbind_params(isl::multi_id tuple) const;
  4044.   inline isl::map unbind_params_insert_domain(isl::multi_id domain) const;
  4045.   inline isl::set unite(isl::set set2) const;
  4046.   inline isl::union_set unite(const isl::union_set &uset2) const;
  4047.   inline isl::set unite(const isl::basic_set &set2) const;
  4048.   inline isl::set unite(const isl::point &set2) const;
  4049.   static inline isl::set universe(isl::space space);
  4050.   inline isl::basic_set unshifted_simple_hull() const;
  4051.   inline isl::map unwrap() const;
  4052.   inline isl::set upper_bound(isl::multi_pw_aff upper) const;
  4053.   inline isl::set upper_bound(isl::multi_val upper) const;
  4054.   inline isl::set upper_bound_val(isl::dim type, unsigned int pos, isl::val value) const;
  4055.   inline isl::set upper_bound_val(isl::dim type, unsigned int pos, long value) const;
  4056. };
  4057.  
  4058. // declarations for isl::set_list
  4059. inline set_list manage(__isl_take isl_set_list *ptr);
  4060. inline set_list manage_copy(__isl_keep isl_set_list *ptr);
  4061.  
  4062. class set_list {
  4063.   friend inline set_list manage(__isl_take isl_set_list *ptr);
  4064.   friend inline set_list manage_copy(__isl_keep isl_set_list *ptr);
  4065.  
  4066. protected:
  4067.   isl_set_list *ptr = nullptr;
  4068.  
  4069.   inline explicit set_list(__isl_take isl_set_list *ptr);
  4070.  
  4071. public:
  4072.   inline /* implicit */ set_list();
  4073.   inline /* implicit */ set_list(const set_list &obj);
  4074.   inline explicit set_list(isl::ctx ctx, int n);
  4075.   inline explicit set_list(isl::set el);
  4076.   inline explicit set_list(isl::ctx ctx, const std::string &str);
  4077.   inline set_list &operator=(set_list obj);
  4078.   inline ~set_list();
  4079.   inline __isl_give isl_set_list *copy() const &;
  4080.   inline __isl_give isl_set_list *copy() && = delete;
  4081.   inline __isl_keep isl_set_list *get() const;
  4082.   inline __isl_give isl_set_list *release();
  4083.   inline bool is_null() const;
  4084.   inline isl::ctx ctx() const;
  4085.  
  4086.   inline isl::set_list add(isl::set el) const;
  4087.   inline isl::set at(int index) const;
  4088.   inline isl::set get_at(int index) const;
  4089.   inline isl::set_list clear() const;
  4090.   inline isl::set_list concat(isl::set_list list2) const;
  4091.   inline isl::set_list drop(unsigned int first, unsigned int n) const;
  4092.   inline stat foreach(const std::function<stat(isl::set)> &fn) const;
  4093.   inline isl::set_list insert(unsigned int pos, isl::set el) const;
  4094.   inline class size size() const;
  4095. };
  4096.  
  4097. // declarations for isl::space
  4098. inline space manage(__isl_take isl_space *ptr);
  4099. inline space manage_copy(__isl_keep isl_space *ptr);
  4100.  
  4101. class space {
  4102.   friend inline space manage(__isl_take isl_space *ptr);
  4103.   friend inline space manage_copy(__isl_keep isl_space *ptr);
  4104.  
  4105. protected:
  4106.   isl_space *ptr = nullptr;
  4107.  
  4108.   inline explicit space(__isl_take isl_space *ptr);
  4109.  
  4110. public:
  4111.   inline /* implicit */ space();
  4112.   inline /* implicit */ space(const space &obj);
  4113.   inline explicit space(isl::ctx ctx, unsigned int nparam, unsigned int n_in, unsigned int n_out);
  4114.   inline explicit space(isl::ctx ctx, unsigned int nparam, unsigned int dim);
  4115.   inline space &operator=(space obj);
  4116.   inline ~space();
  4117.   inline __isl_give isl_space *copy() const &;
  4118.   inline __isl_give isl_space *copy() && = delete;
  4119.   inline __isl_keep isl_space *get() const;
  4120.   inline __isl_give isl_space *release();
  4121.   inline bool is_null() const;
  4122.   inline isl::ctx ctx() const;
  4123.  
  4124.   inline isl::space add_dims(isl::dim type, unsigned int n) const;
  4125.   inline isl::space add_named_tuple(isl::id tuple_id, unsigned int dim) const;
  4126.   inline isl::space add_named_tuple(const std::string &tuple_id, unsigned int dim) const;
  4127.   inline isl::space add_param(isl::id id) const;
  4128.   inline isl::space add_param(const std::string &id) const;
  4129.   inline isl::space add_unnamed_tuple(unsigned int dim) const;
  4130.   inline isl::space align_params(isl::space space2) const;
  4131.   inline isl::space curry() const;
  4132.   inline class size dim(isl::dim type) const;
  4133.   inline isl::id dim_id(isl::dim type, unsigned int pos) const;
  4134.   inline isl::id get_dim_id(isl::dim type, unsigned int pos) const;
  4135.   inline isl::space domain() const;
  4136.   inline isl::multi_aff domain_map_multi_aff() const;
  4137.   inline isl::pw_multi_aff domain_map_pw_multi_aff() const;
  4138.   inline isl::id domain_tuple_id() const;
  4139.   inline isl::id get_domain_tuple_id() const;
  4140.   inline isl::space drop_dims(isl::dim type, unsigned int first, unsigned int num) const;
  4141.   inline int find_dim_by_id(isl::dim type, const isl::id &id) const;
  4142.   inline int find_dim_by_id(isl::dim type, const std::string &id) const;
  4143.   inline isl::space flatten_domain() const;
  4144.   inline isl::space flatten_range() const;
  4145.   inline boolean has_domain_tuple_id() const;
  4146.   inline boolean has_equal_tuples(const isl::space &space2) const;
  4147.   inline boolean has_range_tuple_id() const;
  4148.   inline boolean has_tuple_id(isl::dim type) const;
  4149.   inline boolean has_tuple_name(isl::dim type) const;
  4150.   inline isl::multi_aff identity_multi_aff_on_domain() const;
  4151.   inline isl::multi_pw_aff identity_multi_pw_aff_on_domain() const;
  4152.   inline isl::pw_multi_aff identity_pw_multi_aff_on_domain() const;
  4153.   inline boolean is_equal(const isl::space &space2) const;
  4154.   inline boolean is_params() const;
  4155.   inline boolean is_set() const;
  4156.   inline boolean is_wrapping() const;
  4157.   inline isl::space map_from_domain_and_range(isl::space range) const;
  4158.   inline isl::space map_from_set() const;
  4159.   inline isl::multi_aff multi_aff(isl::aff_list list) const;
  4160.   inline isl::multi_aff multi_aff_on_domain(isl::multi_val mv) const;
  4161.   inline isl::multi_id multi_id(isl::id_list list) const;
  4162.   inline isl::multi_pw_aff multi_pw_aff(isl::pw_aff_list list) const;
  4163.   inline isl::multi_union_pw_aff multi_union_pw_aff(isl::union_pw_aff_list list) const;
  4164.   inline isl::multi_val multi_val(isl::val_list list) const;
  4165.   inline isl::aff param_aff_on_domain(isl::id id) const;
  4166.   inline isl::aff param_aff_on_domain(const std::string &id) const;
  4167.   inline isl::space params() const;
  4168.   static inline isl::space params_alloc(isl::ctx ctx, unsigned int nparam);
  4169.   inline isl::space product(isl::space right) const;
  4170.   inline isl::space range() const;
  4171.   inline isl::multi_aff range_map_multi_aff() const;
  4172.   inline isl::pw_multi_aff range_map_pw_multi_aff() const;
  4173.   inline isl::space range_reverse() const;
  4174.   inline isl::id range_tuple_id() const;
  4175.   inline isl::id get_range_tuple_id() const;
  4176.   inline isl::space reverse() const;
  4177.   inline isl::space set_dim_id(isl::dim type, unsigned int pos, isl::id id) const;
  4178.   inline isl::space set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const;
  4179.   inline isl::space set_domain_tuple(isl::id id) const;
  4180.   inline isl::space set_domain_tuple(const std::string &id) const;
  4181.   inline isl::space set_from_params() const;
  4182.   inline isl::space set_range_tuple(isl::id id) const;
  4183.   inline isl::space set_range_tuple(const std::string &id) const;
  4184.   inline isl::space set_tuple_id(isl::dim type, isl::id id) const;
  4185.   inline isl::space set_tuple_id(isl::dim type, const std::string &id) const;
  4186.   inline isl::id tuple_id(isl::dim type) const;
  4187.   inline isl::id get_tuple_id(isl::dim type) const;
  4188.   inline std::string tuple_name(isl::dim type) const;
  4189.   inline std::string get_tuple_name(isl::dim type) const;
  4190.   inline isl::space uncurry() const;
  4191.   static inline isl::space unit(isl::ctx ctx);
  4192.   inline isl::map universe_map() const;
  4193.   inline isl::set universe_set() const;
  4194.   inline isl::space unwrap() const;
  4195.   inline isl::space wrap() const;
  4196.   inline isl::aff zero_aff_on_domain() const;
  4197.   inline isl::multi_aff zero_multi_aff() const;
  4198.   inline isl::multi_pw_aff zero_multi_pw_aff() const;
  4199.   inline isl::multi_union_pw_aff zero_multi_union_pw_aff() const;
  4200.   inline isl::multi_val zero_multi_val() const;
  4201. };
  4202.  
  4203. // declarations for isl::union_access_info
  4204. inline union_access_info manage(__isl_take isl_union_access_info *ptr);
  4205. inline union_access_info manage_copy(__isl_keep isl_union_access_info *ptr);
  4206.  
  4207. class union_access_info {
  4208.   friend inline union_access_info manage(__isl_take isl_union_access_info *ptr);
  4209.   friend inline union_access_info manage_copy(__isl_keep isl_union_access_info *ptr);
  4210.  
  4211. protected:
  4212.   isl_union_access_info *ptr = nullptr;
  4213.  
  4214.   inline explicit union_access_info(__isl_take isl_union_access_info *ptr);
  4215.  
  4216. public:
  4217.   inline /* implicit */ union_access_info();
  4218.   inline /* implicit */ union_access_info(const union_access_info &obj);
  4219.   inline explicit union_access_info(isl::union_map sink);
  4220.   inline union_access_info &operator=(union_access_info obj);
  4221.   inline ~union_access_info();
  4222.   inline __isl_give isl_union_access_info *copy() const &;
  4223.   inline __isl_give isl_union_access_info *copy() && = delete;
  4224.   inline __isl_keep isl_union_access_info *get() const;
  4225.   inline __isl_give isl_union_access_info *release();
  4226.   inline bool is_null() const;
  4227.   inline isl::ctx ctx() const;
  4228.  
  4229.   inline isl::union_flow compute_flow() const;
  4230.   inline isl::union_access_info set_kill(isl::union_map kill) const;
  4231.   inline isl::union_access_info set_may_source(isl::union_map may_source) const;
  4232.   inline isl::union_access_info set_must_source(isl::union_map must_source) const;
  4233.   inline isl::union_access_info set_schedule(isl::schedule schedule) const;
  4234.   inline isl::union_access_info set_schedule_map(isl::union_map schedule_map) const;
  4235. };
  4236.  
  4237. // declarations for isl::union_flow
  4238. inline union_flow manage(__isl_take isl_union_flow *ptr);
  4239. inline union_flow manage_copy(__isl_keep isl_union_flow *ptr);
  4240.  
  4241. class union_flow {
  4242.   friend inline union_flow manage(__isl_take isl_union_flow *ptr);
  4243.   friend inline union_flow manage_copy(__isl_keep isl_union_flow *ptr);
  4244.  
  4245. protected:
  4246.   isl_union_flow *ptr = nullptr;
  4247.  
  4248.   inline explicit union_flow(__isl_take isl_union_flow *ptr);
  4249.  
  4250. public:
  4251.   inline /* implicit */ union_flow();
  4252.   inline /* implicit */ union_flow(const union_flow &obj);
  4253.   inline union_flow &operator=(union_flow obj);
  4254.   inline ~union_flow();
  4255.   inline __isl_give isl_union_flow *copy() const &;
  4256.   inline __isl_give isl_union_flow *copy() && = delete;
  4257.   inline __isl_keep isl_union_flow *get() const;
  4258.   inline __isl_give isl_union_flow *release();
  4259.   inline bool is_null() const;
  4260.   inline isl::ctx ctx() const;
  4261.  
  4262.   inline isl::union_map full_may_dependence() const;
  4263.   inline isl::union_map get_full_may_dependence() const;
  4264.   inline isl::union_map full_must_dependence() const;
  4265.   inline isl::union_map get_full_must_dependence() const;
  4266.   inline isl::union_map may_dependence() const;
  4267.   inline isl::union_map get_may_dependence() const;
  4268.   inline isl::union_map may_no_source() const;
  4269.   inline isl::union_map get_may_no_source() const;
  4270.   inline isl::union_map must_dependence() const;
  4271.   inline isl::union_map get_must_dependence() const;
  4272.   inline isl::union_map must_no_source() const;
  4273.   inline isl::union_map get_must_no_source() const;
  4274. };
  4275.  
  4276. // declarations for isl::union_map
  4277. inline union_map manage(__isl_take isl_union_map *ptr);
  4278. inline union_map manage_copy(__isl_keep isl_union_map *ptr);
  4279.  
  4280. class union_map {
  4281.   friend inline union_map manage(__isl_take isl_union_map *ptr);
  4282.   friend inline union_map manage_copy(__isl_keep isl_union_map *ptr);
  4283.  
  4284. protected:
  4285.   isl_union_map *ptr = nullptr;
  4286.  
  4287.   inline explicit union_map(__isl_take isl_union_map *ptr);
  4288.  
  4289. public:
  4290.   inline /* implicit */ union_map();
  4291.   inline /* implicit */ union_map(const union_map &obj);
  4292.   inline /* implicit */ union_map(isl::basic_map bmap);
  4293.   inline /* implicit */ union_map(isl::map map);
  4294.   inline explicit union_map(isl::ctx ctx, const std::string &str);
  4295.   inline union_map &operator=(union_map obj);
  4296.   inline ~union_map();
  4297.   inline __isl_give isl_union_map *copy() const &;
  4298.   inline __isl_give isl_union_map *copy() && = delete;
  4299.   inline __isl_keep isl_union_map *get() const;
  4300.   inline __isl_give isl_union_map *release();
  4301.   inline bool is_null() const;
  4302.   inline isl::ctx ctx() const;
  4303.  
  4304.   inline isl::union_map affine_hull() const;
  4305.   inline isl::union_map apply_domain(isl::union_map umap2) const;
  4306.   inline isl::union_map apply_range(isl::union_map umap2) const;
  4307.   inline isl::map as_map() const;
  4308.   inline isl::multi_union_pw_aff as_multi_union_pw_aff() const;
  4309.   inline isl::union_pw_multi_aff as_union_pw_multi_aff() const;
  4310.   inline isl::union_set bind_range(isl::multi_id tuple) const;
  4311.   inline isl::union_map coalesce() const;
  4312.   inline isl::union_map compute_divs() const;
  4313.   inline isl::union_map curry() const;
  4314.   inline isl::union_set deltas() const;
  4315.   inline isl::union_map detect_equalities() const;
  4316.   inline isl::union_set domain() const;
  4317.   inline isl::union_map domain_factor_domain() const;
  4318.   inline isl::union_map domain_factor_range() const;
  4319.   inline isl::union_map domain_map() const;
  4320.   inline isl::union_pw_multi_aff domain_map_union_pw_multi_aff() const;
  4321.   inline isl::union_map domain_product(isl::union_map umap2) const;
  4322.   static inline isl::union_map empty(isl::ctx ctx);
  4323.   inline isl::union_map eq_at(isl::multi_union_pw_aff mupa) const;
  4324.   inline boolean every_map(const std::function<boolean(isl::map)> &test) const;
  4325.   inline isl::map extract_map(isl::space space) const;
  4326.   inline isl::union_map factor_domain() const;
  4327.   inline isl::union_map factor_range() const;
  4328.   inline isl::union_map fixed_power(isl::val exp) const;
  4329.   inline isl::union_map fixed_power(long exp) const;
  4330.   inline isl::union_map flat_range_product(isl::union_map umap2) const;
  4331.   inline stat foreach_map(const std::function<stat(isl::map)> &fn) const;
  4332.   static inline isl::union_map from(isl::multi_union_pw_aff mupa);
  4333.   static inline isl::union_map from(isl::union_pw_multi_aff upma);
  4334.   static inline isl::union_map from_domain(isl::union_set uset);
  4335.   static inline isl::union_map from_domain_and_range(isl::union_set domain, isl::union_set range);
  4336.   static inline isl::union_map from_range(isl::union_set uset);
  4337.   inline isl::union_map gist(isl::union_map context) const;
  4338.   inline isl::union_map gist_domain(isl::union_set uset) const;
  4339.   inline isl::union_map gist_params(isl::set set) const;
  4340.   inline isl::union_map gist_range(isl::union_set uset) const;
  4341.   inline isl::union_map intersect(isl::union_map umap2) const;
  4342.   inline isl::union_map intersect_domain(isl::space space) const;
  4343.   inline isl::union_map intersect_domain(isl::union_set uset) const;
  4344.   inline isl::union_map intersect_domain_factor_domain(isl::union_map factor) const;
  4345.   inline isl::union_map intersect_domain_factor_range(isl::union_map factor) const;
  4346.   inline isl::union_map intersect_params(isl::set set) const;
  4347.   inline isl::union_map intersect_range(isl::space space) const;
  4348.   inline isl::union_map intersect_range(isl::union_set uset) const;
  4349.   inline isl::union_map intersect_range_factor_domain(isl::union_map factor) const;
  4350.   inline isl::union_map intersect_range_factor_range(isl::union_map factor) const;
  4351.   inline boolean is_bijective() const;
  4352.   inline boolean is_disjoint(const isl::union_map &umap2) const;
  4353.   inline boolean is_empty() const;
  4354.   inline boolean is_equal(const isl::union_map &umap2) const;
  4355.   inline boolean is_injective() const;
  4356.   inline boolean is_single_valued() const;
  4357.   inline boolean is_strict_subset(const isl::union_map &umap2) const;
  4358.   inline boolean is_subset(const isl::union_map &umap2) const;
  4359.   inline boolean isa_map() const;
  4360.   inline isl::union_map lexmax() const;
  4361.   inline isl::union_map lexmin() const;
  4362.   inline isl::map_list map_list() const;
  4363.   inline isl::map_list get_map_list() const;
  4364.   inline isl::set params() const;
  4365.   inline isl::union_map polyhedral_hull() const;
  4366.   inline isl::union_map preimage_domain(isl::multi_aff ma) const;
  4367.   inline isl::union_map preimage_domain(isl::multi_pw_aff mpa) const;
  4368.   inline isl::union_map preimage_domain(isl::pw_multi_aff pma) const;
  4369.   inline isl::union_map preimage_domain(isl::union_pw_multi_aff upma) const;
  4370.   inline isl::union_map preimage_range(isl::multi_aff ma) const;
  4371.   inline isl::union_map preimage_range(isl::pw_multi_aff pma) const;
  4372.   inline isl::union_map preimage_range(isl::union_pw_multi_aff upma) const;
  4373.   inline isl::union_map product(isl::union_map umap2) const;
  4374.   inline isl::union_map project_out_all_params() const;
  4375.   inline isl::union_set range() const;
  4376.   inline isl::union_map range_factor_domain() const;
  4377.   inline isl::union_map range_factor_range() const;
  4378.   inline isl::union_map range_map() const;
  4379.   inline isl::union_map range_product(isl::union_map umap2) const;
  4380.   inline isl::union_map range_reverse() const;
  4381.   inline isl::union_map reverse() const;
  4382.   inline isl::space space() const;
  4383.   inline isl::space get_space() const;
  4384.   inline isl::union_map subtract(isl::union_map umap2) const;
  4385.   inline isl::union_map subtract_domain(isl::union_set dom) const;
  4386.   inline isl::union_map subtract_range(isl::union_set dom) const;
  4387.   inline isl::union_map uncurry() const;
  4388.   inline isl::union_map unite(isl::union_map umap2) const;
  4389.   inline isl::union_map universe() const;
  4390.   inline isl::union_set wrap() const;
  4391.   inline isl::union_map zip() const;
  4392. };
  4393.  
  4394. // declarations for isl::union_pw_aff
  4395. inline union_pw_aff manage(__isl_take isl_union_pw_aff *ptr);
  4396. inline union_pw_aff manage_copy(__isl_keep isl_union_pw_aff *ptr);
  4397.  
  4398. class union_pw_aff {
  4399.   friend inline union_pw_aff manage(__isl_take isl_union_pw_aff *ptr);
  4400.   friend inline union_pw_aff manage_copy(__isl_keep isl_union_pw_aff *ptr);
  4401.  
  4402. protected:
  4403.   isl_union_pw_aff *ptr = nullptr;
  4404.  
  4405.   inline explicit union_pw_aff(__isl_take isl_union_pw_aff *ptr);
  4406.  
  4407. public:
  4408.   inline /* implicit */ union_pw_aff();
  4409.   inline /* implicit */ union_pw_aff(const union_pw_aff &obj);
  4410.   inline /* implicit */ union_pw_aff(isl::aff aff);
  4411.   inline /* implicit */ union_pw_aff(isl::pw_aff pa);
  4412.   inline explicit union_pw_aff(isl::ctx ctx, const std::string &str);
  4413.   inline explicit union_pw_aff(isl::union_set domain, isl::val v);
  4414.   inline union_pw_aff &operator=(union_pw_aff obj);
  4415.   inline ~union_pw_aff();
  4416.   inline __isl_give isl_union_pw_aff *copy() const &;
  4417.   inline __isl_give isl_union_pw_aff *copy() && = delete;
  4418.   inline __isl_keep isl_union_pw_aff *get() const;
  4419.   inline __isl_give isl_union_pw_aff *release();
  4420.   inline bool is_null() const;
  4421.   inline isl::ctx ctx() const;
  4422.  
  4423.   inline isl::multi_union_pw_aff add(const isl::multi_union_pw_aff &multi2) const;
  4424.   inline isl::union_pw_aff add(isl::union_pw_aff upa2) const;
  4425.   inline isl::union_pw_multi_aff add(const isl::union_pw_multi_aff &upma2) const;
  4426.   inline isl::union_pw_aff add(const isl::aff &upa2) const;
  4427.   inline isl::union_pw_aff add(const isl::pw_aff &upa2) const;
  4428.   inline isl::union_pw_multi_aff add_pw_multi_aff(const isl::pw_multi_aff &pma) const;
  4429.   inline isl::union_pw_multi_aff apply(const isl::union_pw_multi_aff &upma2) const;
  4430.   inline isl::multi_union_pw_aff as_multi_union_pw_aff() const;
  4431.   inline isl::pw_multi_aff as_pw_multi_aff() const;
  4432.   inline isl::union_map as_union_map() const;
  4433.   inline isl::union_pw_aff at(int pos) const;
  4434.   inline isl::union_set bind(const isl::multi_id &tuple) const;
  4435.   inline isl::union_set bind(isl::id id) const;
  4436.   inline isl::union_set bind(const std::string &id) const;
  4437.   inline isl::union_pw_aff coalesce() const;
  4438.   inline class size dim(isl::dim type) const;
  4439.   inline isl::union_set domain() const;
  4440.   static inline isl::union_pw_aff empty(isl::space space);
  4441.   inline isl::pw_multi_aff extract_pw_multi_aff(const isl::space &space) const;
  4442.   inline isl::multi_union_pw_aff flat_range_product(const isl::multi_union_pw_aff &multi2) const;
  4443.   inline isl::union_pw_multi_aff flat_range_product(const isl::union_pw_multi_aff &upma2) const;
  4444.   inline stat foreach_pw_aff(const std::function<stat(isl::pw_aff)> &fn) const;
  4445.   inline isl::union_pw_aff gist(isl::union_set context) const;
  4446.   inline boolean has_range_tuple_id() const;
  4447.   inline isl::union_pw_aff intersect_domain(isl::space space) const;
  4448.   inline isl::union_pw_aff intersect_domain(isl::union_set uset) const;
  4449.   inline isl::union_pw_aff intersect_domain_wrapped_domain(isl::union_set uset) const;
  4450.   inline isl::union_pw_aff intersect_domain_wrapped_range(isl::union_set uset) const;
  4451.   inline isl::union_pw_aff intersect_params(isl::set set) const;
  4452.   inline boolean involves_locals() const;
  4453.   inline boolean involves_nan() const;
  4454.   inline boolean isa_pw_multi_aff() const;
  4455.   inline isl::union_pw_aff_list list() const;
  4456.   inline isl::multi_union_pw_aff neg() const;
  4457.   inline boolean plain_is_empty() const;
  4458.   inline boolean plain_is_equal(const isl::multi_union_pw_aff &multi2) const;
  4459.   inline isl::union_pw_multi_aff preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const;
  4460.   inline isl::union_pw_aff pullback(isl::union_pw_multi_aff upma) const;
  4461.   inline isl::pw_multi_aff_list pw_multi_aff_list() const;
  4462.   inline isl::union_pw_multi_aff range_factor_domain() const;
  4463.   inline isl::union_pw_multi_aff range_factor_range() const;
  4464.   inline isl::multi_union_pw_aff range_product(const isl::multi_union_pw_aff &multi2) const;
  4465.   inline isl::union_pw_multi_aff range_product(const isl::union_pw_multi_aff &upma2) const;
  4466.   inline isl::id range_tuple_id() const;
  4467.   inline isl::multi_union_pw_aff reset_range_tuple_id() const;
  4468.   inline isl::multi_union_pw_aff reset_tuple_id(isl::dim type) const;
  4469.   inline isl::multi_union_pw_aff scale(const isl::multi_val &mv) const;
  4470.   inline isl::multi_union_pw_aff scale(const isl::val &v) const;
  4471.   inline isl::multi_union_pw_aff scale(long v) const;
  4472.   inline isl::multi_union_pw_aff scale_down(const isl::multi_val &mv) const;
  4473.   inline isl::multi_union_pw_aff scale_down(const isl::val &v) const;
  4474.   inline isl::multi_union_pw_aff scale_down(long v) const;
  4475.   inline isl::multi_union_pw_aff set_at(int pos, const isl::union_pw_aff &el) const;
  4476.   inline isl::multi_union_pw_aff set_range_tuple(const isl::id &id) const;
  4477.   inline isl::multi_union_pw_aff set_range_tuple(const std::string &id) const;
  4478.   inline isl::multi_union_pw_aff set_union_pw_aff(int pos, const isl::union_pw_aff &el) const;
  4479.   inline class size size() const;
  4480.   inline isl::space space() const;
  4481.   inline isl::space get_space() const;
  4482.   inline isl::multi_union_pw_aff sub(const isl::multi_union_pw_aff &multi2) const;
  4483.   inline isl::union_pw_aff sub(isl::union_pw_aff upa2) const;
  4484.   inline isl::union_pw_multi_aff sub(const isl::union_pw_multi_aff &upma2) const;
  4485.   inline isl::union_pw_aff sub(const isl::aff &upa2) const;
  4486.   inline isl::union_pw_aff sub(const isl::pw_aff &upa2) const;
  4487.   inline isl::union_pw_aff subtract_domain(isl::space space) const;
  4488.   inline isl::union_pw_aff subtract_domain(isl::union_set uset) const;
  4489.   inline isl::union_pw_aff_list to_list() const;
  4490.   inline isl::multi_union_pw_aff union_add(const isl::multi_union_pw_aff &mupa2) const;
  4491.   inline isl::union_pw_aff union_add(isl::union_pw_aff upa2) const;
  4492.   inline isl::union_pw_multi_aff union_add(const isl::union_pw_multi_aff &upma2) const;
  4493.   inline isl::union_pw_aff union_add(const isl::aff &upa2) const;
  4494.   inline isl::union_pw_aff union_add(const isl::pw_aff &upa2) const;
  4495. };
  4496.  
  4497. // declarations for isl::union_pw_aff_list
  4498. inline union_pw_aff_list manage(__isl_take isl_union_pw_aff_list *ptr);
  4499. inline union_pw_aff_list manage_copy(__isl_keep isl_union_pw_aff_list *ptr);
  4500.  
  4501. class union_pw_aff_list {
  4502.   friend inline union_pw_aff_list manage(__isl_take isl_union_pw_aff_list *ptr);
  4503.   friend inline union_pw_aff_list manage_copy(__isl_keep isl_union_pw_aff_list *ptr);
  4504.  
  4505. protected:
  4506.   isl_union_pw_aff_list *ptr = nullptr;
  4507.  
  4508.   inline explicit union_pw_aff_list(__isl_take isl_union_pw_aff_list *ptr);
  4509.  
  4510. public:
  4511.   inline /* implicit */ union_pw_aff_list();
  4512.   inline /* implicit */ union_pw_aff_list(const union_pw_aff_list &obj);
  4513.   inline explicit union_pw_aff_list(isl::ctx ctx, int n);
  4514.   inline explicit union_pw_aff_list(isl::union_pw_aff el);
  4515.   inline explicit union_pw_aff_list(isl::ctx ctx, const std::string &str);
  4516.   inline union_pw_aff_list &operator=(union_pw_aff_list obj);
  4517.   inline ~union_pw_aff_list();
  4518.   inline __isl_give isl_union_pw_aff_list *copy() const &;
  4519.   inline __isl_give isl_union_pw_aff_list *copy() && = delete;
  4520.   inline __isl_keep isl_union_pw_aff_list *get() const;
  4521.   inline __isl_give isl_union_pw_aff_list *release();
  4522.   inline bool is_null() const;
  4523.   inline isl::ctx ctx() const;
  4524.  
  4525.   inline isl::union_pw_aff_list add(isl::union_pw_aff el) const;
  4526.   inline isl::union_pw_aff at(int index) const;
  4527.   inline isl::union_pw_aff get_at(int index) const;
  4528.   inline isl::union_pw_aff_list clear() const;
  4529.   inline isl::union_pw_aff_list concat(isl::union_pw_aff_list list2) const;
  4530.   inline isl::union_pw_aff_list drop(unsigned int first, unsigned int n) const;
  4531.   inline stat foreach(const std::function<stat(isl::union_pw_aff)> &fn) const;
  4532.   inline isl::union_pw_aff_list insert(unsigned int pos, isl::union_pw_aff el) const;
  4533.   inline class size size() const;
  4534. };
  4535.  
  4536. // declarations for isl::union_pw_multi_aff
  4537. inline union_pw_multi_aff manage(__isl_take isl_union_pw_multi_aff *ptr);
  4538. inline union_pw_multi_aff manage_copy(__isl_keep isl_union_pw_multi_aff *ptr);
  4539.  
  4540. class union_pw_multi_aff {
  4541.   friend inline union_pw_multi_aff manage(__isl_take isl_union_pw_multi_aff *ptr);
  4542.   friend inline union_pw_multi_aff manage_copy(__isl_keep isl_union_pw_multi_aff *ptr);
  4543.  
  4544. protected:
  4545.   isl_union_pw_multi_aff *ptr = nullptr;
  4546.  
  4547.   inline explicit union_pw_multi_aff(__isl_take isl_union_pw_multi_aff *ptr);
  4548.  
  4549. public:
  4550.   inline /* implicit */ union_pw_multi_aff();
  4551.   inline /* implicit */ union_pw_multi_aff(const union_pw_multi_aff &obj);
  4552.   inline explicit union_pw_multi_aff(isl::union_set uset);
  4553.   inline /* implicit */ union_pw_multi_aff(isl::multi_aff ma);
  4554.   inline /* implicit */ union_pw_multi_aff(isl::pw_multi_aff pma);
  4555.   inline explicit union_pw_multi_aff(isl::union_map umap);
  4556.   inline /* implicit */ union_pw_multi_aff(isl::union_pw_aff upa);
  4557.   inline explicit union_pw_multi_aff(isl::ctx ctx, const std::string &str);
  4558.   inline union_pw_multi_aff &operator=(union_pw_multi_aff obj);
  4559.   inline ~union_pw_multi_aff();
  4560.   inline __isl_give isl_union_pw_multi_aff *copy() const &;
  4561.   inline __isl_give isl_union_pw_multi_aff *copy() && = delete;
  4562.   inline __isl_keep isl_union_pw_multi_aff *get() const;
  4563.   inline __isl_give isl_union_pw_multi_aff *release();
  4564.   inline bool is_null() const;
  4565.   inline isl::ctx ctx() const;
  4566.  
  4567.   inline isl::union_pw_multi_aff add(isl::union_pw_multi_aff upma2) const;
  4568.   inline isl::union_pw_multi_aff add_pw_multi_aff(isl::pw_multi_aff pma) const;
  4569.   inline isl::union_pw_multi_aff apply(isl::union_pw_multi_aff upma2) const;
  4570.   inline isl::multi_union_pw_aff as_multi_union_pw_aff() const;
  4571.   inline isl::pw_multi_aff as_pw_multi_aff() const;
  4572.   inline isl::union_map as_union_map() const;
  4573.   inline isl::union_pw_multi_aff coalesce() const;
  4574.   inline isl::union_set domain() const;
  4575.   static inline isl::union_pw_multi_aff empty(isl::space space);
  4576.   static inline isl::union_pw_multi_aff empty(isl::ctx ctx);
  4577.   inline isl::pw_multi_aff extract_pw_multi_aff(isl::space space) const;
  4578.   inline isl::union_pw_multi_aff flat_range_product(isl::union_pw_multi_aff upma2) const;
  4579.   inline isl::union_pw_multi_aff gist(isl::union_set context) const;
  4580.   inline isl::union_pw_multi_aff intersect_domain(isl::space space) const;
  4581.   inline isl::union_pw_multi_aff intersect_domain(isl::union_set uset) const;
  4582.   inline isl::union_pw_multi_aff intersect_domain_wrapped_domain(isl::union_set uset) const;
  4583.   inline isl::union_pw_multi_aff intersect_domain_wrapped_range(isl::union_set uset) const;
  4584.   inline isl::union_pw_multi_aff intersect_params(isl::set set) const;
  4585.   inline boolean involves_locals() const;
  4586.   inline boolean isa_pw_multi_aff() const;
  4587.   inline boolean plain_is_empty() const;
  4588.   inline isl::union_pw_multi_aff preimage_domain_wrapped_domain(isl::union_pw_multi_aff upma2) const;
  4589.   inline isl::union_pw_multi_aff pullback(isl::union_pw_multi_aff upma2) const;
  4590.   inline isl::pw_multi_aff_list pw_multi_aff_list() const;
  4591.   inline isl::pw_multi_aff_list get_pw_multi_aff_list() const;
  4592.   inline isl::union_pw_multi_aff range_factor_domain() const;
  4593.   inline isl::union_pw_multi_aff range_factor_range() const;
  4594.   inline isl::union_pw_multi_aff range_product(isl::union_pw_multi_aff upma2) const;
  4595.   inline isl::space space() const;
  4596.   inline isl::space get_space() const;
  4597.   inline isl::union_pw_multi_aff sub(isl::union_pw_multi_aff upma2) const;
  4598.   inline isl::union_pw_multi_aff subtract_domain(isl::space space) const;
  4599.   inline isl::union_pw_multi_aff subtract_domain(isl::union_set uset) const;
  4600.   inline isl::union_pw_multi_aff union_add(isl::union_pw_multi_aff upma2) const;
  4601. };
  4602.  
  4603. // declarations for isl::union_set
  4604. inline union_set manage(__isl_take isl_union_set *ptr);
  4605. inline union_set manage_copy(__isl_keep isl_union_set *ptr);
  4606.  
  4607. class union_set {
  4608.   friend inline union_set manage(__isl_take isl_union_set *ptr);
  4609.   friend inline union_set manage_copy(__isl_keep isl_union_set *ptr);
  4610.  
  4611. protected:
  4612.   isl_union_set *ptr = nullptr;
  4613.  
  4614.   inline explicit union_set(__isl_take isl_union_set *ptr);
  4615.  
  4616. public:
  4617.   inline /* implicit */ union_set();
  4618.   inline /* implicit */ union_set(const union_set &obj);
  4619.   inline /* implicit */ union_set(isl::basic_set bset);
  4620.   inline /* implicit */ union_set(isl::point pnt);
  4621.   inline /* implicit */ union_set(isl::set set);
  4622.   inline explicit union_set(isl::ctx ctx, const std::string &str);
  4623.   inline union_set &operator=(union_set obj);
  4624.   inline ~union_set();
  4625.   inline __isl_give isl_union_set *copy() const &;
  4626.   inline __isl_give isl_union_set *copy() && = delete;
  4627.   inline __isl_keep isl_union_set *get() const;
  4628.   inline __isl_give isl_union_set *release();
  4629.   inline bool is_null() const;
  4630.   inline isl::ctx ctx() const;
  4631.  
  4632.   inline isl::union_set affine_hull() const;
  4633.   inline isl::union_set apply(isl::union_map umap) const;
  4634.   inline isl::set as_set() const;
  4635.   inline isl::union_set coalesce() const;
  4636.   inline isl::union_set compute_divs() const;
  4637.   inline boolean contains(const isl::space &space) const;
  4638.   inline isl::union_set detect_equalities() const;
  4639.   static inline isl::union_set empty(isl::ctx ctx);
  4640.   inline boolean every_set(const std::function<boolean(isl::set)> &test) const;
  4641.   inline isl::set extract_set(isl::space space) const;
  4642.   inline stat foreach_point(const std::function<stat(isl::point)> &fn) const;
  4643.   inline stat foreach_set(const std::function<stat(isl::set)> &fn) const;
  4644.   inline isl::union_set gist(isl::union_set context) const;
  4645.   inline isl::union_set gist_params(isl::set set) const;
  4646.   inline isl::union_map identity() const;
  4647.   inline isl::union_pw_multi_aff identity_union_pw_multi_aff() const;
  4648.   inline isl::union_set intersect(isl::union_set uset2) const;
  4649.   inline isl::union_set intersect_params(isl::set set) const;
  4650.   inline boolean is_disjoint(const isl::union_set &uset2) const;
  4651.   inline boolean is_empty() const;
  4652.   inline boolean is_equal(const isl::union_set &uset2) const;
  4653.   inline boolean is_strict_subset(const isl::union_set &uset2) const;
  4654.   inline boolean is_subset(const isl::union_set &uset2) const;
  4655.   inline boolean isa_set() const;
  4656.   inline isl::union_set lexmax() const;
  4657.   inline isl::union_set lexmin() const;
  4658.   inline isl::set params() const;
  4659.   inline isl::union_set polyhedral_hull() const;
  4660.   inline isl::union_set preimage(isl::multi_aff ma) const;
  4661.   inline isl::union_set preimage(isl::pw_multi_aff pma) const;
  4662.   inline isl::union_set preimage(isl::union_pw_multi_aff upma) const;
  4663.   inline isl::point sample_point() const;
  4664.   inline isl::set_list set_list() const;
  4665.   inline isl::set_list get_set_list() const;
  4666.   inline isl::space space() const;
  4667.   inline isl::space get_space() const;
  4668.   inline isl::union_set subtract(isl::union_set uset2) const;
  4669.   inline isl::union_set_list to_list() const;
  4670.   inline isl::union_set unite(isl::union_set uset2) const;
  4671.   inline isl::union_set universe() const;
  4672.   inline isl::union_map unwrap() const;
  4673. };
  4674.  
  4675. // declarations for isl::union_set_list
  4676. inline union_set_list manage(__isl_take isl_union_set_list *ptr);
  4677. inline union_set_list manage_copy(__isl_keep isl_union_set_list *ptr);
  4678.  
  4679. class union_set_list {
  4680.   friend inline union_set_list manage(__isl_take isl_union_set_list *ptr);
  4681.   friend inline union_set_list manage_copy(__isl_keep isl_union_set_list *ptr);
  4682.  
  4683. protected:
  4684.   isl_union_set_list *ptr = nullptr;
  4685.  
  4686.   inline explicit union_set_list(__isl_take isl_union_set_list *ptr);
  4687.  
  4688. public:
  4689.   inline /* implicit */ union_set_list();
  4690.   inline /* implicit */ union_set_list(const union_set_list &obj);
  4691.   inline explicit union_set_list(isl::ctx ctx, int n);
  4692.   inline explicit union_set_list(isl::union_set el);
  4693.   inline explicit union_set_list(isl::ctx ctx, const std::string &str);
  4694.   inline union_set_list &operator=(union_set_list obj);
  4695.   inline ~union_set_list();
  4696.   inline __isl_give isl_union_set_list *copy() const &;
  4697.   inline __isl_give isl_union_set_list *copy() && = delete;
  4698.   inline __isl_keep isl_union_set_list *get() const;
  4699.   inline __isl_give isl_union_set_list *release();
  4700.   inline bool is_null() const;
  4701.   inline isl::ctx ctx() const;
  4702.  
  4703.   inline isl::union_set_list add(isl::union_set el) const;
  4704.   inline isl::union_set at(int index) const;
  4705.   inline isl::union_set get_at(int index) const;
  4706.   inline isl::union_set_list clear() const;
  4707.   inline isl::union_set_list concat(isl::union_set_list list2) const;
  4708.   inline isl::union_set_list drop(unsigned int first, unsigned int n) const;
  4709.   inline stat foreach(const std::function<stat(isl::union_set)> &fn) const;
  4710.   inline isl::union_set_list insert(unsigned int pos, isl::union_set el) const;
  4711.   inline class size size() const;
  4712. };
  4713.  
  4714. // declarations for isl::val
  4715. inline val manage(__isl_take isl_val *ptr);
  4716. inline val manage_copy(__isl_keep isl_val *ptr);
  4717.  
  4718. class val {
  4719.   friend inline val manage(__isl_take isl_val *ptr);
  4720.   friend inline val manage_copy(__isl_keep isl_val *ptr);
  4721.  
  4722. protected:
  4723.   isl_val *ptr = nullptr;
  4724.  
  4725.   inline explicit val(__isl_take isl_val *ptr);
  4726.  
  4727. public:
  4728.   inline /* implicit */ val();
  4729.   inline /* implicit */ val(const val &obj);
  4730.   inline explicit val(isl::ctx ctx, long i);
  4731.   inline explicit val(isl::ctx ctx, const std::string &str);
  4732.   inline val &operator=(val obj);
  4733.   inline ~val();
  4734.   inline __isl_give isl_val *copy() const &;
  4735.   inline __isl_give isl_val *copy() && = delete;
  4736.   inline __isl_keep isl_val *get() const;
  4737.   inline __isl_give isl_val *release();
  4738.   inline bool is_null() const;
  4739.   inline isl::ctx ctx() const;
  4740.  
  4741.   inline isl::val abs() const;
  4742.   inline boolean abs_eq(const isl::val &v2) const;
  4743.   inline boolean abs_eq(long v2) const;
  4744.   inline isl::val add(isl::val v2) const;
  4745.   inline isl::val add(long v2) const;
  4746.   inline isl::val ceil() const;
  4747.   inline int cmp_si(long i) const;
  4748.   inline long den_si() const;
  4749.   inline long get_den_si() const;
  4750.   inline isl::val div(isl::val v2) const;
  4751.   inline isl::val div(long v2) const;
  4752.   inline boolean eq(const isl::val &v2) const;
  4753.   inline boolean eq(long v2) const;
  4754.   inline isl::val floor() const;
  4755.   inline isl::val gcd(isl::val v2) const;
  4756.   inline isl::val gcd(long v2) const;
  4757.   inline boolean ge(const isl::val &v2) const;
  4758.   inline boolean ge(long v2) const;
  4759.   inline boolean gt(const isl::val &v2) const;
  4760.   inline boolean gt(long v2) const;
  4761.   static inline isl::val infty(isl::ctx ctx);
  4762.   static inline isl::val int_from_ui(isl::ctx ctx, unsigned long u);
  4763.   inline isl::val inv() const;
  4764.   inline boolean is_divisible_by(const isl::val &v2) const;
  4765.   inline boolean is_divisible_by(long v2) const;
  4766.   inline boolean is_infty() const;
  4767.   inline boolean is_int() const;
  4768.   inline boolean is_nan() const;
  4769.   inline boolean is_neg() const;
  4770.   inline boolean is_neginfty() const;
  4771.   inline boolean is_negone() const;
  4772.   inline boolean is_nonneg() const;
  4773.   inline boolean is_nonpos() const;
  4774.   inline boolean is_one() const;
  4775.   inline boolean is_pos() const;
  4776.   inline boolean is_rat() const;
  4777.   inline boolean is_zero() const;
  4778.   inline boolean le(const isl::val &v2) const;
  4779.   inline boolean le(long v2) const;
  4780.   inline boolean lt(const isl::val &v2) const;
  4781.   inline boolean lt(long v2) const;
  4782.   inline isl::val max(isl::val v2) const;
  4783.   inline isl::val max(long v2) const;
  4784.   inline isl::val min(isl::val v2) const;
  4785.   inline isl::val min(long v2) const;
  4786.   inline isl::val mod(isl::val v2) const;
  4787.   inline isl::val mod(long v2) const;
  4788.   inline isl::val mul(isl::val v2) const;
  4789.   inline isl::val mul(long v2) const;
  4790.   static inline isl::val nan(isl::ctx ctx);
  4791.   inline boolean ne(const isl::val &v2) const;
  4792.   inline boolean ne(long v2) const;
  4793.   inline isl::val neg() const;
  4794.   static inline isl::val neginfty(isl::ctx ctx);
  4795.   static inline isl::val negone(isl::ctx ctx);
  4796.   inline long num_si() const;
  4797.   inline long get_num_si() const;
  4798.   static inline isl::val one(isl::ctx ctx);
  4799.   inline isl::val pow2() const;
  4800.   inline int sgn() const;
  4801.   inline isl::val sub(isl::val v2) const;
  4802.   inline isl::val sub(long v2) const;
  4803.   inline isl::val_list to_list() const;
  4804.   inline isl::val trunc() const;
  4805.   static inline isl::val zero(isl::ctx ctx);
  4806. };
  4807.  
  4808. // declarations for isl::val_list
  4809. inline val_list manage(__isl_take isl_val_list *ptr);
  4810. inline val_list manage_copy(__isl_keep isl_val_list *ptr);
  4811.  
  4812. class val_list {
  4813.   friend inline val_list manage(__isl_take isl_val_list *ptr);
  4814.   friend inline val_list manage_copy(__isl_keep isl_val_list *ptr);
  4815.  
  4816. protected:
  4817.   isl_val_list *ptr = nullptr;
  4818.  
  4819.   inline explicit val_list(__isl_take isl_val_list *ptr);
  4820.  
  4821. public:
  4822.   inline /* implicit */ val_list();
  4823.   inline /* implicit */ val_list(const val_list &obj);
  4824.   inline explicit val_list(isl::ctx ctx, int n);
  4825.   inline explicit val_list(isl::val el);
  4826.   inline explicit val_list(isl::ctx ctx, const std::string &str);
  4827.   inline val_list &operator=(val_list obj);
  4828.   inline ~val_list();
  4829.   inline __isl_give isl_val_list *copy() const &;
  4830.   inline __isl_give isl_val_list *copy() && = delete;
  4831.   inline __isl_keep isl_val_list *get() const;
  4832.   inline __isl_give isl_val_list *release();
  4833.   inline bool is_null() const;
  4834.   inline isl::ctx ctx() const;
  4835.  
  4836.   inline isl::val_list add(isl::val el) const;
  4837.   inline isl::val_list add(long el) const;
  4838.   inline isl::val at(int index) const;
  4839.   inline isl::val get_at(int index) const;
  4840.   inline isl::val_list clear() const;
  4841.   inline isl::val_list concat(isl::val_list list2) const;
  4842.   inline isl::val_list drop(unsigned int first, unsigned int n) const;
  4843.   inline stat foreach(const std::function<stat(isl::val)> &fn) const;
  4844.   inline isl::val_list insert(unsigned int pos, isl::val el) const;
  4845.   inline isl::val_list insert(unsigned int pos, long el) const;
  4846.   inline class size size() const;
  4847. };
  4848.  
  4849. // implementations for isl::aff
  4850. aff manage(__isl_take isl_aff *ptr) {
  4851.   return aff(ptr);
  4852. }
  4853. aff manage_copy(__isl_keep isl_aff *ptr) {
  4854.   ptr = isl_aff_copy(ptr);
  4855.   return aff(ptr);
  4856. }
  4857.  
  4858. aff::aff()
  4859.     : ptr(nullptr) {}
  4860.  
  4861. aff::aff(const aff &obj)
  4862.     : ptr(nullptr)
  4863. {
  4864.   ptr = obj.copy();
  4865. }
  4866.  
  4867. aff::aff(__isl_take isl_aff *ptr)
  4868.     : ptr(ptr) {}
  4869.  
  4870. aff::aff(isl::ctx ctx, const std::string &str)
  4871. {
  4872.   auto res = isl_aff_read_from_str(ctx.release(), str.c_str());
  4873.   ptr = res;
  4874. }
  4875.  
  4876. aff::aff(isl::local_space ls, isl::val val)
  4877. {
  4878.   auto res = isl_aff_val_on_domain(ls.release(), val.release());
  4879.   ptr = res;
  4880. }
  4881.  
  4882. aff::aff(isl::local_space ls)
  4883. {
  4884.   auto res = isl_aff_zero_on_domain(ls.release());
  4885.   ptr = res;
  4886. }
  4887.  
  4888. aff &aff::operator=(aff obj) {
  4889.   std::swap(this->ptr, obj.ptr);
  4890.   return *this;
  4891. }
  4892.  
  4893. aff::~aff() {
  4894.   if (ptr)
  4895.     isl_aff_free(ptr);
  4896. }
  4897.  
  4898. __isl_give isl_aff *aff::copy() const & {
  4899.   return isl_aff_copy(ptr);
  4900. }
  4901.  
  4902. __isl_keep isl_aff *aff::get() const {
  4903.   return ptr;
  4904. }
  4905.  
  4906. __isl_give isl_aff *aff::release() {
  4907.   isl_aff *tmp = ptr;
  4908.   ptr = nullptr;
  4909.   return tmp;
  4910. }
  4911.  
  4912. bool aff::is_null() const {
  4913.   return ptr == nullptr;
  4914. }
  4915.  
  4916. isl::ctx aff::ctx() const {
  4917.   return isl::ctx(isl_aff_get_ctx(ptr));
  4918. }
  4919.  
  4920. isl::aff aff::add(isl::aff aff2) const
  4921. {
  4922.   auto res = isl_aff_add(copy(), aff2.release());
  4923.   return manage(res);
  4924. }
  4925.  
  4926. isl::multi_aff aff::add(const isl::multi_aff &multi2) const
  4927. {
  4928.   return isl::multi_aff(*this).add(multi2);
  4929. }
  4930.  
  4931. isl::multi_pw_aff aff::add(const isl::multi_pw_aff &multi2) const
  4932. {
  4933.   return isl::pw_aff(*this).add(multi2);
  4934. }
  4935.  
  4936. isl::multi_union_pw_aff aff::add(const isl::multi_union_pw_aff &multi2) const
  4937. {
  4938.   return isl::pw_aff(*this).add(multi2);
  4939. }
  4940.  
  4941. isl::pw_aff aff::add(const isl::pw_aff &pwaff2) const
  4942. {
  4943.   return isl::pw_aff(*this).add(pwaff2);
  4944. }
  4945.  
  4946. isl::pw_multi_aff aff::add(const isl::pw_multi_aff &pma2) const
  4947. {
  4948.   return isl::pw_aff(*this).add(pma2);
  4949. }
  4950.  
  4951. isl::union_pw_aff aff::add(const isl::union_pw_aff &upa2) const
  4952. {
  4953.   return isl::pw_aff(*this).add(upa2);
  4954. }
  4955.  
  4956. isl::union_pw_multi_aff aff::add(const isl::union_pw_multi_aff &upma2) const
  4957. {
  4958.   return isl::pw_aff(*this).add(upma2);
  4959. }
  4960.  
  4961. isl::aff aff::add_constant(isl::val v) const
  4962. {
  4963.   auto res = isl_aff_add_constant_val(copy(), v.release());
  4964.   return manage(res);
  4965. }
  4966.  
  4967. isl::aff aff::add_constant(long v) const
  4968. {
  4969.   return this->add_constant(isl::val(ctx(), v));
  4970. }
  4971.  
  4972. isl::multi_aff aff::add_constant(const isl::multi_val &mv) const
  4973. {
  4974.   return isl::multi_aff(*this).add_constant(mv);
  4975. }
  4976.  
  4977. isl::aff aff::add_constant_si(int v) const
  4978. {
  4979.   auto res = isl_aff_add_constant_si(copy(), v);
  4980.   return manage(res);
  4981. }
  4982.  
  4983. isl::pw_aff aff::add_dims(isl::dim type, unsigned int n) const
  4984. {
  4985.   return isl::pw_aff(*this).add_dims(type, n);
  4986. }
  4987.  
  4988. isl::union_pw_multi_aff aff::add_pw_multi_aff(const isl::pw_multi_aff &pma) const
  4989. {
  4990.   return isl::pw_aff(*this).add_pw_multi_aff(pma);
  4991. }
  4992.  
  4993. isl::union_pw_multi_aff aff::apply(const isl::union_pw_multi_aff &upma2) const
  4994. {
  4995.   return isl::pw_aff(*this).apply(upma2);
  4996. }
  4997.  
  4998. isl::aff aff::as_aff() const
  4999. {
  5000.   return isl::pw_aff(*this).as_aff();
  5001. }
  5002.  
  5003. isl::map aff::as_map() const
  5004. {
  5005.   return isl::pw_aff(*this).as_map();
  5006. }
  5007.  
  5008. isl::multi_aff aff::as_multi_aff() const
  5009. {
  5010.   return isl::pw_aff(*this).as_multi_aff();
  5011. }
  5012.  
  5013. isl::multi_union_pw_aff aff::as_multi_union_pw_aff() const
  5014. {
  5015.   return isl::pw_aff(*this).as_multi_union_pw_aff();
  5016. }
  5017.  
  5018. isl::pw_multi_aff aff::as_pw_multi_aff() const
  5019. {
  5020.   return isl::pw_aff(*this).as_pw_multi_aff();
  5021. }
  5022.  
  5023. isl::set aff::as_set() const
  5024. {
  5025.   return isl::multi_aff(*this).as_set();
  5026. }
  5027.  
  5028. isl::union_map aff::as_union_map() const
  5029. {
  5030.   return isl::pw_aff(*this).as_union_map();
  5031. }
  5032.  
  5033. isl::aff aff::at(int pos) const
  5034. {
  5035.   return isl::multi_aff(*this).at(pos);
  5036. }
  5037.  
  5038. isl::basic_set aff::bind(isl::id id) const
  5039. {
  5040.   auto res = isl_aff_bind_id(copy(), id.release());
  5041.   return manage(res);
  5042. }
  5043.  
  5044. isl::basic_set aff::bind(const std::string &id) const
  5045. {
  5046.   return this->bind(isl::id(ctx(), id));
  5047. }
  5048.  
  5049. isl::basic_set aff::bind(const isl::multi_id &tuple) const
  5050. {
  5051.   return isl::multi_aff(*this).bind(tuple);
  5052. }
  5053.  
  5054. isl::pw_aff aff::bind_domain(const isl::multi_id &tuple) const
  5055. {
  5056.   return isl::pw_aff(*this).bind_domain(tuple);
  5057. }
  5058.  
  5059. isl::pw_aff aff::bind_domain_wrapped_domain(const isl::multi_id &tuple) const
  5060. {
  5061.   return isl::pw_aff(*this).bind_domain_wrapped_domain(tuple);
  5062. }
  5063.  
  5064. isl::aff aff::ceil() const
  5065. {
  5066.   auto res = isl_aff_ceil(copy());
  5067.   return manage(res);
  5068. }
  5069.  
  5070. isl::pw_aff aff::coalesce() const
  5071. {
  5072.   return isl::pw_aff(*this).coalesce();
  5073. }
  5074.  
  5075. isl::pw_aff aff::cond(const isl::pw_aff &pwaff_true, const isl::pw_aff &pwaff_false) const
  5076. {
  5077.   return isl::pw_aff(*this).cond(pwaff_true, pwaff_false);
  5078. }
  5079.  
  5080. isl::multi_val aff::constant_multi_val() const
  5081. {
  5082.   return isl::multi_aff(*this).constant_multi_val();
  5083. }
  5084.  
  5085. isl::val aff::constant_val() const
  5086. {
  5087.   auto res = isl_aff_get_constant_val(get());
  5088.   return manage(res);
  5089. }
  5090.  
  5091. isl::val aff::get_constant_val() const
  5092. {
  5093.   return constant_val();
  5094. }
  5095.  
  5096. isl::val aff::denominator_val() const
  5097. {
  5098.   auto res = isl_aff_get_denominator_val(get());
  5099.   return manage(res);
  5100. }
  5101.  
  5102. isl::val aff::get_denominator_val() const
  5103. {
  5104.   return denominator_val();
  5105. }
  5106.  
  5107. class size aff::dim(isl::dim type) const
  5108. {
  5109.   return isl::multi_aff(*this).dim(type);
  5110. }
  5111.  
  5112. isl::id aff::dim_id(isl::dim type, unsigned int pos) const
  5113. {
  5114.   return isl::pw_aff(*this).dim_id(type, pos);
  5115. }
  5116.  
  5117. isl::aff aff::div(isl::aff aff2) const
  5118. {
  5119.   auto res = isl_aff_div(copy(), aff2.release());
  5120.   return manage(res);
  5121. }
  5122.  
  5123. isl::pw_aff aff::div(const isl::pw_aff &pa2) const
  5124. {
  5125.   return isl::pw_aff(*this).div(pa2);
  5126. }
  5127.  
  5128. isl::set aff::domain() const
  5129. {
  5130.   return isl::pw_aff(*this).domain();
  5131. }
  5132.  
  5133. isl::space aff::domain_space() const
  5134. {
  5135.   return isl::pw_aff(*this).domain_space();
  5136. }
  5137.  
  5138. isl::pw_multi_aff aff::drop_dims(isl::dim type, unsigned int first, unsigned int n) const
  5139. {
  5140.   return isl::pw_aff(*this).drop_dims(type, first, n);
  5141. }
  5142.  
  5143. isl::set aff::eq_set(isl::aff aff2) const
  5144. {
  5145.   auto res = isl_aff_eq_set(copy(), aff2.release());
  5146.   return manage(res);
  5147. }
  5148.  
  5149. isl::set aff::eq_set(const isl::pw_aff &pwaff2) const
  5150. {
  5151.   return isl::pw_aff(*this).eq_set(pwaff2);
  5152. }
  5153.  
  5154. isl::val aff::eval(isl::point pnt) const
  5155. {
  5156.   auto res = isl_aff_eval(copy(), pnt.release());
  5157.   return manage(res);
  5158. }
  5159.  
  5160. isl::pw_multi_aff aff::extract_pw_multi_aff(const isl::space &space) const
  5161. {
  5162.   return isl::pw_aff(*this).extract_pw_multi_aff(space);
  5163. }
  5164.  
  5165. isl::multi_aff aff::flat_range_product(const isl::multi_aff &multi2) const
  5166. {
  5167.   return isl::multi_aff(*this).flat_range_product(multi2);
  5168. }
  5169.  
  5170. isl::multi_pw_aff aff::flat_range_product(const isl::multi_pw_aff &multi2) const
  5171. {
  5172.   return isl::pw_aff(*this).flat_range_product(multi2);
  5173. }
  5174.  
  5175. isl::multi_union_pw_aff aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const
  5176. {
  5177.   return isl::pw_aff(*this).flat_range_product(multi2);
  5178. }
  5179.  
  5180. isl::pw_multi_aff aff::flat_range_product(const isl::pw_multi_aff &pma2) const
  5181. {
  5182.   return isl::pw_aff(*this).flat_range_product(pma2);
  5183. }
  5184.  
  5185. isl::union_pw_multi_aff aff::flat_range_product(const isl::union_pw_multi_aff &upma2) const
  5186. {
  5187.   return isl::pw_aff(*this).flat_range_product(upma2);
  5188. }
  5189.  
  5190. isl::aff aff::floor() const
  5191. {
  5192.   auto res = isl_aff_floor(copy());
  5193.   return manage(res);
  5194. }
  5195.  
  5196. stat aff::foreach_piece(const std::function<stat(isl::set, isl::aff)> &fn) const
  5197. {
  5198.   return isl::pw_aff(*this).foreach_piece(fn);
  5199. }
  5200.  
  5201. stat aff::foreach_piece(const std::function<stat(isl::set, isl::multi_aff)> &fn) const
  5202. {
  5203.   return isl::pw_aff(*this).foreach_piece(fn);
  5204. }
  5205.  
  5206. stat aff::foreach_pw_aff(const std::function<stat(isl::pw_aff)> &fn) const
  5207. {
  5208.   return isl::pw_aff(*this).foreach_pw_aff(fn);
  5209. }
  5210.  
  5211. isl::set aff::ge_set(isl::aff aff2) const
  5212. {
  5213.   auto res = isl_aff_ge_set(copy(), aff2.release());
  5214.   return manage(res);
  5215. }
  5216.  
  5217. isl::set aff::ge_set(const isl::pw_aff &pwaff2) const
  5218. {
  5219.   return isl::pw_aff(*this).ge_set(pwaff2);
  5220. }
  5221.  
  5222. isl::aff aff::gist(isl::set context) const
  5223. {
  5224.   auto res = isl_aff_gist(copy(), context.release());
  5225.   return manage(res);
  5226. }
  5227.  
  5228. isl::union_pw_aff aff::gist(const isl::union_set &context) const
  5229. {
  5230.   return isl::pw_aff(*this).gist(context);
  5231. }
  5232.  
  5233. isl::aff aff::gist(const isl::basic_set &context) const
  5234. {
  5235.   return this->gist(isl::set(context));
  5236. }
  5237.  
  5238. isl::aff aff::gist(const isl::point &context) const
  5239. {
  5240.   return this->gist(isl::set(context));
  5241. }
  5242.  
  5243. isl::set aff::gt_set(isl::aff aff2) const
  5244. {
  5245.   auto res = isl_aff_gt_set(copy(), aff2.release());
  5246.   return manage(res);
  5247. }
  5248.  
  5249. isl::set aff::gt_set(const isl::pw_aff &pwaff2) const
  5250. {
  5251.   return isl::pw_aff(*this).gt_set(pwaff2);
  5252. }
  5253.  
  5254. boolean aff::has_range_tuple_id() const
  5255. {
  5256.   return isl::multi_aff(*this).has_range_tuple_id();
  5257. }
  5258.  
  5259. isl::multi_aff aff::identity() const
  5260. {
  5261.   return isl::multi_aff(*this).identity();
  5262. }
  5263.  
  5264. isl::pw_aff aff::insert_domain(const isl::space &domain) const
  5265. {
  5266.   return isl::pw_aff(*this).insert_domain(domain);
  5267. }
  5268.  
  5269. isl::pw_aff aff::intersect_domain(const isl::set &set) const
  5270. {
  5271.   return isl::pw_aff(*this).intersect_domain(set);
  5272. }
  5273.  
  5274. isl::union_pw_aff aff::intersect_domain(const isl::space &space) const
  5275. {
  5276.   return isl::pw_aff(*this).intersect_domain(space);
  5277. }
  5278.  
  5279. isl::union_pw_aff aff::intersect_domain(const isl::union_set &uset) const
  5280. {
  5281.   return isl::pw_aff(*this).intersect_domain(uset);
  5282. }
  5283.  
  5284. isl::union_pw_aff aff::intersect_domain_wrapped_domain(const isl::union_set &uset) const
  5285. {
  5286.   return isl::pw_aff(*this).intersect_domain_wrapped_domain(uset);
  5287. }
  5288.  
  5289. isl::union_pw_aff aff::intersect_domain_wrapped_range(const isl::union_set &uset) const
  5290. {
  5291.   return isl::pw_aff(*this).intersect_domain_wrapped_range(uset);
  5292. }
  5293.  
  5294. isl::pw_aff aff::intersect_params(const isl::set &set) const
  5295. {
  5296.   return isl::pw_aff(*this).intersect_params(set);
  5297. }
  5298.  
  5299. boolean aff::involves_locals() const
  5300. {
  5301.   return isl::multi_aff(*this).involves_locals();
  5302. }
  5303.  
  5304. boolean aff::involves_nan() const
  5305. {
  5306.   return isl::multi_aff(*this).involves_nan();
  5307. }
  5308.  
  5309. boolean aff::involves_param(const isl::id &id) const
  5310. {
  5311.   return isl::pw_aff(*this).involves_param(id);
  5312. }
  5313.  
  5314. boolean aff::involves_param(const std::string &id) const
  5315. {
  5316.   return this->involves_param(isl::id(ctx(), id));
  5317. }
  5318.  
  5319. boolean aff::involves_param(const isl::id_list &list) const
  5320. {
  5321.   return isl::pw_aff(*this).involves_param(list);
  5322. }
  5323.  
  5324. boolean aff::is_cst() const
  5325. {
  5326.   auto res = isl_aff_is_cst(get());
  5327.   return manage(res);
  5328. }
  5329.  
  5330. boolean aff::is_equal(const isl::pw_aff &pa2) const
  5331. {
  5332.   return isl::pw_aff(*this).is_equal(pa2);
  5333. }
  5334.  
  5335. boolean aff::isa_aff() const
  5336. {
  5337.   return isl::pw_aff(*this).isa_aff();
  5338. }
  5339.  
  5340. boolean aff::isa_multi_aff() const
  5341. {
  5342.   return isl::pw_aff(*this).isa_multi_aff();
  5343. }
  5344.  
  5345. boolean aff::isa_pw_multi_aff() const
  5346. {
  5347.   return isl::pw_aff(*this).isa_pw_multi_aff();
  5348. }
  5349.  
  5350. isl::set aff::le_set(isl::aff aff2) const
  5351. {
  5352.   auto res = isl_aff_le_set(copy(), aff2.release());
  5353.   return manage(res);
  5354. }
  5355.  
  5356. isl::set aff::le_set(const isl::pw_aff &pwaff2) const
  5357. {
  5358.   return isl::pw_aff(*this).le_set(pwaff2);
  5359. }
  5360.  
  5361. isl::aff_list aff::list() const
  5362. {
  5363.   return isl::multi_aff(*this).list();
  5364. }
  5365.  
  5366. isl::set aff::lt_set(isl::aff aff2) const
  5367. {
  5368.   auto res = isl_aff_lt_set(copy(), aff2.release());
  5369.   return manage(res);
  5370. }
  5371.  
  5372. isl::set aff::lt_set(const isl::pw_aff &pwaff2) const
  5373. {
  5374.   return isl::pw_aff(*this).lt_set(pwaff2);
  5375. }
  5376.  
  5377. isl::multi_pw_aff aff::max(const isl::multi_pw_aff &multi2) const
  5378. {
  5379.   return isl::pw_aff(*this).max(multi2);
  5380. }
  5381.  
  5382. isl::pw_aff aff::max(const isl::pw_aff &pwaff2) const
  5383. {
  5384.   return isl::pw_aff(*this).max(pwaff2);
  5385. }
  5386.  
  5387. isl::multi_val aff::max_multi_val() const
  5388. {
  5389.   return isl::pw_aff(*this).max_multi_val();
  5390. }
  5391.  
  5392. isl::multi_pw_aff aff::min(const isl::multi_pw_aff &multi2) const
  5393. {
  5394.   return isl::pw_aff(*this).min(multi2);
  5395. }
  5396.  
  5397. isl::pw_aff aff::min(const isl::pw_aff &pwaff2) const
  5398. {
  5399.   return isl::pw_aff(*this).min(pwaff2);
  5400. }
  5401.  
  5402. isl::multi_val aff::min_multi_val() const
  5403. {
  5404.   return isl::pw_aff(*this).min_multi_val();
  5405. }
  5406.  
  5407. isl::aff aff::mod(isl::val mod) const
  5408. {
  5409.   auto res = isl_aff_mod_val(copy(), mod.release());
  5410.   return manage(res);
  5411. }
  5412.  
  5413. isl::aff aff::mod(long mod) const
  5414. {
  5415.   return this->mod(isl::val(ctx(), mod));
  5416. }
  5417.  
  5418. isl::aff aff::mul(isl::aff aff2) const
  5419. {
  5420.   auto res = isl_aff_mul(copy(), aff2.release());
  5421.   return manage(res);
  5422. }
  5423.  
  5424. isl::pw_aff aff::mul(const isl::pw_aff &pwaff2) const
  5425. {
  5426.   return isl::pw_aff(*this).mul(pwaff2);
  5427. }
  5428.  
  5429. class size aff::n_piece() const
  5430. {
  5431.   return isl::pw_aff(*this).n_piece();
  5432. }
  5433.  
  5434. isl::set aff::ne_set(isl::aff aff2) const
  5435. {
  5436.   auto res = isl_aff_ne_set(copy(), aff2.release());
  5437.   return manage(res);
  5438. }
  5439.  
  5440. isl::set aff::ne_set(const isl::pw_aff &pwaff2) const
  5441. {
  5442.   return isl::pw_aff(*this).ne_set(pwaff2);
  5443. }
  5444.  
  5445. isl::aff aff::neg() const
  5446. {
  5447.   auto res = isl_aff_neg(copy());
  5448.   return manage(res);
  5449. }
  5450.  
  5451. boolean aff::plain_is_empty() const
  5452. {
  5453.   return isl::pw_aff(*this).plain_is_empty();
  5454. }
  5455.  
  5456. boolean aff::plain_is_equal(const isl::multi_aff &multi2) const
  5457. {
  5458.   return isl::multi_aff(*this).plain_is_equal(multi2);
  5459. }
  5460.  
  5461. boolean aff::plain_is_equal(const isl::multi_pw_aff &multi2) const
  5462. {
  5463.   return isl::pw_aff(*this).plain_is_equal(multi2);
  5464. }
  5465.  
  5466. boolean aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
  5467. {
  5468.   return isl::pw_aff(*this).plain_is_equal(multi2);
  5469. }
  5470.  
  5471. isl::pw_multi_aff aff::preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const
  5472. {
  5473.   return isl::pw_aff(*this).preimage_domain_wrapped_domain(pma2);
  5474. }
  5475.  
  5476. isl::union_pw_multi_aff aff::preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const
  5477. {
  5478.   return isl::pw_aff(*this).preimage_domain_wrapped_domain(upma2);
  5479. }
  5480.  
  5481. isl::multi_aff aff::product(const isl::multi_aff &multi2) const
  5482. {
  5483.   return isl::multi_aff(*this).product(multi2);
  5484. }
  5485.  
  5486. isl::multi_pw_aff aff::product(const isl::multi_pw_aff &multi2) const
  5487. {
  5488.   return isl::pw_aff(*this).product(multi2);
  5489. }
  5490.  
  5491. isl::pw_multi_aff aff::product(const isl::pw_multi_aff &pma2) const
  5492. {
  5493.   return isl::pw_aff(*this).product(pma2);
  5494. }
  5495.  
  5496. isl::aff aff::pullback(isl::multi_aff ma) const
  5497. {
  5498.   auto res = isl_aff_pullback_multi_aff(copy(), ma.release());
  5499.   return manage(res);
  5500. }
  5501.  
  5502. isl::pw_aff aff::pullback(const isl::multi_pw_aff &mpa) const
  5503. {
  5504.   return isl::pw_aff(*this).pullback(mpa);
  5505. }
  5506.  
  5507. isl::pw_aff aff::pullback(const isl::pw_multi_aff &pma) const
  5508. {
  5509.   return isl::pw_aff(*this).pullback(pma);
  5510. }
  5511.  
  5512. isl::union_pw_aff aff::pullback(const isl::union_pw_multi_aff &upma) const
  5513. {
  5514.   return isl::pw_aff(*this).pullback(upma);
  5515. }
  5516.  
  5517. isl::aff aff::pullback(const isl::aff &ma) const
  5518. {
  5519.   return this->pullback(isl::multi_aff(ma));
  5520. }
  5521.  
  5522. isl::pw_multi_aff_list aff::pw_multi_aff_list() const
  5523. {
  5524.   return isl::pw_aff(*this).pw_multi_aff_list();
  5525. }
  5526.  
  5527. isl::pw_multi_aff aff::range_factor_domain() const
  5528. {
  5529.   return isl::pw_aff(*this).range_factor_domain();
  5530. }
  5531.  
  5532. isl::pw_multi_aff aff::range_factor_range() const
  5533. {
  5534.   return isl::pw_aff(*this).range_factor_range();
  5535. }
  5536.  
  5537. isl::multi_aff aff::range_product(const isl::multi_aff &multi2) const
  5538. {
  5539.   return isl::multi_aff(*this).range_product(multi2);
  5540. }
  5541.  
  5542. isl::multi_pw_aff aff::range_product(const isl::multi_pw_aff &multi2) const
  5543. {
  5544.   return isl::pw_aff(*this).range_product(multi2);
  5545. }
  5546.  
  5547. isl::multi_union_pw_aff aff::range_product(const isl::multi_union_pw_aff &multi2) const
  5548. {
  5549.   return isl::pw_aff(*this).range_product(multi2);
  5550. }
  5551.  
  5552. isl::pw_multi_aff aff::range_product(const isl::pw_multi_aff &pma2) const
  5553. {
  5554.   return isl::pw_aff(*this).range_product(pma2);
  5555. }
  5556.  
  5557. isl::union_pw_multi_aff aff::range_product(const isl::union_pw_multi_aff &upma2) const
  5558. {
  5559.   return isl::pw_aff(*this).range_product(upma2);
  5560. }
  5561.  
  5562. isl::id aff::range_tuple_id() const
  5563. {
  5564.   return isl::multi_aff(*this).range_tuple_id();
  5565. }
  5566.  
  5567. isl::multi_aff aff::reset_range_tuple_id() const
  5568. {
  5569.   return isl::multi_aff(*this).reset_range_tuple_id();
  5570. }
  5571.  
  5572. isl::multi_aff aff::reset_tuple_id(isl::dim type) const
  5573. {
  5574.   return isl::multi_aff(*this).reset_tuple_id(type);
  5575. }
  5576.  
  5577. isl::aff aff::scale(isl::val v) const
  5578. {
  5579.   auto res = isl_aff_scale_val(copy(), v.release());
  5580.   return manage(res);
  5581. }
  5582.  
  5583. isl::aff aff::scale(long v) const
  5584. {
  5585.   return this->scale(isl::val(ctx(), v));
  5586. }
  5587.  
  5588. isl::multi_aff aff::scale(const isl::multi_val &mv) const
  5589. {
  5590.   return isl::multi_aff(*this).scale(mv);
  5591. }
  5592.  
  5593. isl::aff aff::scale_down(isl::val v) const
  5594. {
  5595.   auto res = isl_aff_scale_down_val(copy(), v.release());
  5596.   return manage(res);
  5597. }
  5598.  
  5599. isl::aff aff::scale_down(long v) const
  5600. {
  5601.   return this->scale_down(isl::val(ctx(), v));
  5602. }
  5603.  
  5604. isl::multi_aff aff::scale_down(const isl::multi_val &mv) const
  5605. {
  5606.   return isl::multi_aff(*this).scale_down(mv);
  5607. }
  5608.  
  5609. isl::multi_aff aff::set_aff(int pos, const isl::aff &el) const
  5610. {
  5611.   return isl::multi_aff(*this).set_aff(pos, el);
  5612. }
  5613.  
  5614. isl::multi_aff aff::set_at(int pos, const isl::aff &el) const
  5615. {
  5616.   return isl::multi_aff(*this).set_at(pos, el);
  5617. }
  5618.  
  5619. isl::multi_pw_aff aff::set_at(int pos, const isl::pw_aff &el) const
  5620. {
  5621.   return isl::pw_aff(*this).set_at(pos, el);
  5622. }
  5623.  
  5624. isl::multi_union_pw_aff aff::set_at(int pos, const isl::union_pw_aff &el) const
  5625. {
  5626.   return isl::pw_aff(*this).set_at(pos, el);
  5627. }
  5628.  
  5629. isl::aff aff::set_constant_si(int v) const
  5630. {
  5631.   auto res = isl_aff_set_constant_si(copy(), v);
  5632.   return manage(res);
  5633. }
  5634.  
  5635. isl::multi_pw_aff aff::set_pw_aff(int pos, const isl::pw_aff &el) const
  5636. {
  5637.   return isl::pw_aff(*this).set_pw_aff(pos, el);
  5638. }
  5639.  
  5640. isl::pw_multi_aff aff::set_pw_aff(unsigned int pos, const isl::pw_aff &pa) const
  5641. {
  5642.   return isl::pw_aff(*this).set_pw_aff(pos, pa);
  5643. }
  5644.  
  5645. isl::multi_aff aff::set_range_tuple(const isl::id &id) const
  5646. {
  5647.   return isl::multi_aff(*this).set_range_tuple(id);
  5648. }
  5649.  
  5650. isl::multi_aff aff::set_range_tuple(const std::string &id) const
  5651. {
  5652.   return this->set_range_tuple(isl::id(ctx(), id));
  5653. }
  5654.  
  5655. isl::pw_aff aff::set_tuple_id(isl::dim type, const isl::id &id) const
  5656. {
  5657.   return isl::pw_aff(*this).set_tuple_id(type, id);
  5658. }
  5659.  
  5660. isl::pw_aff aff::set_tuple_id(isl::dim type, const std::string &id) const
  5661. {
  5662.   return this->set_tuple_id(type, isl::id(ctx(), id));
  5663. }
  5664.  
  5665. isl::multi_union_pw_aff aff::set_union_pw_aff(int pos, const isl::union_pw_aff &el) const
  5666. {
  5667.   return isl::pw_aff(*this).set_union_pw_aff(pos, el);
  5668. }
  5669.  
  5670. class size aff::size() const
  5671. {
  5672.   return isl::multi_aff(*this).size();
  5673. }
  5674.  
  5675. isl::space aff::space() const
  5676. {
  5677.   return isl::pw_aff(*this).space();
  5678. }
  5679.  
  5680. isl::aff aff::sub(isl::aff aff2) const
  5681. {
  5682.   auto res = isl_aff_sub(copy(), aff2.release());
  5683.   return manage(res);
  5684. }
  5685.  
  5686. isl::multi_aff aff::sub(const isl::multi_aff &multi2) const
  5687. {
  5688.   return isl::multi_aff(*this).sub(multi2);
  5689. }
  5690.  
  5691. isl::multi_pw_aff aff::sub(const isl::multi_pw_aff &multi2) const
  5692. {
  5693.   return isl::pw_aff(*this).sub(multi2);
  5694. }
  5695.  
  5696. isl::multi_union_pw_aff aff::sub(const isl::multi_union_pw_aff &multi2) const
  5697. {
  5698.   return isl::pw_aff(*this).sub(multi2);
  5699. }
  5700.  
  5701. isl::pw_aff aff::sub(const isl::pw_aff &pwaff2) const
  5702. {
  5703.   return isl::pw_aff(*this).sub(pwaff2);
  5704. }
  5705.  
  5706. isl::pw_multi_aff aff::sub(const isl::pw_multi_aff &pma2) const
  5707. {
  5708.   return isl::pw_aff(*this).sub(pma2);
  5709. }
  5710.  
  5711. isl::union_pw_aff aff::sub(const isl::union_pw_aff &upa2) const
  5712. {
  5713.   return isl::pw_aff(*this).sub(upa2);
  5714. }
  5715.  
  5716. isl::union_pw_multi_aff aff::sub(const isl::union_pw_multi_aff &upma2) const
  5717. {
  5718.   return isl::pw_aff(*this).sub(upma2);
  5719. }
  5720.  
  5721. isl::pw_aff aff::subtract_domain(const isl::set &set) const
  5722. {
  5723.   return isl::pw_aff(*this).subtract_domain(set);
  5724. }
  5725.  
  5726. isl::union_pw_aff aff::subtract_domain(const isl::space &space) const
  5727. {
  5728.   return isl::pw_aff(*this).subtract_domain(space);
  5729. }
  5730.  
  5731. isl::union_pw_aff aff::subtract_domain(const isl::union_set &uset) const
  5732. {
  5733.   return isl::pw_aff(*this).subtract_domain(uset);
  5734. }
  5735.  
  5736. isl::pw_aff aff::tdiv_q(const isl::pw_aff &pa2) const
  5737. {
  5738.   return isl::pw_aff(*this).tdiv_q(pa2);
  5739. }
  5740.  
  5741. isl::pw_aff aff::tdiv_r(const isl::pw_aff &pa2) const
  5742. {
  5743.   return isl::pw_aff(*this).tdiv_r(pa2);
  5744. }
  5745.  
  5746. isl::aff_list aff::to_list() const
  5747. {
  5748.   auto res = isl_aff_to_list(copy());
  5749.   return manage(res);
  5750. }
  5751.  
  5752. isl::multi_pw_aff aff::to_multi_pw_aff() const
  5753. {
  5754.   return isl::multi_aff(*this).to_multi_pw_aff();
  5755. }
  5756.  
  5757. isl::multi_union_pw_aff aff::to_multi_union_pw_aff() const
  5758. {
  5759.   return isl::multi_aff(*this).to_multi_union_pw_aff();
  5760. }
  5761.  
  5762. isl::pw_multi_aff aff::to_pw_multi_aff() const
  5763. {
  5764.   return isl::multi_aff(*this).to_pw_multi_aff();
  5765. }
  5766.  
  5767. isl::union_pw_aff aff::to_union_pw_aff() const
  5768. {
  5769.   return isl::pw_aff(*this).to_union_pw_aff();
  5770. }
  5771.  
  5772. isl::union_pw_multi_aff aff::to_union_pw_multi_aff() const
  5773. {
  5774.   return isl::pw_aff(*this).to_union_pw_multi_aff();
  5775. }
  5776.  
  5777. isl::id aff::tuple_id(isl::dim type) const
  5778. {
  5779.   return isl::pw_aff(*this).tuple_id(type);
  5780. }
  5781.  
  5782. isl::aff aff::unbind_params_insert_domain(isl::multi_id domain) const
  5783. {
  5784.   auto res = isl_aff_unbind_params_insert_domain(copy(), domain.release());
  5785.   return manage(res);
  5786. }
  5787.  
  5788. isl::multi_pw_aff aff::union_add(const isl::multi_pw_aff &mpa2) const
  5789. {
  5790.   return isl::pw_aff(*this).union_add(mpa2);
  5791. }
  5792.  
  5793. isl::multi_union_pw_aff aff::union_add(const isl::multi_union_pw_aff &mupa2) const
  5794. {
  5795.   return isl::pw_aff(*this).union_add(mupa2);
  5796. }
  5797.  
  5798. isl::pw_aff aff::union_add(const isl::pw_aff &pwaff2) const
  5799. {
  5800.   return isl::pw_aff(*this).union_add(pwaff2);
  5801. }
  5802.  
  5803. isl::pw_multi_aff aff::union_add(const isl::pw_multi_aff &pma2) const
  5804. {
  5805.   return isl::pw_aff(*this).union_add(pma2);
  5806. }
  5807.  
  5808. isl::union_pw_aff aff::union_add(const isl::union_pw_aff &upa2) const
  5809. {
  5810.   return isl::pw_aff(*this).union_add(upa2);
  5811. }
  5812.  
  5813. isl::union_pw_multi_aff aff::union_add(const isl::union_pw_multi_aff &upma2) const
  5814. {
  5815.   return isl::pw_aff(*this).union_add(upma2);
  5816. }
  5817.  
  5818. isl::aff aff::var_on_domain(isl::local_space ls, isl::dim type, unsigned int pos)
  5819. {
  5820.   auto res = isl_aff_var_on_domain(ls.release(), static_cast<enum isl_dim_type>(type), pos);
  5821.   return manage(res);
  5822. }
  5823.  
  5824. isl::aff aff::zero_on_domain(isl::space space)
  5825. {
  5826.   auto res = isl_aff_zero_on_domain_space(space.release());
  5827.   return manage(res);
  5828. }
  5829.  
  5830. inline std::ostream &operator<<(std::ostream &os, const aff &obj)
  5831. {
  5832.   char *str = isl_aff_to_str(obj.get());
  5833.   if (!str) {
  5834.     os.setstate(std::ios_base::badbit);
  5835.     return os;
  5836.   }
  5837.   os << str;
  5838.   free(str);
  5839.   return os;
  5840. }
  5841.  
  5842. // implementations for isl::aff_list
  5843. aff_list manage(__isl_take isl_aff_list *ptr) {
  5844.   return aff_list(ptr);
  5845. }
  5846. aff_list manage_copy(__isl_keep isl_aff_list *ptr) {
  5847.   ptr = isl_aff_list_copy(ptr);
  5848.   return aff_list(ptr);
  5849. }
  5850.  
  5851. aff_list::aff_list()
  5852.     : ptr(nullptr) {}
  5853.  
  5854. aff_list::aff_list(const aff_list &obj)
  5855.     : ptr(nullptr)
  5856. {
  5857.   ptr = obj.copy();
  5858. }
  5859.  
  5860. aff_list::aff_list(__isl_take isl_aff_list *ptr)
  5861.     : ptr(ptr) {}
  5862.  
  5863. aff_list::aff_list(isl::ctx ctx, int n)
  5864. {
  5865.   auto res = isl_aff_list_alloc(ctx.release(), n);
  5866.   ptr = res;
  5867. }
  5868.  
  5869. aff_list::aff_list(isl::aff el)
  5870. {
  5871.   auto res = isl_aff_list_from_aff(el.release());
  5872.   ptr = res;
  5873. }
  5874.  
  5875. aff_list::aff_list(isl::ctx ctx, const std::string &str)
  5876. {
  5877.   auto res = isl_aff_list_read_from_str(ctx.release(), str.c_str());
  5878.   ptr = res;
  5879. }
  5880.  
  5881. aff_list &aff_list::operator=(aff_list obj) {
  5882.   std::swap(this->ptr, obj.ptr);
  5883.   return *this;
  5884. }
  5885.  
  5886. aff_list::~aff_list() {
  5887.   if (ptr)
  5888.     isl_aff_list_free(ptr);
  5889. }
  5890.  
  5891. __isl_give isl_aff_list *aff_list::copy() const & {
  5892.   return isl_aff_list_copy(ptr);
  5893. }
  5894.  
  5895. __isl_keep isl_aff_list *aff_list::get() const {
  5896.   return ptr;
  5897. }
  5898.  
  5899. __isl_give isl_aff_list *aff_list::release() {
  5900.   isl_aff_list *tmp = ptr;
  5901.   ptr = nullptr;
  5902.   return tmp;
  5903. }
  5904.  
  5905. bool aff_list::is_null() const {
  5906.   return ptr == nullptr;
  5907. }
  5908.  
  5909. isl::ctx aff_list::ctx() const {
  5910.   return isl::ctx(isl_aff_list_get_ctx(ptr));
  5911. }
  5912.  
  5913. isl::aff_list aff_list::add(isl::aff el) const
  5914. {
  5915.   auto res = isl_aff_list_add(copy(), el.release());
  5916.   return manage(res);
  5917. }
  5918.  
  5919. isl::aff aff_list::at(int index) const
  5920. {
  5921.   auto res = isl_aff_list_get_at(get(), index);
  5922.   return manage(res);
  5923. }
  5924.  
  5925. isl::aff aff_list::get_at(int index) const
  5926. {
  5927.   return at(index);
  5928. }
  5929.  
  5930. isl::aff_list aff_list::clear() const
  5931. {
  5932.   auto res = isl_aff_list_clear(copy());
  5933.   return manage(res);
  5934. }
  5935.  
  5936. isl::aff_list aff_list::concat(isl::aff_list list2) const
  5937. {
  5938.   auto res = isl_aff_list_concat(copy(), list2.release());
  5939.   return manage(res);
  5940. }
  5941.  
  5942. isl::aff_list aff_list::drop(unsigned int first, unsigned int n) const
  5943. {
  5944.   auto res = isl_aff_list_drop(copy(), first, n);
  5945.   return manage(res);
  5946. }
  5947.  
  5948. stat aff_list::foreach(const std::function<stat(isl::aff)> &fn) const
  5949. {
  5950.   struct fn_data {
  5951.     std::function<stat(isl::aff)> func;
  5952.   } fn_data = { fn };
  5953.   auto fn_lambda = [](isl_aff *arg_0, void *arg_1) -> isl_stat {
  5954.     auto *data = static_cast<struct fn_data *>(arg_1);
  5955.     auto ret = (data->func)(manage(arg_0));
  5956.     return ret.release();
  5957.   };
  5958.   auto res = isl_aff_list_foreach(get(), fn_lambda, &fn_data);
  5959.   return manage(res);
  5960. }
  5961.  
  5962. isl::aff_list aff_list::insert(unsigned int pos, isl::aff el) const
  5963. {
  5964.   auto res = isl_aff_list_insert(copy(), pos, el.release());
  5965.   return manage(res);
  5966. }
  5967.  
  5968. class size aff_list::size() const
  5969. {
  5970.   auto res = isl_aff_list_size(get());
  5971.   return manage(res);
  5972. }
  5973.  
  5974. inline std::ostream &operator<<(std::ostream &os, const aff_list &obj)
  5975. {
  5976.   char *str = isl_aff_list_to_str(obj.get());
  5977.   if (!str) {
  5978.     os.setstate(std::ios_base::badbit);
  5979.     return os;
  5980.   }
  5981.   os << str;
  5982.   free(str);
  5983.   return os;
  5984. }
  5985.  
  5986. // implementations for isl::ast_build
  5987. ast_build manage(__isl_take isl_ast_build *ptr) {
  5988.   return ast_build(ptr);
  5989. }
  5990. ast_build manage_copy(__isl_keep isl_ast_build *ptr) {
  5991.   ptr = isl_ast_build_copy(ptr);
  5992.   return ast_build(ptr);
  5993. }
  5994.  
  5995. ast_build::ast_build()
  5996.     : ptr(nullptr) {}
  5997.  
  5998. ast_build::ast_build(const ast_build &obj)
  5999.     : ptr(nullptr)
  6000. {
  6001.   ptr = obj.copy();
  6002.   copy_callbacks(obj);
  6003. }
  6004.  
  6005. ast_build::ast_build(__isl_take isl_ast_build *ptr)
  6006.     : ptr(ptr) {}
  6007.  
  6008. ast_build::ast_build(isl::ctx ctx)
  6009. {
  6010.   auto res = isl_ast_build_alloc(ctx.release());
  6011.   ptr = res;
  6012. }
  6013.  
  6014. ast_build &ast_build::operator=(ast_build obj) {
  6015.   std::swap(this->ptr, obj.ptr);
  6016.   copy_callbacks(obj);
  6017.   return *this;
  6018. }
  6019.  
  6020. ast_build::~ast_build() {
  6021.   if (ptr)
  6022.     isl_ast_build_free(ptr);
  6023. }
  6024.  
  6025. __isl_give isl_ast_build *ast_build::copy() const & {
  6026.   return isl_ast_build_copy(ptr);
  6027. }
  6028.  
  6029. __isl_keep isl_ast_build *ast_build::get() const {
  6030.   return ptr;
  6031. }
  6032.  
  6033. __isl_give isl_ast_build *ast_build::release() {
  6034.   if (at_each_domain_data)
  6035.     isl_die(ctx().get(), isl_error_invalid, "cannot release object with persistent callbacks", return nullptr);
  6036.   isl_ast_build *tmp = ptr;
  6037.   ptr = nullptr;
  6038.   return tmp;
  6039. }
  6040.  
  6041. bool ast_build::is_null() const {
  6042.   return ptr == nullptr;
  6043. }
  6044.  
  6045. isl::ctx ast_build::ctx() const {
  6046.   return isl::ctx(isl_ast_build_get_ctx(ptr));
  6047. }
  6048.  
  6049. ast_build &ast_build::copy_callbacks(const ast_build &obj)
  6050. {
  6051.   at_each_domain_data = obj.at_each_domain_data;
  6052.   return *this;
  6053. }
  6054.  
  6055. isl_ast_node *ast_build::at_each_domain(isl_ast_node *arg_0, isl_ast_build *arg_1, void *arg_2)
  6056. {
  6057.   auto *data = static_cast<struct at_each_domain_data *>(arg_2);
  6058.   auto ret = (data->func)(manage(arg_0), manage_copy(arg_1));
  6059.   return ret.release();
  6060. }
  6061.  
  6062. void ast_build::set_at_each_domain_data(const std::function<isl::ast_node(isl::ast_node, isl::ast_build)> &fn)
  6063. {
  6064.   at_each_domain_data = std::make_shared<struct at_each_domain_data>();
  6065.   at_each_domain_data->func = fn;
  6066.   ptr = isl_ast_build_set_at_each_domain(ptr, &at_each_domain, at_each_domain_data.get());
  6067. }
  6068.  
  6069. isl::ast_build ast_build::set_at_each_domain(const std::function<isl::ast_node(isl::ast_node, isl::ast_build)> &fn) const
  6070. {
  6071.   auto copy = *this;
  6072.   copy.set_at_each_domain_data(fn);
  6073.   return copy;
  6074. }
  6075.  
  6076. isl::ast_expr ast_build::access_from(isl::multi_pw_aff mpa) const
  6077. {
  6078.   auto res = isl_ast_build_access_from_multi_pw_aff(get(), mpa.release());
  6079.   return manage(res);
  6080. }
  6081.  
  6082. isl::ast_expr ast_build::access_from(isl::pw_multi_aff pma) const
  6083. {
  6084.   auto res = isl_ast_build_access_from_pw_multi_aff(get(), pma.release());
  6085.   return manage(res);
  6086. }
  6087.  
  6088. isl::ast_expr ast_build::call_from(isl::multi_pw_aff mpa) const
  6089. {
  6090.   auto res = isl_ast_build_call_from_multi_pw_aff(get(), mpa.release());
  6091.   return manage(res);
  6092. }
  6093.  
  6094. isl::ast_expr ast_build::call_from(isl::pw_multi_aff pma) const
  6095. {
  6096.   auto res = isl_ast_build_call_from_pw_multi_aff(get(), pma.release());
  6097.   return manage(res);
  6098. }
  6099.  
  6100. isl::ast_expr ast_build::expr_from(isl::pw_aff pa) const
  6101. {
  6102.   auto res = isl_ast_build_expr_from_pw_aff(get(), pa.release());
  6103.   return manage(res);
  6104. }
  6105.  
  6106. isl::ast_expr ast_build::expr_from(isl::set set) const
  6107. {
  6108.   auto res = isl_ast_build_expr_from_set(get(), set.release());
  6109.   return manage(res);
  6110. }
  6111.  
  6112. isl::ast_build ast_build::from_context(isl::set set)
  6113. {
  6114.   auto res = isl_ast_build_from_context(set.release());
  6115.   return manage(res);
  6116. }
  6117.  
  6118. isl::ast_node ast_build::node_from(isl::schedule schedule) const
  6119. {
  6120.   auto res = isl_ast_build_node_from_schedule(get(), schedule.release());
  6121.   return manage(res);
  6122. }
  6123.  
  6124. isl::ast_node ast_build::node_from_schedule_map(isl::union_map schedule) const
  6125. {
  6126.   auto res = isl_ast_build_node_from_schedule_map(get(), schedule.release());
  6127.   return manage(res);
  6128. }
  6129.  
  6130. isl::ast_build ast_build::restrict(isl::set set) const
  6131. {
  6132.   auto res = isl_ast_build_restrict(copy(), set.release());
  6133.   return manage(res).copy_callbacks(*this);
  6134. }
  6135.  
  6136. isl::union_map ast_build::schedule() const
  6137. {
  6138.   auto res = isl_ast_build_get_schedule(get());
  6139.   return manage(res);
  6140. }
  6141.  
  6142. isl::union_map ast_build::get_schedule() const
  6143. {
  6144.   return schedule();
  6145. }
  6146.  
  6147. // implementations for isl::ast_expr
  6148. ast_expr manage(__isl_take isl_ast_expr *ptr) {
  6149.   return ast_expr(ptr);
  6150. }
  6151. ast_expr manage_copy(__isl_keep isl_ast_expr *ptr) {
  6152.   ptr = isl_ast_expr_copy(ptr);
  6153.   return ast_expr(ptr);
  6154. }
  6155.  
  6156. ast_expr::ast_expr()
  6157.     : ptr(nullptr) {}
  6158.  
  6159. ast_expr::ast_expr(const ast_expr &obj)
  6160.     : ptr(nullptr)
  6161. {
  6162.   ptr = obj.copy();
  6163. }
  6164.  
  6165. ast_expr::ast_expr(__isl_take isl_ast_expr *ptr)
  6166.     : ptr(ptr) {}
  6167.  
  6168. ast_expr &ast_expr::operator=(ast_expr obj) {
  6169.   std::swap(this->ptr, obj.ptr);
  6170.   return *this;
  6171. }
  6172.  
  6173. ast_expr::~ast_expr() {
  6174.   if (ptr)
  6175.     isl_ast_expr_free(ptr);
  6176. }
  6177.  
  6178. __isl_give isl_ast_expr *ast_expr::copy() const & {
  6179.   return isl_ast_expr_copy(ptr);
  6180. }
  6181.  
  6182. __isl_keep isl_ast_expr *ast_expr::get() const {
  6183.   return ptr;
  6184. }
  6185.  
  6186. __isl_give isl_ast_expr *ast_expr::release() {
  6187.   isl_ast_expr *tmp = ptr;
  6188.   ptr = nullptr;
  6189.   return tmp;
  6190. }
  6191.  
  6192. bool ast_expr::is_null() const {
  6193.   return ptr == nullptr;
  6194. }
  6195.  
  6196. template <typename T, typename>
  6197. boolean ast_expr::isa_type(T subtype) const
  6198. {
  6199.   if (is_null())
  6200.     return boolean();
  6201.   return isl_ast_expr_get_type(get()) == subtype;
  6202. }
  6203. template <class T>
  6204. boolean ast_expr::isa() const
  6205. {
  6206.   return isa_type<decltype(T::type)>(T::type);
  6207. }
  6208. template <class T>
  6209. T ast_expr::as() const
  6210. {
  6211.  if (isa<T>().is_false())
  6212.     isl_die(ctx().get(), isl_error_invalid, "not an object of the requested subtype", return T());
  6213.   return T(copy());
  6214. }
  6215.  
  6216. isl::ctx ast_expr::ctx() const {
  6217.   return isl::ctx(isl_ast_expr_get_ctx(ptr));
  6218. }
  6219.  
  6220. isl::ast_expr ast_expr::add(isl::ast_expr expr2) const
  6221. {
  6222.   auto res = isl_ast_expr_add(copy(), expr2.release());
  6223.   return manage(res);
  6224. }
  6225.  
  6226. isl::ast_expr ast_expr::address_of() const
  6227. {
  6228.   auto res = isl_ast_expr_address_of(copy());
  6229.   return manage(res);
  6230. }
  6231.  
  6232. isl::ast_expr ast_expr::eq(isl::ast_expr expr2) const
  6233. {
  6234.   auto res = isl_ast_expr_eq(copy(), expr2.release());
  6235.   return manage(res);
  6236. }
  6237.  
  6238. isl::ast_expr ast_expr::from_val(isl::val v)
  6239. {
  6240.   auto res = isl_ast_expr_from_val(v.release());
  6241.   return manage(res);
  6242. }
  6243.  
  6244. isl::id ast_expr::id() const
  6245. {
  6246.   auto res = isl_ast_expr_get_id(get());
  6247.   return manage(res);
  6248. }
  6249.  
  6250. isl::id ast_expr::get_id() const
  6251. {
  6252.   return id();
  6253. }
  6254.  
  6255. isl::ast_expr ast_expr::le(isl::ast_expr expr2) const
  6256. {
  6257.   auto res = isl_ast_expr_le(copy(), expr2.release());
  6258.   return manage(res);
  6259. }
  6260.  
  6261. isl::ast_expr ast_expr::mul(isl::ast_expr expr2) const
  6262. {
  6263.   auto res = isl_ast_expr_mul(copy(), expr2.release());
  6264.   return manage(res);
  6265. }
  6266.  
  6267. isl::ast_expr ast_expr::op_arg(int pos) const
  6268. {
  6269.   auto res = isl_ast_expr_get_op_arg(get(), pos);
  6270.   return manage(res);
  6271. }
  6272.  
  6273. isl::ast_expr ast_expr::get_op_arg(int pos) const
  6274. {
  6275.   return op_arg(pos);
  6276. }
  6277.  
  6278. std::string ast_expr::to_C_str() const
  6279. {
  6280.   auto res = isl_ast_expr_to_C_str(get());
  6281.   std::string tmp(res);
  6282.   free(res);
  6283.   return tmp;
  6284. }
  6285.  
  6286. isl::val ast_expr::val() const
  6287. {
  6288.   auto res = isl_ast_expr_get_val(get());
  6289.   return manage(res);
  6290. }
  6291.  
  6292. isl::val ast_expr::get_val() const
  6293. {
  6294.   return val();
  6295. }
  6296.  
  6297. inline std::ostream &operator<<(std::ostream &os, const ast_expr &obj)
  6298. {
  6299.   char *str = isl_ast_expr_to_str(obj.get());
  6300.   if (!str) {
  6301.     os.setstate(std::ios_base::badbit);
  6302.     return os;
  6303.   }
  6304.   os << str;
  6305.   free(str);
  6306.   return os;
  6307. }
  6308.  
  6309. // implementations for isl::ast_expr_id
  6310. ast_expr_id::ast_expr_id()
  6311.     : ast_expr() {}
  6312.  
  6313. ast_expr_id::ast_expr_id(const ast_expr_id &obj)
  6314.     : ast_expr(obj)
  6315. {
  6316. }
  6317.  
  6318. ast_expr_id::ast_expr_id(__isl_take isl_ast_expr *ptr)
  6319.     : ast_expr(ptr) {}
  6320.  
  6321. ast_expr_id &ast_expr_id::operator=(ast_expr_id obj) {
  6322.   std::swap(this->ptr, obj.ptr);
  6323.   return *this;
  6324. }
  6325.  
  6326. isl::ctx ast_expr_id::ctx() const {
  6327.   return isl::ctx(isl_ast_expr_get_ctx(ptr));
  6328. }
  6329.  
  6330. isl::id ast_expr_id::id() const
  6331. {
  6332.   auto res = isl_ast_expr_id_get_id(get());
  6333.   return manage(res);
  6334. }
  6335.  
  6336. isl::id ast_expr_id::get_id() const
  6337. {
  6338.   return id();
  6339. }
  6340.  
  6341. inline std::ostream &operator<<(std::ostream &os, const ast_expr_id &obj)
  6342. {
  6343.   char *str = isl_ast_expr_to_str(obj.get());
  6344.   if (!str) {
  6345.     os.setstate(std::ios_base::badbit);
  6346.     return os;
  6347.   }
  6348.   os << str;
  6349.   free(str);
  6350.   return os;
  6351. }
  6352.  
  6353. // implementations for isl::ast_expr_int
  6354. ast_expr_int::ast_expr_int()
  6355.     : ast_expr() {}
  6356.  
  6357. ast_expr_int::ast_expr_int(const ast_expr_int &obj)
  6358.     : ast_expr(obj)
  6359. {
  6360. }
  6361.  
  6362. ast_expr_int::ast_expr_int(__isl_take isl_ast_expr *ptr)
  6363.     : ast_expr(ptr) {}
  6364.  
  6365. ast_expr_int &ast_expr_int::operator=(ast_expr_int obj) {
  6366.   std::swap(this->ptr, obj.ptr);
  6367.   return *this;
  6368. }
  6369.  
  6370. isl::ctx ast_expr_int::ctx() const {
  6371.   return isl::ctx(isl_ast_expr_get_ctx(ptr));
  6372. }
  6373.  
  6374. isl::val ast_expr_int::val() const
  6375. {
  6376.   auto res = isl_ast_expr_int_get_val(get());
  6377.   return manage(res);
  6378. }
  6379.  
  6380. isl::val ast_expr_int::get_val() const
  6381. {
  6382.   return val();
  6383. }
  6384.  
  6385. inline std::ostream &operator<<(std::ostream &os, const ast_expr_int &obj)
  6386. {
  6387.   char *str = isl_ast_expr_to_str(obj.get());
  6388.   if (!str) {
  6389.     os.setstate(std::ios_base::badbit);
  6390.     return os;
  6391.   }
  6392.   os << str;
  6393.   free(str);
  6394.   return os;
  6395. }
  6396.  
  6397. // implementations for isl::ast_expr_op
  6398. ast_expr_op::ast_expr_op()
  6399.     : ast_expr() {}
  6400.  
  6401. ast_expr_op::ast_expr_op(const ast_expr_op &obj)
  6402.     : ast_expr(obj)
  6403. {
  6404. }
  6405.  
  6406. ast_expr_op::ast_expr_op(__isl_take isl_ast_expr *ptr)
  6407.     : ast_expr(ptr) {}
  6408.  
  6409. ast_expr_op &ast_expr_op::operator=(ast_expr_op obj) {
  6410.   std::swap(this->ptr, obj.ptr);
  6411.   return *this;
  6412. }
  6413.  
  6414. template <typename T, typename>
  6415. boolean ast_expr_op::isa_type(T subtype) const
  6416. {
  6417.   if (is_null())
  6418.     return boolean();
  6419.   return isl_ast_expr_op_get_type(get()) == subtype;
  6420. }
  6421. template <class T>
  6422. boolean ast_expr_op::isa() const
  6423. {
  6424.   return isa_type<decltype(T::type)>(T::type);
  6425. }
  6426. template <class T>
  6427. T ast_expr_op::as() const
  6428. {
  6429.  if (isa<T>().is_false())
  6430.     isl_die(ctx().get(), isl_error_invalid, "not an object of the requested subtype", return T());
  6431.   return T(copy());
  6432. }
  6433.  
  6434. isl::ctx ast_expr_op::ctx() const {
  6435.   return isl::ctx(isl_ast_expr_get_ctx(ptr));
  6436. }
  6437.  
  6438. isl::ast_expr ast_expr_op::arg(int pos) const
  6439. {
  6440.   auto res = isl_ast_expr_op_get_arg(get(), pos);
  6441.   return manage(res);
  6442. }
  6443.  
  6444. isl::ast_expr ast_expr_op::get_arg(int pos) const
  6445. {
  6446.   return arg(pos);
  6447. }
  6448.  
  6449. class size ast_expr_op::n_arg() const
  6450. {
  6451.   auto res = isl_ast_expr_op_get_n_arg(get());
  6452.   return manage(res);
  6453. }
  6454.  
  6455. class size ast_expr_op::get_n_arg() const
  6456. {
  6457.   return n_arg();
  6458. }
  6459.  
  6460. inline std::ostream &operator<<(std::ostream &os, const ast_expr_op &obj)
  6461. {
  6462.   char *str = isl_ast_expr_to_str(obj.get());
  6463.   if (!str) {
  6464.     os.setstate(std::ios_base::badbit);
  6465.     return os;
  6466.   }
  6467.   os << str;
  6468.   free(str);
  6469.   return os;
  6470. }
  6471.  
  6472. // implementations for isl::ast_expr_op_access
  6473. ast_expr_op_access::ast_expr_op_access()
  6474.     : ast_expr_op() {}
  6475.  
  6476. ast_expr_op_access::ast_expr_op_access(const ast_expr_op_access &obj)
  6477.     : ast_expr_op(obj)
  6478. {
  6479. }
  6480.  
  6481. ast_expr_op_access::ast_expr_op_access(__isl_take isl_ast_expr *ptr)
  6482.     : ast_expr_op(ptr) {}
  6483.  
  6484. ast_expr_op_access &ast_expr_op_access::operator=(ast_expr_op_access obj) {
  6485.   std::swap(this->ptr, obj.ptr);
  6486.   return *this;
  6487. }
  6488.  
  6489. isl::ctx ast_expr_op_access::ctx() const {
  6490.   return isl::ctx(isl_ast_expr_get_ctx(ptr));
  6491. }
  6492.  
  6493. inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_access &obj)
  6494. {
  6495.   char *str = isl_ast_expr_to_str(obj.get());
  6496.   if (!str) {
  6497.     os.setstate(std::ios_base::badbit);
  6498.     return os;
  6499.   }
  6500.   os << str;
  6501.   free(str);
  6502.   return os;
  6503. }
  6504.  
  6505. // implementations for isl::ast_expr_op_add
  6506. ast_expr_op_add::ast_expr_op_add()
  6507.     : ast_expr_op() {}
  6508.  
  6509. ast_expr_op_add::ast_expr_op_add(const ast_expr_op_add &obj)
  6510.     : ast_expr_op(obj)
  6511. {
  6512. }
  6513.  
  6514. ast_expr_op_add::ast_expr_op_add(__isl_take isl_ast_expr *ptr)
  6515.     : ast_expr_op(ptr) {}
  6516.  
  6517. ast_expr_op_add &ast_expr_op_add::operator=(ast_expr_op_add obj) {
  6518.   std::swap(this->ptr, obj.ptr);
  6519.   return *this;
  6520. }
  6521.  
  6522. isl::ctx ast_expr_op_add::ctx() const {
  6523.   return isl::ctx(isl_ast_expr_get_ctx(ptr));
  6524. }
  6525.  
  6526. inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_add &obj)
  6527. {
  6528.   char *str = isl_ast_expr_to_str(obj.get());
  6529.   if (!str) {
  6530.     os.setstate(std::ios_base::badbit);
  6531.     return os;
  6532.   }
  6533.   os << str;
  6534.   free(str);
  6535.   return os;
  6536. }
  6537.  
  6538. // implementations for isl::ast_expr_op_address_of
  6539. ast_expr_op_address_of::ast_expr_op_address_of()
  6540.     : ast_expr_op() {}
  6541.  
  6542. ast_expr_op_address_of::ast_expr_op_address_of(const ast_expr_op_address_of &obj)
  6543.     : ast_expr_op(obj)
  6544. {
  6545. }
  6546.  
  6547. ast_expr_op_address_of::ast_expr_op_address_of(__isl_take isl_ast_expr *ptr)
  6548.     : ast_expr_op(ptr) {}
  6549.  
  6550. ast_expr_op_address_of &ast_expr_op_address_of::operator=(ast_expr_op_address_of obj) {
  6551.   std::swap(this->ptr, obj.ptr);
  6552.   return *this;
  6553. }
  6554.  
  6555. isl::ctx ast_expr_op_address_of::ctx() const {
  6556.   return isl::ctx(isl_ast_expr_get_ctx(ptr));
  6557. }
  6558.  
  6559. inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_address_of &obj)
  6560. {
  6561.   char *str = isl_ast_expr_to_str(obj.get());
  6562.   if (!str) {
  6563.     os.setstate(std::ios_base::badbit);
  6564.     return os;
  6565.   }
  6566.   os << str;
  6567.   free(str);
  6568.   return os;
  6569. }
  6570.  
  6571. // implementations for isl::ast_expr_op_and
  6572. ast_expr_op_and::ast_expr_op_and()
  6573.     : ast_expr_op() {}
  6574.  
  6575. ast_expr_op_and::ast_expr_op_and(const ast_expr_op_and &obj)
  6576.     : ast_expr_op(obj)
  6577. {
  6578. }
  6579.  
  6580. ast_expr_op_and::ast_expr_op_and(__isl_take isl_ast_expr *ptr)
  6581.     : ast_expr_op(ptr) {}
  6582.  
  6583. ast_expr_op_and &ast_expr_op_and::operator=(ast_expr_op_and obj) {
  6584.   std::swap(this->ptr, obj.ptr);
  6585.   return *this;
  6586. }
  6587.  
  6588. isl::ctx ast_expr_op_and::ctx() const {
  6589.   return isl::ctx(isl_ast_expr_get_ctx(ptr));
  6590. }
  6591.  
  6592. inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_and &obj)
  6593. {
  6594.   char *str = isl_ast_expr_to_str(obj.get());
  6595.   if (!str) {
  6596.     os.setstate(std::ios_base::badbit);
  6597.     return os;
  6598.   }
  6599.   os << str;
  6600.   free(str);
  6601.   return os;
  6602. }
  6603.  
  6604. // implementations for isl::ast_expr_op_and_then
  6605. ast_expr_op_and_then::ast_expr_op_and_then()
  6606.     : ast_expr_op() {}
  6607.  
  6608. ast_expr_op_and_then::ast_expr_op_and_then(const ast_expr_op_and_then &obj)
  6609.     : ast_expr_op(obj)
  6610. {
  6611. }
  6612.  
  6613. ast_expr_op_and_then::ast_expr_op_and_then(__isl_take isl_ast_expr *ptr)
  6614.     : ast_expr_op(ptr) {}
  6615.  
  6616. ast_expr_op_and_then &ast_expr_op_and_then::operator=(ast_expr_op_and_then obj) {
  6617.   std::swap(this->ptr, obj.ptr);
  6618.   return *this;
  6619. }
  6620.  
  6621. isl::ctx ast_expr_op_and_then::ctx() const {
  6622.   return isl::ctx(isl_ast_expr_get_ctx(ptr));
  6623. }
  6624.  
  6625. inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_and_then &obj)
  6626. {
  6627.   char *str = isl_ast_expr_to_str(obj.get());
  6628.   if (!str) {
  6629.     os.setstate(std::ios_base::badbit);
  6630.     return os;
  6631.   }
  6632.   os << str;
  6633.   free(str);
  6634.   return os;
  6635. }
  6636.  
  6637. // implementations for isl::ast_expr_op_call
  6638. ast_expr_op_call::ast_expr_op_call()
  6639.     : ast_expr_op() {}
  6640.  
  6641. ast_expr_op_call::ast_expr_op_call(const ast_expr_op_call &obj)
  6642.     : ast_expr_op(obj)
  6643. {
  6644. }
  6645.  
  6646. ast_expr_op_call::ast_expr_op_call(__isl_take isl_ast_expr *ptr)
  6647.     : ast_expr_op(ptr) {}
  6648.  
  6649. ast_expr_op_call &ast_expr_op_call::operator=(ast_expr_op_call obj) {
  6650.   std::swap(this->ptr, obj.ptr);
  6651.   return *this;
  6652. }
  6653.  
  6654. isl::ctx ast_expr_op_call::ctx() const {
  6655.   return isl::ctx(isl_ast_expr_get_ctx(ptr));
  6656. }
  6657.  
  6658. inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_call &obj)
  6659. {
  6660.   char *str = isl_ast_expr_to_str(obj.get());
  6661.   if (!str) {
  6662.     os.setstate(std::ios_base::badbit);
  6663.     return os;
  6664.   }
  6665.   os << str;
  6666.   free(str);
  6667.   return os;
  6668. }
  6669.  
  6670. // implementations for isl::ast_expr_op_cond
  6671. ast_expr_op_cond::ast_expr_op_cond()
  6672.     : ast_expr_op() {}
  6673.  
  6674. ast_expr_op_cond::ast_expr_op_cond(const ast_expr_op_cond &obj)
  6675.     : ast_expr_op(obj)
  6676. {
  6677. }
  6678.  
  6679. ast_expr_op_cond::ast_expr_op_cond(__isl_take isl_ast_expr *ptr)
  6680.     : ast_expr_op(ptr) {}
  6681.  
  6682. ast_expr_op_cond &ast_expr_op_cond::operator=(ast_expr_op_cond obj) {
  6683.   std::swap(this->ptr, obj.ptr);
  6684.   return *this;
  6685. }
  6686.  
  6687. isl::ctx ast_expr_op_cond::ctx() const {
  6688.   return isl::ctx(isl_ast_expr_get_ctx(ptr));
  6689. }
  6690.  
  6691. inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_cond &obj)
  6692. {
  6693.   char *str = isl_ast_expr_to_str(obj.get());
  6694.   if (!str) {
  6695.     os.setstate(std::ios_base::badbit);
  6696.     return os;
  6697.   }
  6698.   os << str;
  6699.   free(str);
  6700.   return os;
  6701. }
  6702.  
  6703. // implementations for isl::ast_expr_op_div
  6704. ast_expr_op_div::ast_expr_op_div()
  6705.     : ast_expr_op() {}
  6706.  
  6707. ast_expr_op_div::ast_expr_op_div(const ast_expr_op_div &obj)
  6708.     : ast_expr_op(obj)
  6709. {
  6710. }
  6711.  
  6712. ast_expr_op_div::ast_expr_op_div(__isl_take isl_ast_expr *ptr)
  6713.     : ast_expr_op(ptr) {}
  6714.  
  6715. ast_expr_op_div &ast_expr_op_div::operator=(ast_expr_op_div obj) {
  6716.   std::swap(this->ptr, obj.ptr);
  6717.   return *this;
  6718. }
  6719.  
  6720. isl::ctx ast_expr_op_div::ctx() const {
  6721.   return isl::ctx(isl_ast_expr_get_ctx(ptr));
  6722. }
  6723.  
  6724. inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_div &obj)
  6725. {
  6726.   char *str = isl_ast_expr_to_str(obj.get());
  6727.   if (!str) {
  6728.     os.setstate(std::ios_base::badbit);
  6729.     return os;
  6730.   }
  6731.   os << str;
  6732.   free(str);
  6733.   return os;
  6734. }
  6735.  
  6736. // implementations for isl::ast_expr_op_eq
  6737. ast_expr_op_eq::ast_expr_op_eq()
  6738.     : ast_expr_op() {}
  6739.  
  6740. ast_expr_op_eq::ast_expr_op_eq(const ast_expr_op_eq &obj)
  6741.     : ast_expr_op(obj)
  6742. {
  6743. }
  6744.  
  6745. ast_expr_op_eq::ast_expr_op_eq(__isl_take isl_ast_expr *ptr)
  6746.     : ast_expr_op(ptr) {}
  6747.  
  6748. ast_expr_op_eq &ast_expr_op_eq::operator=(ast_expr_op_eq obj) {
  6749.   std::swap(this->ptr, obj.ptr);
  6750.   return *this;
  6751. }
  6752.  
  6753. isl::ctx ast_expr_op_eq::ctx() const {
  6754.   return isl::ctx(isl_ast_expr_get_ctx(ptr));
  6755. }
  6756.  
  6757. inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_eq &obj)
  6758. {
  6759.   char *str = isl_ast_expr_to_str(obj.get());
  6760.   if (!str) {
  6761.     os.setstate(std::ios_base::badbit);
  6762.     return os;
  6763.   }
  6764.   os << str;
  6765.   free(str);
  6766.   return os;
  6767. }
  6768.  
  6769. // implementations for isl::ast_expr_op_fdiv_q
  6770. ast_expr_op_fdiv_q::ast_expr_op_fdiv_q()
  6771.     : ast_expr_op() {}
  6772.  
  6773. ast_expr_op_fdiv_q::ast_expr_op_fdiv_q(const ast_expr_op_fdiv_q &obj)
  6774.     : ast_expr_op(obj)
  6775. {
  6776. }
  6777.  
  6778. ast_expr_op_fdiv_q::ast_expr_op_fdiv_q(__isl_take isl_ast_expr *ptr)
  6779.     : ast_expr_op(ptr) {}
  6780.  
  6781. ast_expr_op_fdiv_q &ast_expr_op_fdiv_q::operator=(ast_expr_op_fdiv_q obj) {
  6782.   std::swap(this->ptr, obj.ptr);
  6783.   return *this;
  6784. }
  6785.  
  6786. isl::ctx ast_expr_op_fdiv_q::ctx() const {
  6787.   return isl::ctx(isl_ast_expr_get_ctx(ptr));
  6788. }
  6789.  
  6790. inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_fdiv_q &obj)
  6791. {
  6792.   char *str = isl_ast_expr_to_str(obj.get());
  6793.   if (!str) {
  6794.     os.setstate(std::ios_base::badbit);
  6795.     return os;
  6796.   }
  6797.   os << str;
  6798.   free(str);
  6799.   return os;
  6800. }
  6801.  
  6802. // implementations for isl::ast_expr_op_ge
  6803. ast_expr_op_ge::ast_expr_op_ge()
  6804.     : ast_expr_op() {}
  6805.  
  6806. ast_expr_op_ge::ast_expr_op_ge(const ast_expr_op_ge &obj)
  6807.     : ast_expr_op(obj)
  6808. {
  6809. }
  6810.  
  6811. ast_expr_op_ge::ast_expr_op_ge(__isl_take isl_ast_expr *ptr)
  6812.     : ast_expr_op(ptr) {}
  6813.  
  6814. ast_expr_op_ge &ast_expr_op_ge::operator=(ast_expr_op_ge obj) {
  6815.   std::swap(this->ptr, obj.ptr);
  6816.   return *this;
  6817. }
  6818.  
  6819. isl::ctx ast_expr_op_ge::ctx() const {
  6820.   return isl::ctx(isl_ast_expr_get_ctx(ptr));
  6821. }
  6822.  
  6823. inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_ge &obj)
  6824. {
  6825.   char *str = isl_ast_expr_to_str(obj.get());
  6826.   if (!str) {
  6827.     os.setstate(std::ios_base::badbit);
  6828.     return os;
  6829.   }
  6830.   os << str;
  6831.   free(str);
  6832.   return os;
  6833. }
  6834.  
  6835. // implementations for isl::ast_expr_op_gt
  6836. ast_expr_op_gt::ast_expr_op_gt()
  6837.     : ast_expr_op() {}
  6838.  
  6839. ast_expr_op_gt::ast_expr_op_gt(const ast_expr_op_gt &obj)
  6840.     : ast_expr_op(obj)
  6841. {
  6842. }
  6843.  
  6844. ast_expr_op_gt::ast_expr_op_gt(__isl_take isl_ast_expr *ptr)
  6845.     : ast_expr_op(ptr) {}
  6846.  
  6847. ast_expr_op_gt &ast_expr_op_gt::operator=(ast_expr_op_gt obj) {
  6848.   std::swap(this->ptr, obj.ptr);
  6849.   return *this;
  6850. }
  6851.  
  6852. isl::ctx ast_expr_op_gt::ctx() const {
  6853.   return isl::ctx(isl_ast_expr_get_ctx(ptr));
  6854. }
  6855.  
  6856. inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_gt &obj)
  6857. {
  6858.   char *str = isl_ast_expr_to_str(obj.get());
  6859.   if (!str) {
  6860.     os.setstate(std::ios_base::badbit);
  6861.     return os;
  6862.   }
  6863.   os << str;
  6864.   free(str);
  6865.   return os;
  6866. }
  6867.  
  6868. // implementations for isl::ast_expr_op_le
  6869. ast_expr_op_le::ast_expr_op_le()
  6870.     : ast_expr_op() {}
  6871.  
  6872. ast_expr_op_le::ast_expr_op_le(const ast_expr_op_le &obj)
  6873.     : ast_expr_op(obj)
  6874. {
  6875. }
  6876.  
  6877. ast_expr_op_le::ast_expr_op_le(__isl_take isl_ast_expr *ptr)
  6878.     : ast_expr_op(ptr) {}
  6879.  
  6880. ast_expr_op_le &ast_expr_op_le::operator=(ast_expr_op_le obj) {
  6881.   std::swap(this->ptr, obj.ptr);
  6882.   return *this;
  6883. }
  6884.  
  6885. isl::ctx ast_expr_op_le::ctx() const {
  6886.   return isl::ctx(isl_ast_expr_get_ctx(ptr));
  6887. }
  6888.  
  6889. inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_le &obj)
  6890. {
  6891.   char *str = isl_ast_expr_to_str(obj.get());
  6892.   if (!str) {
  6893.     os.setstate(std::ios_base::badbit);
  6894.     return os;
  6895.   }
  6896.   os << str;
  6897.   free(str);
  6898.   return os;
  6899. }
  6900.  
  6901. // implementations for isl::ast_expr_op_lt
  6902. ast_expr_op_lt::ast_expr_op_lt()
  6903.     : ast_expr_op() {}
  6904.  
  6905. ast_expr_op_lt::ast_expr_op_lt(const ast_expr_op_lt &obj)
  6906.     : ast_expr_op(obj)
  6907. {
  6908. }
  6909.  
  6910. ast_expr_op_lt::ast_expr_op_lt(__isl_take isl_ast_expr *ptr)
  6911.     : ast_expr_op(ptr) {}
  6912.  
  6913. ast_expr_op_lt &ast_expr_op_lt::operator=(ast_expr_op_lt obj) {
  6914.   std::swap(this->ptr, obj.ptr);
  6915.   return *this;
  6916. }
  6917.  
  6918. isl::ctx ast_expr_op_lt::ctx() const {
  6919.   return isl::ctx(isl_ast_expr_get_ctx(ptr));
  6920. }
  6921.  
  6922. inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_lt &obj)
  6923. {
  6924.   char *str = isl_ast_expr_to_str(obj.get());
  6925.   if (!str) {
  6926.     os.setstate(std::ios_base::badbit);
  6927.     return os;
  6928.   }
  6929.   os << str;
  6930.   free(str);
  6931.   return os;
  6932. }
  6933.  
  6934. // implementations for isl::ast_expr_op_max
  6935. ast_expr_op_max::ast_expr_op_max()
  6936.     : ast_expr_op() {}
  6937.  
  6938. ast_expr_op_max::ast_expr_op_max(const ast_expr_op_max &obj)
  6939.     : ast_expr_op(obj)
  6940. {
  6941. }
  6942.  
  6943. ast_expr_op_max::ast_expr_op_max(__isl_take isl_ast_expr *ptr)
  6944.     : ast_expr_op(ptr) {}
  6945.  
  6946. ast_expr_op_max &ast_expr_op_max::operator=(ast_expr_op_max obj) {
  6947.   std::swap(this->ptr, obj.ptr);
  6948.   return *this;
  6949. }
  6950.  
  6951. isl::ctx ast_expr_op_max::ctx() const {
  6952.   return isl::ctx(isl_ast_expr_get_ctx(ptr));
  6953. }
  6954.  
  6955. inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_max &obj)
  6956. {
  6957.   char *str = isl_ast_expr_to_str(obj.get());
  6958.   if (!str) {
  6959.     os.setstate(std::ios_base::badbit);
  6960.     return os;
  6961.   }
  6962.   os << str;
  6963.   free(str);
  6964.   return os;
  6965. }
  6966.  
  6967. // implementations for isl::ast_expr_op_member
  6968. ast_expr_op_member::ast_expr_op_member()
  6969.     : ast_expr_op() {}
  6970.  
  6971. ast_expr_op_member::ast_expr_op_member(const ast_expr_op_member &obj)
  6972.     : ast_expr_op(obj)
  6973. {
  6974. }
  6975.  
  6976. ast_expr_op_member::ast_expr_op_member(__isl_take isl_ast_expr *ptr)
  6977.     : ast_expr_op(ptr) {}
  6978.  
  6979. ast_expr_op_member &ast_expr_op_member::operator=(ast_expr_op_member obj) {
  6980.   std::swap(this->ptr, obj.ptr);
  6981.   return *this;
  6982. }
  6983.  
  6984. isl::ctx ast_expr_op_member::ctx() const {
  6985.   return isl::ctx(isl_ast_expr_get_ctx(ptr));
  6986. }
  6987.  
  6988. inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_member &obj)
  6989. {
  6990.   char *str = isl_ast_expr_to_str(obj.get());
  6991.   if (!str) {
  6992.     os.setstate(std::ios_base::badbit);
  6993.     return os;
  6994.   }
  6995.   os << str;
  6996.   free(str);
  6997.   return os;
  6998. }
  6999.  
  7000. // implementations for isl::ast_expr_op_min
  7001. ast_expr_op_min::ast_expr_op_min()
  7002.     : ast_expr_op() {}
  7003.  
  7004. ast_expr_op_min::ast_expr_op_min(const ast_expr_op_min &obj)
  7005.     : ast_expr_op(obj)
  7006. {
  7007. }
  7008.  
  7009. ast_expr_op_min::ast_expr_op_min(__isl_take isl_ast_expr *ptr)
  7010.     : ast_expr_op(ptr) {}
  7011.  
  7012. ast_expr_op_min &ast_expr_op_min::operator=(ast_expr_op_min obj) {
  7013.   std::swap(this->ptr, obj.ptr);
  7014.   return *this;
  7015. }
  7016.  
  7017. isl::ctx ast_expr_op_min::ctx() const {
  7018.   return isl::ctx(isl_ast_expr_get_ctx(ptr));
  7019. }
  7020.  
  7021. inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_min &obj)
  7022. {
  7023.   char *str = isl_ast_expr_to_str(obj.get());
  7024.   if (!str) {
  7025.     os.setstate(std::ios_base::badbit);
  7026.     return os;
  7027.   }
  7028.   os << str;
  7029.   free(str);
  7030.   return os;
  7031. }
  7032.  
  7033. // implementations for isl::ast_expr_op_minus
  7034. ast_expr_op_minus::ast_expr_op_minus()
  7035.     : ast_expr_op() {}
  7036.  
  7037. ast_expr_op_minus::ast_expr_op_minus(const ast_expr_op_minus &obj)
  7038.     : ast_expr_op(obj)
  7039. {
  7040. }
  7041.  
  7042. ast_expr_op_minus::ast_expr_op_minus(__isl_take isl_ast_expr *ptr)
  7043.     : ast_expr_op(ptr) {}
  7044.  
  7045. ast_expr_op_minus &ast_expr_op_minus::operator=(ast_expr_op_minus obj) {
  7046.   std::swap(this->ptr, obj.ptr);
  7047.   return *this;
  7048. }
  7049.  
  7050. isl::ctx ast_expr_op_minus::ctx() const {
  7051.   return isl::ctx(isl_ast_expr_get_ctx(ptr));
  7052. }
  7053.  
  7054. inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_minus &obj)
  7055. {
  7056.   char *str = isl_ast_expr_to_str(obj.get());
  7057.   if (!str) {
  7058.     os.setstate(std::ios_base::badbit);
  7059.     return os;
  7060.   }
  7061.   os << str;
  7062.   free(str);
  7063.   return os;
  7064. }
  7065.  
  7066. // implementations for isl::ast_expr_op_mul
  7067. ast_expr_op_mul::ast_expr_op_mul()
  7068.     : ast_expr_op() {}
  7069.  
  7070. ast_expr_op_mul::ast_expr_op_mul(const ast_expr_op_mul &obj)
  7071.     : ast_expr_op(obj)
  7072. {
  7073. }
  7074.  
  7075. ast_expr_op_mul::ast_expr_op_mul(__isl_take isl_ast_expr *ptr)
  7076.     : ast_expr_op(ptr) {}
  7077.  
  7078. ast_expr_op_mul &ast_expr_op_mul::operator=(ast_expr_op_mul obj) {
  7079.   std::swap(this->ptr, obj.ptr);
  7080.   return *this;
  7081. }
  7082.  
  7083. isl::ctx ast_expr_op_mul::ctx() const {
  7084.   return isl::ctx(isl_ast_expr_get_ctx(ptr));
  7085. }
  7086.  
  7087. inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_mul &obj)
  7088. {
  7089.   char *str = isl_ast_expr_to_str(obj.get());
  7090.   if (!str) {
  7091.     os.setstate(std::ios_base::badbit);
  7092.     return os;
  7093.   }
  7094.   os << str;
  7095.   free(str);
  7096.   return os;
  7097. }
  7098.  
  7099. // implementations for isl::ast_expr_op_or
  7100. ast_expr_op_or::ast_expr_op_or()
  7101.     : ast_expr_op() {}
  7102.  
  7103. ast_expr_op_or::ast_expr_op_or(const ast_expr_op_or &obj)
  7104.     : ast_expr_op(obj)
  7105. {
  7106. }
  7107.  
  7108. ast_expr_op_or::ast_expr_op_or(__isl_take isl_ast_expr *ptr)
  7109.     : ast_expr_op(ptr) {}
  7110.  
  7111. ast_expr_op_or &ast_expr_op_or::operator=(ast_expr_op_or obj) {
  7112.   std::swap(this->ptr, obj.ptr);
  7113.   return *this;
  7114. }
  7115.  
  7116. isl::ctx ast_expr_op_or::ctx() const {
  7117.   return isl::ctx(isl_ast_expr_get_ctx(ptr));
  7118. }
  7119.  
  7120. inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_or &obj)
  7121. {
  7122.   char *str = isl_ast_expr_to_str(obj.get());
  7123.   if (!str) {
  7124.     os.setstate(std::ios_base::badbit);
  7125.     return os;
  7126.   }
  7127.   os << str;
  7128.   free(str);
  7129.   return os;
  7130. }
  7131.  
  7132. // implementations for isl::ast_expr_op_or_else
  7133. ast_expr_op_or_else::ast_expr_op_or_else()
  7134.     : ast_expr_op() {}
  7135.  
  7136. ast_expr_op_or_else::ast_expr_op_or_else(const ast_expr_op_or_else &obj)
  7137.     : ast_expr_op(obj)
  7138. {
  7139. }
  7140.  
  7141. ast_expr_op_or_else::ast_expr_op_or_else(__isl_take isl_ast_expr *ptr)
  7142.     : ast_expr_op(ptr) {}
  7143.  
  7144. ast_expr_op_or_else &ast_expr_op_or_else::operator=(ast_expr_op_or_else obj) {
  7145.   std::swap(this->ptr, obj.ptr);
  7146.   return *this;
  7147. }
  7148.  
  7149. isl::ctx ast_expr_op_or_else::ctx() const {
  7150.   return isl::ctx(isl_ast_expr_get_ctx(ptr));
  7151. }
  7152.  
  7153. inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_or_else &obj)
  7154. {
  7155.   char *str = isl_ast_expr_to_str(obj.get());
  7156.   if (!str) {
  7157.     os.setstate(std::ios_base::badbit);
  7158.     return os;
  7159.   }
  7160.   os << str;
  7161.   free(str);
  7162.   return os;
  7163. }
  7164.  
  7165. // implementations for isl::ast_expr_op_pdiv_q
  7166. ast_expr_op_pdiv_q::ast_expr_op_pdiv_q()
  7167.     : ast_expr_op() {}
  7168.  
  7169. ast_expr_op_pdiv_q::ast_expr_op_pdiv_q(const ast_expr_op_pdiv_q &obj)
  7170.     : ast_expr_op(obj)
  7171. {
  7172. }
  7173.  
  7174. ast_expr_op_pdiv_q::ast_expr_op_pdiv_q(__isl_take isl_ast_expr *ptr)
  7175.     : ast_expr_op(ptr) {}
  7176.  
  7177. ast_expr_op_pdiv_q &ast_expr_op_pdiv_q::operator=(ast_expr_op_pdiv_q obj) {
  7178.   std::swap(this->ptr, obj.ptr);
  7179.   return *this;
  7180. }
  7181.  
  7182. isl::ctx ast_expr_op_pdiv_q::ctx() const {
  7183.   return isl::ctx(isl_ast_expr_get_ctx(ptr));
  7184. }
  7185.  
  7186. inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_pdiv_q &obj)
  7187. {
  7188.   char *str = isl_ast_expr_to_str(obj.get());
  7189.   if (!str) {
  7190.     os.setstate(std::ios_base::badbit);
  7191.     return os;
  7192.   }
  7193.   os << str;
  7194.   free(str);
  7195.   return os;
  7196. }
  7197.  
  7198. // implementations for isl::ast_expr_op_pdiv_r
  7199. ast_expr_op_pdiv_r::ast_expr_op_pdiv_r()
  7200.     : ast_expr_op() {}
  7201.  
  7202. ast_expr_op_pdiv_r::ast_expr_op_pdiv_r(const ast_expr_op_pdiv_r &obj)
  7203.     : ast_expr_op(obj)
  7204. {
  7205. }
  7206.  
  7207. ast_expr_op_pdiv_r::ast_expr_op_pdiv_r(__isl_take isl_ast_expr *ptr)
  7208.     : ast_expr_op(ptr) {}
  7209.  
  7210. ast_expr_op_pdiv_r &ast_expr_op_pdiv_r::operator=(ast_expr_op_pdiv_r obj) {
  7211.   std::swap(this->ptr, obj.ptr);
  7212.   return *this;
  7213. }
  7214.  
  7215. isl::ctx ast_expr_op_pdiv_r::ctx() const {
  7216.   return isl::ctx(isl_ast_expr_get_ctx(ptr));
  7217. }
  7218.  
  7219. inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_pdiv_r &obj)
  7220. {
  7221.   char *str = isl_ast_expr_to_str(obj.get());
  7222.   if (!str) {
  7223.     os.setstate(std::ios_base::badbit);
  7224.     return os;
  7225.   }
  7226.   os << str;
  7227.   free(str);
  7228.   return os;
  7229. }
  7230.  
  7231. // implementations for isl::ast_expr_op_select
  7232. ast_expr_op_select::ast_expr_op_select()
  7233.     : ast_expr_op() {}
  7234.  
  7235. ast_expr_op_select::ast_expr_op_select(const ast_expr_op_select &obj)
  7236.     : ast_expr_op(obj)
  7237. {
  7238. }
  7239.  
  7240. ast_expr_op_select::ast_expr_op_select(__isl_take isl_ast_expr *ptr)
  7241.     : ast_expr_op(ptr) {}
  7242.  
  7243. ast_expr_op_select &ast_expr_op_select::operator=(ast_expr_op_select obj) {
  7244.   std::swap(this->ptr, obj.ptr);
  7245.   return *this;
  7246. }
  7247.  
  7248. isl::ctx ast_expr_op_select::ctx() const {
  7249.   return isl::ctx(isl_ast_expr_get_ctx(ptr));
  7250. }
  7251.  
  7252. inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_select &obj)
  7253. {
  7254.   char *str = isl_ast_expr_to_str(obj.get());
  7255.   if (!str) {
  7256.     os.setstate(std::ios_base::badbit);
  7257.     return os;
  7258.   }
  7259.   os << str;
  7260.   free(str);
  7261.   return os;
  7262. }
  7263.  
  7264. // implementations for isl::ast_expr_op_sub
  7265. ast_expr_op_sub::ast_expr_op_sub()
  7266.     : ast_expr_op() {}
  7267.  
  7268. ast_expr_op_sub::ast_expr_op_sub(const ast_expr_op_sub &obj)
  7269.     : ast_expr_op(obj)
  7270. {
  7271. }
  7272.  
  7273. ast_expr_op_sub::ast_expr_op_sub(__isl_take isl_ast_expr *ptr)
  7274.     : ast_expr_op(ptr) {}
  7275.  
  7276. ast_expr_op_sub &ast_expr_op_sub::operator=(ast_expr_op_sub obj) {
  7277.   std::swap(this->ptr, obj.ptr);
  7278.   return *this;
  7279. }
  7280.  
  7281. isl::ctx ast_expr_op_sub::ctx() const {
  7282.   return isl::ctx(isl_ast_expr_get_ctx(ptr));
  7283. }
  7284.  
  7285. inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_sub &obj)
  7286. {
  7287.   char *str = isl_ast_expr_to_str(obj.get());
  7288.   if (!str) {
  7289.     os.setstate(std::ios_base::badbit);
  7290.     return os;
  7291.   }
  7292.   os << str;
  7293.   free(str);
  7294.   return os;
  7295. }
  7296.  
  7297. // implementations for isl::ast_expr_op_zdiv_r
  7298. ast_expr_op_zdiv_r::ast_expr_op_zdiv_r()
  7299.     : ast_expr_op() {}
  7300.  
  7301. ast_expr_op_zdiv_r::ast_expr_op_zdiv_r(const ast_expr_op_zdiv_r &obj)
  7302.     : ast_expr_op(obj)
  7303. {
  7304. }
  7305.  
  7306. ast_expr_op_zdiv_r::ast_expr_op_zdiv_r(__isl_take isl_ast_expr *ptr)
  7307.     : ast_expr_op(ptr) {}
  7308.  
  7309. ast_expr_op_zdiv_r &ast_expr_op_zdiv_r::operator=(ast_expr_op_zdiv_r obj) {
  7310.   std::swap(this->ptr, obj.ptr);
  7311.   return *this;
  7312. }
  7313.  
  7314. isl::ctx ast_expr_op_zdiv_r::ctx() const {
  7315.   return isl::ctx(isl_ast_expr_get_ctx(ptr));
  7316. }
  7317.  
  7318. inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_zdiv_r &obj)
  7319. {
  7320.   char *str = isl_ast_expr_to_str(obj.get());
  7321.   if (!str) {
  7322.     os.setstate(std::ios_base::badbit);
  7323.     return os;
  7324.   }
  7325.   os << str;
  7326.   free(str);
  7327.   return os;
  7328. }
  7329.  
  7330. // implementations for isl::ast_node
  7331. ast_node manage(__isl_take isl_ast_node *ptr) {
  7332.   return ast_node(ptr);
  7333. }
  7334. ast_node manage_copy(__isl_keep isl_ast_node *ptr) {
  7335.   ptr = isl_ast_node_copy(ptr);
  7336.   return ast_node(ptr);
  7337. }
  7338.  
  7339. ast_node::ast_node()
  7340.     : ptr(nullptr) {}
  7341.  
  7342. ast_node::ast_node(const ast_node &obj)
  7343.     : ptr(nullptr)
  7344. {
  7345.   ptr = obj.copy();
  7346. }
  7347.  
  7348. ast_node::ast_node(__isl_take isl_ast_node *ptr)
  7349.     : ptr(ptr) {}
  7350.  
  7351. ast_node &ast_node::operator=(ast_node obj) {
  7352.   std::swap(this->ptr, obj.ptr);
  7353.   return *this;
  7354. }
  7355.  
  7356. ast_node::~ast_node() {
  7357.   if (ptr)
  7358.     isl_ast_node_free(ptr);
  7359. }
  7360.  
  7361. __isl_give isl_ast_node *ast_node::copy() const & {
  7362.   return isl_ast_node_copy(ptr);
  7363. }
  7364.  
  7365. __isl_keep isl_ast_node *ast_node::get() const {
  7366.   return ptr;
  7367. }
  7368.  
  7369. __isl_give isl_ast_node *ast_node::release() {
  7370.   isl_ast_node *tmp = ptr;
  7371.   ptr = nullptr;
  7372.   return tmp;
  7373. }
  7374.  
  7375. bool ast_node::is_null() const {
  7376.   return ptr == nullptr;
  7377. }
  7378.  
  7379. template <typename T, typename>
  7380. boolean ast_node::isa_type(T subtype) const
  7381. {
  7382.   if (is_null())
  7383.     return boolean();
  7384.   return isl_ast_node_get_type(get()) == subtype;
  7385. }
  7386. template <class T>
  7387. boolean ast_node::isa() const
  7388. {
  7389.   return isa_type<decltype(T::type)>(T::type);
  7390. }
  7391. template <class T>
  7392. T ast_node::as() const
  7393. {
  7394.  if (isa<T>().is_false())
  7395.     isl_die(ctx().get(), isl_error_invalid, "not an object of the requested subtype", return T());
  7396.   return T(copy());
  7397. }
  7398.  
  7399. isl::ctx ast_node::ctx() const {
  7400.   return isl::ctx(isl_ast_node_get_ctx(ptr));
  7401. }
  7402.  
  7403. isl::id ast_node::annotation() const
  7404. {
  7405.   auto res = isl_ast_node_get_annotation(get());
  7406.   return manage(res);
  7407. }
  7408.  
  7409. isl::id ast_node::get_annotation() const
  7410. {
  7411.   return annotation();
  7412. }
  7413.  
  7414. std::string ast_node::to_C_str() const
  7415. {
  7416.   auto res = isl_ast_node_to_C_str(get());
  7417.   std::string tmp(res);
  7418.   free(res);
  7419.   return tmp;
  7420. }
  7421.  
  7422. isl::ast_node_list ast_node::to_list() const
  7423. {
  7424.   auto res = isl_ast_node_to_list(copy());
  7425.   return manage(res);
  7426. }
  7427.  
  7428. inline std::ostream &operator<<(std::ostream &os, const ast_node &obj)
  7429. {
  7430.   char *str = isl_ast_node_to_str(obj.get());
  7431.   if (!str) {
  7432.     os.setstate(std::ios_base::badbit);
  7433.     return os;
  7434.   }
  7435.   os << str;
  7436.   free(str);
  7437.   return os;
  7438. }
  7439.  
  7440. // implementations for isl::ast_node_block
  7441. ast_node_block::ast_node_block()
  7442.     : ast_node() {}
  7443.  
  7444. ast_node_block::ast_node_block(const ast_node_block &obj)
  7445.     : ast_node(obj)
  7446. {
  7447. }
  7448.  
  7449. ast_node_block::ast_node_block(__isl_take isl_ast_node *ptr)
  7450.     : ast_node(ptr) {}
  7451.  
  7452. ast_node_block &ast_node_block::operator=(ast_node_block obj) {
  7453.   std::swap(this->ptr, obj.ptr);
  7454.   return *this;
  7455. }
  7456.  
  7457. isl::ctx ast_node_block::ctx() const {
  7458.   return isl::ctx(isl_ast_node_get_ctx(ptr));
  7459. }
  7460.  
  7461. isl::ast_node_list ast_node_block::children() const
  7462. {
  7463.   auto res = isl_ast_node_block_get_children(get());
  7464.   return manage(res);
  7465. }
  7466.  
  7467. isl::ast_node_list ast_node_block::get_children() const
  7468. {
  7469.   return children();
  7470. }
  7471.  
  7472. inline std::ostream &operator<<(std::ostream &os, const ast_node_block &obj)
  7473. {
  7474.   char *str = isl_ast_node_to_str(obj.get());
  7475.   if (!str) {
  7476.     os.setstate(std::ios_base::badbit);
  7477.     return os;
  7478.   }
  7479.   os << str;
  7480.   free(str);
  7481.   return os;
  7482. }
  7483.  
  7484. // implementations for isl::ast_node_for
  7485. ast_node_for::ast_node_for()
  7486.     : ast_node() {}
  7487.  
  7488. ast_node_for::ast_node_for(const ast_node_for &obj)
  7489.     : ast_node(obj)
  7490. {
  7491. }
  7492.  
  7493. ast_node_for::ast_node_for(__isl_take isl_ast_node *ptr)
  7494.     : ast_node(ptr) {}
  7495.  
  7496. ast_node_for &ast_node_for::operator=(ast_node_for obj) {
  7497.   std::swap(this->ptr, obj.ptr);
  7498.   return *this;
  7499. }
  7500.  
  7501. isl::ctx ast_node_for::ctx() const {
  7502.   return isl::ctx(isl_ast_node_get_ctx(ptr));
  7503. }
  7504.  
  7505. isl::ast_node ast_node_for::body() const
  7506. {
  7507.   auto res = isl_ast_node_for_get_body(get());
  7508.   return manage(res);
  7509. }
  7510.  
  7511. isl::ast_node ast_node_for::get_body() const
  7512. {
  7513.   return body();
  7514. }
  7515.  
  7516. isl::ast_expr ast_node_for::cond() const
  7517. {
  7518.   auto res = isl_ast_node_for_get_cond(get());
  7519.   return manage(res);
  7520. }
  7521.  
  7522. isl::ast_expr ast_node_for::get_cond() const
  7523. {
  7524.   return cond();
  7525. }
  7526.  
  7527. isl::ast_expr ast_node_for::inc() const
  7528. {
  7529.   auto res = isl_ast_node_for_get_inc(get());
  7530.   return manage(res);
  7531. }
  7532.  
  7533. isl::ast_expr ast_node_for::get_inc() const
  7534. {
  7535.   return inc();
  7536. }
  7537.  
  7538. isl::ast_expr ast_node_for::init() const
  7539. {
  7540.   auto res = isl_ast_node_for_get_init(get());
  7541.   return manage(res);
  7542. }
  7543.  
  7544. isl::ast_expr ast_node_for::get_init() const
  7545. {
  7546.   return init();
  7547. }
  7548.  
  7549. boolean ast_node_for::is_degenerate() const
  7550. {
  7551.   auto res = isl_ast_node_for_is_degenerate(get());
  7552.   return manage(res);
  7553. }
  7554.  
  7555. isl::ast_expr ast_node_for::iterator() const
  7556. {
  7557.   auto res = isl_ast_node_for_get_iterator(get());
  7558.   return manage(res);
  7559. }
  7560.  
  7561. isl::ast_expr ast_node_for::get_iterator() const
  7562. {
  7563.   return iterator();
  7564. }
  7565.  
  7566. inline std::ostream &operator<<(std::ostream &os, const ast_node_for &obj)
  7567. {
  7568.   char *str = isl_ast_node_to_str(obj.get());
  7569.   if (!str) {
  7570.     os.setstate(std::ios_base::badbit);
  7571.     return os;
  7572.   }
  7573.   os << str;
  7574.   free(str);
  7575.   return os;
  7576. }
  7577.  
  7578. // implementations for isl::ast_node_if
  7579. ast_node_if::ast_node_if()
  7580.     : ast_node() {}
  7581.  
  7582. ast_node_if::ast_node_if(const ast_node_if &obj)
  7583.     : ast_node(obj)
  7584. {
  7585. }
  7586.  
  7587. ast_node_if::ast_node_if(__isl_take isl_ast_node *ptr)
  7588.     : ast_node(ptr) {}
  7589.  
  7590. ast_node_if &ast_node_if::operator=(ast_node_if obj) {
  7591.   std::swap(this->ptr, obj.ptr);
  7592.   return *this;
  7593. }
  7594.  
  7595. isl::ctx ast_node_if::ctx() const {
  7596.   return isl::ctx(isl_ast_node_get_ctx(ptr));
  7597. }
  7598.  
  7599. isl::ast_expr ast_node_if::cond() const
  7600. {
  7601.   auto res = isl_ast_node_if_get_cond(get());
  7602.   return manage(res);
  7603. }
  7604.  
  7605. isl::ast_expr ast_node_if::get_cond() const
  7606. {
  7607.   return cond();
  7608. }
  7609.  
  7610. isl::ast_node ast_node_if::else_node() const
  7611. {
  7612.   auto res = isl_ast_node_if_get_else_node(get());
  7613.   return manage(res);
  7614. }
  7615.  
  7616. isl::ast_node ast_node_if::get_else_node() const
  7617. {
  7618.   return else_node();
  7619. }
  7620.  
  7621. boolean ast_node_if::has_else_node() const
  7622. {
  7623.   auto res = isl_ast_node_if_has_else_node(get());
  7624.   return manage(res);
  7625. }
  7626.  
  7627. isl::ast_node ast_node_if::then_node() const
  7628. {
  7629.   auto res = isl_ast_node_if_get_then_node(get());
  7630.   return manage(res);
  7631. }
  7632.  
  7633. isl::ast_node ast_node_if::get_then_node() const
  7634. {
  7635.   return then_node();
  7636. }
  7637.  
  7638. inline std::ostream &operator<<(std::ostream &os, const ast_node_if &obj)
  7639. {
  7640.   char *str = isl_ast_node_to_str(obj.get());
  7641.   if (!str) {
  7642.     os.setstate(std::ios_base::badbit);
  7643.     return os;
  7644.   }
  7645.   os << str;
  7646.   free(str);
  7647.   return os;
  7648. }
  7649.  
  7650. // implementations for isl::ast_node_list
  7651. ast_node_list manage(__isl_take isl_ast_node_list *ptr) {
  7652.   return ast_node_list(ptr);
  7653. }
  7654. ast_node_list manage_copy(__isl_keep isl_ast_node_list *ptr) {
  7655.   ptr = isl_ast_node_list_copy(ptr);
  7656.   return ast_node_list(ptr);
  7657. }
  7658.  
  7659. ast_node_list::ast_node_list()
  7660.     : ptr(nullptr) {}
  7661.  
  7662. ast_node_list::ast_node_list(const ast_node_list &obj)
  7663.     : ptr(nullptr)
  7664. {
  7665.   ptr = obj.copy();
  7666. }
  7667.  
  7668. ast_node_list::ast_node_list(__isl_take isl_ast_node_list *ptr)
  7669.     : ptr(ptr) {}
  7670.  
  7671. ast_node_list::ast_node_list(isl::ctx ctx, int n)
  7672. {
  7673.   auto res = isl_ast_node_list_alloc(ctx.release(), n);
  7674.   ptr = res;
  7675. }
  7676.  
  7677. ast_node_list::ast_node_list(isl::ast_node el)
  7678. {
  7679.   auto res = isl_ast_node_list_from_ast_node(el.release());
  7680.   ptr = res;
  7681. }
  7682.  
  7683. ast_node_list &ast_node_list::operator=(ast_node_list obj) {
  7684.   std::swap(this->ptr, obj.ptr);
  7685.   return *this;
  7686. }
  7687.  
  7688. ast_node_list::~ast_node_list() {
  7689.   if (ptr)
  7690.     isl_ast_node_list_free(ptr);
  7691. }
  7692.  
  7693. __isl_give isl_ast_node_list *ast_node_list::copy() const & {
  7694.   return isl_ast_node_list_copy(ptr);
  7695. }
  7696.  
  7697. __isl_keep isl_ast_node_list *ast_node_list::get() const {
  7698.   return ptr;
  7699. }
  7700.  
  7701. __isl_give isl_ast_node_list *ast_node_list::release() {
  7702.   isl_ast_node_list *tmp = ptr;
  7703.   ptr = nullptr;
  7704.   return tmp;
  7705. }
  7706.  
  7707. bool ast_node_list::is_null() const {
  7708.   return ptr == nullptr;
  7709. }
  7710.  
  7711. isl::ctx ast_node_list::ctx() const {
  7712.   return isl::ctx(isl_ast_node_list_get_ctx(ptr));
  7713. }
  7714.  
  7715. isl::ast_node_list ast_node_list::add(isl::ast_node el) const
  7716. {
  7717.   auto res = isl_ast_node_list_add(copy(), el.release());
  7718.   return manage(res);
  7719. }
  7720.  
  7721. isl::ast_node ast_node_list::at(int index) const
  7722. {
  7723.   auto res = isl_ast_node_list_get_at(get(), index);
  7724.   return manage(res);
  7725. }
  7726.  
  7727. isl::ast_node ast_node_list::get_at(int index) const
  7728. {
  7729.   return at(index);
  7730. }
  7731.  
  7732. isl::ast_node_list ast_node_list::clear() const
  7733. {
  7734.   auto res = isl_ast_node_list_clear(copy());
  7735.   return manage(res);
  7736. }
  7737.  
  7738. isl::ast_node_list ast_node_list::concat(isl::ast_node_list list2) const
  7739. {
  7740.   auto res = isl_ast_node_list_concat(copy(), list2.release());
  7741.   return manage(res);
  7742. }
  7743.  
  7744. isl::ast_node_list ast_node_list::drop(unsigned int first, unsigned int n) const
  7745. {
  7746.   auto res = isl_ast_node_list_drop(copy(), first, n);
  7747.   return manage(res);
  7748. }
  7749.  
  7750. stat ast_node_list::foreach(const std::function<stat(isl::ast_node)> &fn) const
  7751. {
  7752.   struct fn_data {
  7753.     std::function<stat(isl::ast_node)> func;
  7754.   } fn_data = { fn };
  7755.   auto fn_lambda = [](isl_ast_node *arg_0, void *arg_1) -> isl_stat {
  7756.     auto *data = static_cast<struct fn_data *>(arg_1);
  7757.     auto ret = (data->func)(manage(arg_0));
  7758.     return ret.release();
  7759.   };
  7760.   auto res = isl_ast_node_list_foreach(get(), fn_lambda, &fn_data);
  7761.   return manage(res);
  7762. }
  7763.  
  7764. isl::ast_node_list ast_node_list::insert(unsigned int pos, isl::ast_node el) const
  7765. {
  7766.   auto res = isl_ast_node_list_insert(copy(), pos, el.release());
  7767.   return manage(res);
  7768. }
  7769.  
  7770. class size ast_node_list::size() const
  7771. {
  7772.   auto res = isl_ast_node_list_size(get());
  7773.   return manage(res);
  7774. }
  7775.  
  7776. inline std::ostream &operator<<(std::ostream &os, const ast_node_list &obj)
  7777. {
  7778.   char *str = isl_ast_node_list_to_str(obj.get());
  7779.   if (!str) {
  7780.     os.setstate(std::ios_base::badbit);
  7781.     return os;
  7782.   }
  7783.   os << str;
  7784.   free(str);
  7785.   return os;
  7786. }
  7787.  
  7788. // implementations for isl::ast_node_mark
  7789. ast_node_mark::ast_node_mark()
  7790.     : ast_node() {}
  7791.  
  7792. ast_node_mark::ast_node_mark(const ast_node_mark &obj)
  7793.     : ast_node(obj)
  7794. {
  7795. }
  7796.  
  7797. ast_node_mark::ast_node_mark(__isl_take isl_ast_node *ptr)
  7798.     : ast_node(ptr) {}
  7799.  
  7800. ast_node_mark &ast_node_mark::operator=(ast_node_mark obj) {
  7801.   std::swap(this->ptr, obj.ptr);
  7802.   return *this;
  7803. }
  7804.  
  7805. isl::ctx ast_node_mark::ctx() const {
  7806.   return isl::ctx(isl_ast_node_get_ctx(ptr));
  7807. }
  7808.  
  7809. isl::id ast_node_mark::id() const
  7810. {
  7811.   auto res = isl_ast_node_mark_get_id(get());
  7812.   return manage(res);
  7813. }
  7814.  
  7815. isl::id ast_node_mark::get_id() const
  7816. {
  7817.   return id();
  7818. }
  7819.  
  7820. isl::ast_node ast_node_mark::node() const
  7821. {
  7822.   auto res = isl_ast_node_mark_get_node(get());
  7823.   return manage(res);
  7824. }
  7825.  
  7826. isl::ast_node ast_node_mark::get_node() const
  7827. {
  7828.   return node();
  7829. }
  7830.  
  7831. inline std::ostream &operator<<(std::ostream &os, const ast_node_mark &obj)
  7832. {
  7833.   char *str = isl_ast_node_to_str(obj.get());
  7834.   if (!str) {
  7835.     os.setstate(std::ios_base::badbit);
  7836.     return os;
  7837.   }
  7838.   os << str;
  7839.   free(str);
  7840.   return os;
  7841. }
  7842.  
  7843. // implementations for isl::ast_node_user
  7844. ast_node_user::ast_node_user()
  7845.     : ast_node() {}
  7846.  
  7847. ast_node_user::ast_node_user(const ast_node_user &obj)
  7848.     : ast_node(obj)
  7849. {
  7850. }
  7851.  
  7852. ast_node_user::ast_node_user(__isl_take isl_ast_node *ptr)
  7853.     : ast_node(ptr) {}
  7854.  
  7855. ast_node_user &ast_node_user::operator=(ast_node_user obj) {
  7856.   std::swap(this->ptr, obj.ptr);
  7857.   return *this;
  7858. }
  7859.  
  7860. isl::ctx ast_node_user::ctx() const {
  7861.   return isl::ctx(isl_ast_node_get_ctx(ptr));
  7862. }
  7863.  
  7864. isl::ast_expr ast_node_user::expr() const
  7865. {
  7866.   auto res = isl_ast_node_user_get_expr(get());
  7867.   return manage(res);
  7868. }
  7869.  
  7870. isl::ast_expr ast_node_user::get_expr() const
  7871. {
  7872.   return expr();
  7873. }
  7874.  
  7875. inline std::ostream &operator<<(std::ostream &os, const ast_node_user &obj)
  7876. {
  7877.   char *str = isl_ast_node_to_str(obj.get());
  7878.   if (!str) {
  7879.     os.setstate(std::ios_base::badbit);
  7880.     return os;
  7881.   }
  7882.   os << str;
  7883.   free(str);
  7884.   return os;
  7885. }
  7886.  
  7887. // implementations for isl::basic_map
  7888. basic_map manage(__isl_take isl_basic_map *ptr) {
  7889.   return basic_map(ptr);
  7890. }
  7891. basic_map manage_copy(__isl_keep isl_basic_map *ptr) {
  7892.   ptr = isl_basic_map_copy(ptr);
  7893.   return basic_map(ptr);
  7894. }
  7895.  
  7896. basic_map::basic_map()
  7897.     : ptr(nullptr) {}
  7898.  
  7899. basic_map::basic_map(const basic_map &obj)
  7900.     : ptr(nullptr)
  7901. {
  7902.   ptr = obj.copy();
  7903. }
  7904.  
  7905. basic_map::basic_map(__isl_take isl_basic_map *ptr)
  7906.     : ptr(ptr) {}
  7907.  
  7908. basic_map::basic_map(isl::ctx ctx, const std::string &str)
  7909. {
  7910.   auto res = isl_basic_map_read_from_str(ctx.release(), str.c_str());
  7911.   ptr = res;
  7912. }
  7913.  
  7914. basic_map &basic_map::operator=(basic_map obj) {
  7915.   std::swap(this->ptr, obj.ptr);
  7916.   return *this;
  7917. }
  7918.  
  7919. basic_map::~basic_map() {
  7920.   if (ptr)
  7921.     isl_basic_map_free(ptr);
  7922. }
  7923.  
  7924. __isl_give isl_basic_map *basic_map::copy() const & {
  7925.   return isl_basic_map_copy(ptr);
  7926. }
  7927.  
  7928. __isl_keep isl_basic_map *basic_map::get() const {
  7929.   return ptr;
  7930. }
  7931.  
  7932. __isl_give isl_basic_map *basic_map::release() {
  7933.   isl_basic_map *tmp = ptr;
  7934.   ptr = nullptr;
  7935.   return tmp;
  7936. }
  7937.  
  7938. bool basic_map::is_null() const {
  7939.   return ptr == nullptr;
  7940. }
  7941.  
  7942. isl::ctx basic_map::ctx() const {
  7943.   return isl::ctx(isl_basic_map_get_ctx(ptr));
  7944. }
  7945.  
  7946. isl::map basic_map::add_constraint(const isl::constraint &constraint) const
  7947. {
  7948.   return isl::map(*this).add_constraint(constraint);
  7949. }
  7950.  
  7951. isl::map basic_map::add_dims(isl::dim type, unsigned int n) const
  7952. {
  7953.   return isl::map(*this).add_dims(type, n);
  7954. }
  7955.  
  7956. isl::basic_map basic_map::affine_hull() const
  7957. {
  7958.   auto res = isl_basic_map_affine_hull(copy());
  7959.   return manage(res);
  7960. }
  7961.  
  7962. isl::map basic_map::align_params(const isl::space &model) const
  7963. {
  7964.   return isl::map(*this).align_params(model);
  7965. }
  7966.  
  7967. isl::basic_map basic_map::apply_domain(isl::basic_map bmap2) const
  7968. {
  7969.   auto res = isl_basic_map_apply_domain(copy(), bmap2.release());
  7970.   return manage(res);
  7971. }
  7972.  
  7973. isl::map basic_map::apply_domain(const isl::map &map2) const
  7974. {
  7975.   return isl::map(*this).apply_domain(map2);
  7976. }
  7977.  
  7978. isl::union_map basic_map::apply_domain(const isl::union_map &umap2) const
  7979. {
  7980.   return isl::map(*this).apply_domain(umap2);
  7981. }
  7982.  
  7983. isl::basic_map basic_map::apply_range(isl::basic_map bmap2) const
  7984. {
  7985.   auto res = isl_basic_map_apply_range(copy(), bmap2.release());
  7986.   return manage(res);
  7987. }
  7988.  
  7989. isl::map basic_map::apply_range(const isl::map &map2) const
  7990. {
  7991.   return isl::map(*this).apply_range(map2);
  7992. }
  7993.  
  7994. isl::union_map basic_map::apply_range(const isl::union_map &umap2) const
  7995. {
  7996.   return isl::map(*this).apply_range(umap2);
  7997. }
  7998.  
  7999. isl::map basic_map::as_map() const
  8000. {
  8001.   return isl::map(*this).as_map();
  8002. }
  8003.  
  8004. isl::multi_union_pw_aff basic_map::as_multi_union_pw_aff() const
  8005. {
  8006.   return isl::map(*this).as_multi_union_pw_aff();
  8007. }
  8008.  
  8009. isl::pw_multi_aff basic_map::as_pw_multi_aff() const
  8010. {
  8011.   return isl::map(*this).as_pw_multi_aff();
  8012. }
  8013.  
  8014. isl::union_pw_multi_aff basic_map::as_union_pw_multi_aff() const
  8015. {
  8016.   return isl::map(*this).as_union_pw_multi_aff();
  8017. }
  8018.  
  8019. isl::basic_map_list basic_map::basic_map_list() const
  8020. {
  8021.   return isl::map(*this).basic_map_list();
  8022. }
  8023.  
  8024. isl::set basic_map::bind_domain(const isl::multi_id &tuple) const
  8025. {
  8026.   return isl::map(*this).bind_domain(tuple);
  8027. }
  8028.  
  8029. isl::set basic_map::bind_range(const isl::multi_id &tuple) const
  8030. {
  8031.   return isl::map(*this).bind_range(tuple);
  8032. }
  8033.  
  8034. boolean basic_map::can_curry() const
  8035. {
  8036.   return isl::map(*this).can_curry();
  8037. }
  8038.  
  8039. isl::map basic_map::coalesce() const
  8040. {
  8041.   return isl::map(*this).coalesce();
  8042. }
  8043.  
  8044. isl::map basic_map::complement() const
  8045. {
  8046.   return isl::map(*this).complement();
  8047. }
  8048.  
  8049. isl::union_map basic_map::compute_divs() const
  8050. {
  8051.   return isl::map(*this).compute_divs();
  8052. }
  8053.  
  8054. isl::map basic_map::curry() const
  8055. {
  8056.   return isl::map(*this).curry();
  8057. }
  8058.  
  8059. isl::basic_set basic_map::deltas() const
  8060. {
  8061.   auto res = isl_basic_map_deltas(copy());
  8062.   return manage(res);
  8063. }
  8064.  
  8065. isl::basic_map basic_map::detect_equalities() const
  8066. {
  8067.   auto res = isl_basic_map_detect_equalities(copy());
  8068.   return manage(res);
  8069. }
  8070.  
  8071. class size basic_map::dim(isl::dim type) const
  8072. {
  8073.   return isl::map(*this).dim(type);
  8074. }
  8075.  
  8076. isl::pw_aff basic_map::dim_max(int pos) const
  8077. {
  8078.   return isl::map(*this).dim_max(pos);
  8079. }
  8080.  
  8081. isl::pw_aff basic_map::dim_min(int pos) const
  8082. {
  8083.   return isl::map(*this).dim_min(pos);
  8084. }
  8085.  
  8086. isl::basic_set basic_map::domain() const
  8087. {
  8088.   auto res = isl_basic_map_domain(copy());
  8089.   return manage(res);
  8090. }
  8091.  
  8092. isl::map basic_map::domain_factor_domain() const
  8093. {
  8094.   return isl::map(*this).domain_factor_domain();
  8095. }
  8096.  
  8097. isl::map basic_map::domain_factor_range() const
  8098. {
  8099.   return isl::map(*this).domain_factor_range();
  8100. }
  8101.  
  8102. isl::map basic_map::domain_map() const
  8103. {
  8104.   return isl::map(*this).domain_map();
  8105. }
  8106.  
  8107. isl::union_pw_multi_aff basic_map::domain_map_union_pw_multi_aff() const
  8108. {
  8109.   return isl::map(*this).domain_map_union_pw_multi_aff();
  8110. }
  8111.  
  8112. isl::map basic_map::domain_product(const isl::map &map2) const
  8113. {
  8114.   return isl::map(*this).domain_product(map2);
  8115. }
  8116.  
  8117. isl::union_map basic_map::domain_product(const isl::union_map &umap2) const
  8118. {
  8119.   return isl::map(*this).domain_product(umap2);
  8120. }
  8121.  
  8122. class size basic_map::domain_tuple_dim() const
  8123. {
  8124.   return isl::map(*this).domain_tuple_dim();
  8125. }
  8126.  
  8127. isl::id basic_map::domain_tuple_id() const
  8128. {
  8129.   return isl::map(*this).domain_tuple_id();
  8130. }
  8131.  
  8132. isl::map basic_map::eq_at(const isl::multi_pw_aff &mpa) const
  8133. {
  8134.   return isl::map(*this).eq_at(mpa);
  8135. }
  8136.  
  8137. isl::union_map basic_map::eq_at(const isl::multi_union_pw_aff &mupa) const
  8138. {
  8139.   return isl::map(*this).eq_at(mupa);
  8140. }
  8141.  
  8142. isl::basic_map basic_map::equal(isl::space space, unsigned int n_equal)
  8143. {
  8144.   auto res = isl_basic_map_equal(space.release(), n_equal);
  8145.   return manage(res);
  8146. }
  8147.  
  8148. isl::basic_map basic_map::equate(isl::dim type1, int pos1, isl::dim type2, int pos2) const
  8149. {
  8150.   auto res = isl_basic_map_equate(copy(), static_cast<enum isl_dim_type>(type1), pos1, static_cast<enum isl_dim_type>(type2), pos2);
  8151.   return manage(res);
  8152. }
  8153.  
  8154. boolean basic_map::every_map(const std::function<boolean(isl::map)> &test) const
  8155. {
  8156.   return isl::map(*this).every_map(test);
  8157. }
  8158.  
  8159. isl::map basic_map::extract_map(const isl::space &space) const
  8160. {
  8161.   return isl::map(*this).extract_map(space);
  8162. }
  8163.  
  8164. isl::map basic_map::factor_domain() const
  8165. {
  8166.   return isl::map(*this).factor_domain();
  8167. }
  8168.  
  8169. isl::map basic_map::factor_range() const
  8170. {
  8171.   return isl::map(*this).factor_range();
  8172. }
  8173.  
  8174. isl::basic_map basic_map::fix_si(isl::dim type, unsigned int pos, int value) const
  8175. {
  8176.   auto res = isl_basic_map_fix_si(copy(), static_cast<enum isl_dim_type>(type), pos, value);
  8177.   return manage(res);
  8178. }
  8179.  
  8180. isl::basic_map basic_map::fix_val(isl::dim type, unsigned int pos, isl::val v) const
  8181. {
  8182.   auto res = isl_basic_map_fix_val(copy(), static_cast<enum isl_dim_type>(type), pos, v.release());
  8183.   return manage(res);
  8184. }
  8185.  
  8186. isl::basic_map basic_map::fix_val(isl::dim type, unsigned int pos, long v) const
  8187. {
  8188.   return this->fix_val(type, pos, isl::val(ctx(), v));
  8189. }
  8190.  
  8191. isl::union_map basic_map::fixed_power(const isl::val &exp) const
  8192. {
  8193.   return isl::map(*this).fixed_power(exp);
  8194. }
  8195.  
  8196. isl::union_map basic_map::fixed_power(long exp) const
  8197. {
  8198.   return this->fixed_power(isl::val(ctx(), exp));
  8199. }
  8200.  
  8201. isl::map basic_map::flat_range_product(const isl::map &map2) const
  8202. {
  8203.   return isl::map(*this).flat_range_product(map2);
  8204. }
  8205.  
  8206. isl::union_map basic_map::flat_range_product(const isl::union_map &umap2) const
  8207. {
  8208.   return isl::map(*this).flat_range_product(umap2);
  8209. }
  8210.  
  8211. isl::basic_map basic_map::flatten() const
  8212. {
  8213.   auto res = isl_basic_map_flatten(copy());
  8214.   return manage(res);
  8215. }
  8216.  
  8217. isl::basic_map basic_map::flatten_domain() const
  8218. {
  8219.   auto res = isl_basic_map_flatten_domain(copy());
  8220.   return manage(res);
  8221. }
  8222.  
  8223. isl::basic_map basic_map::flatten_range() const
  8224. {
  8225.   auto res = isl_basic_map_flatten_range(copy());
  8226.   return manage(res);
  8227. }
  8228.  
  8229. isl::map basic_map::floordiv_val(const isl::val &d) const
  8230. {
  8231.   return isl::map(*this).floordiv_val(d);
  8232. }
  8233.  
  8234. isl::map basic_map::floordiv_val(long d) const
  8235. {
  8236.   return this->floordiv_val(isl::val(ctx(), d));
  8237. }
  8238.  
  8239. stat basic_map::foreach_basic_map(const std::function<stat(isl::basic_map)> &fn) const
  8240. {
  8241.   return isl::map(*this).foreach_basic_map(fn);
  8242. }
  8243.  
  8244. stat basic_map::foreach_map(const std::function<stat(isl::map)> &fn) const
  8245. {
  8246.   return isl::map(*this).foreach_map(fn);
  8247. }
  8248.  
  8249. isl::basic_map basic_map::from_aff(isl::aff aff)
  8250. {
  8251.   auto res = isl_basic_map_from_aff(aff.release());
  8252.   return manage(res);
  8253. }
  8254.  
  8255. isl::basic_map basic_map::from_domain_and_range(isl::basic_set domain, isl::basic_set range)
  8256. {
  8257.   auto res = isl_basic_map_from_domain_and_range(domain.release(), range.release());
  8258.   return manage(res);
  8259. }
  8260.  
  8261. isl::basic_map basic_map::gist(isl::basic_map context) const
  8262. {
  8263.   auto res = isl_basic_map_gist(copy(), context.release());
  8264.   return manage(res);
  8265. }
  8266.  
  8267. isl::map basic_map::gist(const isl::map &context) const
  8268. {
  8269.   return isl::map(*this).gist(context);
  8270. }
  8271.  
  8272. isl::union_map basic_map::gist(const isl::union_map &context) const
  8273. {
  8274.   return isl::map(*this).gist(context);
  8275. }
  8276.  
  8277. isl::map basic_map::gist_domain(const isl::set &context) const
  8278. {
  8279.   return isl::map(*this).gist_domain(context);
  8280. }
  8281.  
  8282. isl::union_map basic_map::gist_domain(const isl::union_set &uset) const
  8283. {
  8284.   return isl::map(*this).gist_domain(uset);
  8285. }
  8286.  
  8287. isl::map basic_map::gist_params(const isl::set &context) const
  8288. {
  8289.   return isl::map(*this).gist_params(context);
  8290. }
  8291.  
  8292. isl::union_map basic_map::gist_range(const isl::union_set &uset) const
  8293. {
  8294.   return isl::map(*this).gist_range(uset);
  8295. }
  8296.  
  8297. boolean basic_map::has_domain_tuple_id() const
  8298. {
  8299.   return isl::map(*this).has_domain_tuple_id();
  8300. }
  8301.  
  8302. boolean basic_map::has_equal_space(const isl::map &map2) const
  8303. {
  8304.   return isl::map(*this).has_equal_space(map2);
  8305. }
  8306.  
  8307. boolean basic_map::has_range_tuple_id() const
  8308. {
  8309.   return isl::map(*this).has_range_tuple_id();
  8310. }
  8311.  
  8312. boolean basic_map::has_tuple_id(isl::dim type) const
  8313. {
  8314.   return isl::map(*this).has_tuple_id(type);
  8315. }
  8316.  
  8317. boolean basic_map::has_tuple_name(isl::dim type) const
  8318. {
  8319.   return isl::map(*this).has_tuple_name(type);
  8320. }
  8321.  
  8322. isl::basic_map basic_map::intersect(isl::basic_map bmap2) const
  8323. {
  8324.   auto res = isl_basic_map_intersect(copy(), bmap2.release());
  8325.   return manage(res);
  8326. }
  8327.  
  8328. isl::map basic_map::intersect(const isl::map &map2) const
  8329. {
  8330.   return isl::map(*this).intersect(map2);
  8331. }
  8332.  
  8333. isl::union_map basic_map::intersect(const isl::union_map &umap2) const
  8334. {
  8335.   return isl::map(*this).intersect(umap2);
  8336. }
  8337.  
  8338. isl::basic_map basic_map::intersect_domain(isl::basic_set bset) const
  8339. {
  8340.   auto res = isl_basic_map_intersect_domain(copy(), bset.release());
  8341.   return manage(res);
  8342. }
  8343.  
  8344. isl::map basic_map::intersect_domain(const isl::set &set) const
  8345. {
  8346.   return isl::map(*this).intersect_domain(set);
  8347. }
  8348.  
  8349. isl::union_map basic_map::intersect_domain(const isl::space &space) const
  8350. {
  8351.   return isl::map(*this).intersect_domain(space);
  8352. }
  8353.  
  8354. isl::union_map basic_map::intersect_domain(const isl::union_set &uset) const
  8355. {
  8356.   return isl::map(*this).intersect_domain(uset);
  8357. }
  8358.  
  8359. isl::basic_map basic_map::intersect_domain(const isl::point &bset) const
  8360. {
  8361.   return this->intersect_domain(isl::basic_set(bset));
  8362. }
  8363.  
  8364. isl::map basic_map::intersect_domain_factor_domain(const isl::map &factor) const
  8365. {
  8366.   return isl::map(*this).intersect_domain_factor_domain(factor);
  8367. }
  8368.  
  8369. isl::union_map basic_map::intersect_domain_factor_domain(const isl::union_map &factor) const
  8370. {
  8371.   return isl::map(*this).intersect_domain_factor_domain(factor);
  8372. }
  8373.  
  8374. isl::map basic_map::intersect_domain_factor_range(const isl::map &factor) const
  8375. {
  8376.   return isl::map(*this).intersect_domain_factor_range(factor);
  8377. }
  8378.  
  8379. isl::union_map basic_map::intersect_domain_factor_range(const isl::union_map &factor) const
  8380. {
  8381.   return isl::map(*this).intersect_domain_factor_range(factor);
  8382. }
  8383.  
  8384. isl::map basic_map::intersect_params(const isl::set &params) const
  8385. {
  8386.   return isl::map(*this).intersect_params(params);
  8387. }
  8388.  
  8389. isl::basic_map basic_map::intersect_range(isl::basic_set bset) const
  8390. {
  8391.   auto res = isl_basic_map_intersect_range(copy(), bset.release());
  8392.   return manage(res);
  8393. }
  8394.  
  8395. isl::map basic_map::intersect_range(const isl::set &set) const
  8396. {
  8397.   return isl::map(*this).intersect_range(set);
  8398. }
  8399.  
  8400. isl::union_map basic_map::intersect_range(const isl::space &space) const
  8401. {
  8402.   return isl::map(*this).intersect_range(space);
  8403. }
  8404.  
  8405. isl::union_map basic_map::intersect_range(const isl::union_set &uset) const
  8406. {
  8407.   return isl::map(*this).intersect_range(uset);
  8408. }
  8409.  
  8410. isl::basic_map basic_map::intersect_range(const isl::point &bset) const
  8411. {
  8412.   return this->intersect_range(isl::basic_set(bset));
  8413. }
  8414.  
  8415. isl::map basic_map::intersect_range_factor_domain(const isl::map &factor) const
  8416. {
  8417.   return isl::map(*this).intersect_range_factor_domain(factor);
  8418. }
  8419.  
  8420. isl::union_map basic_map::intersect_range_factor_domain(const isl::union_map &factor) const
  8421. {
  8422.   return isl::map(*this).intersect_range_factor_domain(factor);
  8423. }
  8424.  
  8425. isl::map basic_map::intersect_range_factor_range(const isl::map &factor) const
  8426. {
  8427.   return isl::map(*this).intersect_range_factor_range(factor);
  8428. }
  8429.  
  8430. isl::union_map basic_map::intersect_range_factor_range(const isl::union_map &factor) const
  8431. {
  8432.   return isl::map(*this).intersect_range_factor_range(factor);
  8433. }
  8434.  
  8435. boolean basic_map::involves_dims(isl::dim type, unsigned int first, unsigned int n) const
  8436. {
  8437.   return isl::map(*this).involves_dims(type, first, n);
  8438. }
  8439.  
  8440. boolean basic_map::is_bijective() const
  8441. {
  8442.   return isl::map(*this).is_bijective();
  8443. }
  8444.  
  8445. boolean basic_map::is_disjoint(const isl::map &map2) const
  8446. {
  8447.   return isl::map(*this).is_disjoint(map2);
  8448. }
  8449.  
  8450. boolean basic_map::is_disjoint(const isl::union_map &umap2) const
  8451. {
  8452.   return isl::map(*this).is_disjoint(umap2);
  8453. }
  8454.  
  8455. boolean basic_map::is_empty() const
  8456. {
  8457.   auto res = isl_basic_map_is_empty(get());
  8458.   return manage(res);
  8459. }
  8460.  
  8461. boolean basic_map::is_equal(const isl::basic_map &bmap2) const
  8462. {
  8463.   auto res = isl_basic_map_is_equal(get(), bmap2.get());
  8464.   return manage(res);
  8465. }
  8466.  
  8467. boolean basic_map::is_equal(const isl::map &map2) const
  8468. {
  8469.   return isl::map(*this).is_equal(map2);
  8470. }
  8471.  
  8472. boolean basic_map::is_equal(const isl::union_map &umap2) const
  8473. {
  8474.   return isl::map(*this).is_equal(umap2);
  8475. }
  8476.  
  8477. boolean basic_map::is_injective() const
  8478. {
  8479.   return isl::map(*this).is_injective();
  8480. }
  8481.  
  8482. boolean basic_map::is_single_valued() const
  8483. {
  8484.   return isl::map(*this).is_single_valued();
  8485. }
  8486.  
  8487. boolean basic_map::is_strict_subset(const isl::map &map2) const
  8488. {
  8489.   return isl::map(*this).is_strict_subset(map2);
  8490. }
  8491.  
  8492. boolean basic_map::is_strict_subset(const isl::union_map &umap2) const
  8493. {
  8494.   return isl::map(*this).is_strict_subset(umap2);
  8495. }
  8496.  
  8497. boolean basic_map::is_subset(const isl::basic_map &bmap2) const
  8498. {
  8499.   auto res = isl_basic_map_is_subset(get(), bmap2.get());
  8500.   return manage(res);
  8501. }
  8502.  
  8503. boolean basic_map::is_subset(const isl::map &map2) const
  8504. {
  8505.   return isl::map(*this).is_subset(map2);
  8506. }
  8507.  
  8508. boolean basic_map::is_subset(const isl::union_map &umap2) const
  8509. {
  8510.   return isl::map(*this).is_subset(umap2);
  8511. }
  8512.  
  8513. boolean basic_map::isa_map() const
  8514. {
  8515.   return isl::map(*this).isa_map();
  8516. }
  8517.  
  8518. isl::map basic_map::lex_ge_at(const isl::multi_pw_aff &mpa) const
  8519. {
  8520.   return isl::map(*this).lex_ge_at(mpa);
  8521. }
  8522.  
  8523. isl::map basic_map::lex_gt_at(const isl::multi_pw_aff &mpa) const
  8524. {
  8525.   return isl::map(*this).lex_gt_at(mpa);
  8526. }
  8527.  
  8528. isl::map basic_map::lex_le_at(const isl::multi_pw_aff &mpa) const
  8529. {
  8530.   return isl::map(*this).lex_le_at(mpa);
  8531. }
  8532.  
  8533. isl::map basic_map::lex_lt_at(const isl::multi_pw_aff &mpa) const
  8534. {
  8535.   return isl::map(*this).lex_lt_at(mpa);
  8536. }
  8537.  
  8538. isl::map basic_map::lexmax() const
  8539. {
  8540.   auto res = isl_basic_map_lexmax(copy());
  8541.   return manage(res);
  8542. }
  8543.  
  8544. isl::pw_multi_aff basic_map::lexmax_pw_multi_aff() const
  8545. {
  8546.   return isl::map(*this).lexmax_pw_multi_aff();
  8547. }
  8548.  
  8549. isl::map basic_map::lexmin() const
  8550. {
  8551.   auto res = isl_basic_map_lexmin(copy());
  8552.   return manage(res);
  8553. }
  8554.  
  8555. isl::pw_multi_aff basic_map::lexmin_pw_multi_aff() const
  8556. {
  8557.   return isl::map(*this).lexmin_pw_multi_aff();
  8558. }
  8559.  
  8560. isl::map basic_map::lower_bound(const isl::multi_pw_aff &lower) const
  8561. {
  8562.   return isl::map(*this).lower_bound(lower);
  8563. }
  8564.  
  8565. isl::map basic_map::lower_bound_si(isl::dim type, unsigned int pos, int value) const
  8566. {
  8567.   return isl::map(*this).lower_bound_si(type, pos, value);
  8568. }
  8569.  
  8570. isl::map_list basic_map::map_list() const
  8571. {
  8572.   return isl::map(*this).map_list();
  8573. }
  8574.  
  8575. isl::multi_pw_aff basic_map::max_multi_pw_aff() const
  8576. {
  8577.   return isl::map(*this).max_multi_pw_aff();
  8578. }
  8579.  
  8580. isl::multi_pw_aff basic_map::min_multi_pw_aff() const
  8581. {
  8582.   return isl::map(*this).min_multi_pw_aff();
  8583. }
  8584.  
  8585. isl::map basic_map::move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const
  8586. {
  8587.   return isl::map(*this).move_dims(dst_type, dst_pos, src_type, src_pos, n);
  8588. }
  8589.  
  8590. class size basic_map::n_basic_map() const
  8591. {
  8592.   return isl::map(*this).n_basic_map();
  8593. }
  8594.  
  8595. isl::map basic_map::order_lt(isl::dim type1, int pos1, isl::dim type2, int pos2) const
  8596. {
  8597.   return isl::map(*this).order_lt(type1, pos1, type2, pos2);
  8598. }
  8599.  
  8600. isl::set basic_map::params() const
  8601. {
  8602.   return isl::map(*this).params();
  8603. }
  8604.  
  8605. isl::val basic_map::plain_get_val_if_fixed(isl::dim type, unsigned int pos) const
  8606. {
  8607.   auto res = isl_basic_map_plain_get_val_if_fixed(get(), static_cast<enum isl_dim_type>(type), pos);
  8608.   return manage(res);
  8609. }
  8610.  
  8611. isl::basic_map basic_map::polyhedral_hull() const
  8612. {
  8613.   return isl::map(*this).polyhedral_hull();
  8614. }
  8615.  
  8616. isl::map basic_map::preimage_domain(const isl::multi_aff &ma) const
  8617. {
  8618.   return isl::map(*this).preimage_domain(ma);
  8619. }
  8620.  
  8621. isl::map basic_map::preimage_domain(const isl::multi_pw_aff &mpa) const
  8622. {
  8623.   return isl::map(*this).preimage_domain(mpa);
  8624. }
  8625.  
  8626. isl::map basic_map::preimage_domain(const isl::pw_multi_aff &pma) const
  8627. {
  8628.   return isl::map(*this).preimage_domain(pma);
  8629. }
  8630.  
  8631. isl::union_map basic_map::preimage_domain(const isl::union_pw_multi_aff &upma) const
  8632. {
  8633.   return isl::map(*this).preimage_domain(upma);
  8634. }
  8635.  
  8636. isl::map basic_map::preimage_range(const isl::multi_aff &ma) const
  8637. {
  8638.   return isl::map(*this).preimage_range(ma);
  8639. }
  8640.  
  8641. isl::map basic_map::preimage_range(const isl::pw_multi_aff &pma) const
  8642. {
  8643.   return isl::map(*this).preimage_range(pma);
  8644. }
  8645.  
  8646. isl::union_map basic_map::preimage_range(const isl::union_pw_multi_aff &upma) const
  8647. {
  8648.   return isl::map(*this).preimage_range(upma);
  8649. }
  8650.  
  8651. isl::map basic_map::product(const isl::map &map2) const
  8652. {
  8653.   return isl::map(*this).product(map2);
  8654. }
  8655.  
  8656. isl::union_map basic_map::product(const isl::union_map &umap2) const
  8657. {
  8658.   return isl::map(*this).product(umap2);
  8659. }
  8660.  
  8661. isl::map basic_map::project_out(isl::dim type, unsigned int first, unsigned int n) const
  8662. {
  8663.   return isl::map(*this).project_out(type, first, n);
  8664. }
  8665.  
  8666. isl::map basic_map::project_out_all_params() const
  8667. {
  8668.   return isl::map(*this).project_out_all_params();
  8669. }
  8670.  
  8671. isl::set basic_map::range() const
  8672. {
  8673.   return isl::map(*this).range();
  8674. }
  8675.  
  8676. isl::map basic_map::range_factor_domain() const
  8677. {
  8678.   return isl::map(*this).range_factor_domain();
  8679. }
  8680.  
  8681. isl::map basic_map::range_factor_range() const
  8682. {
  8683.   return isl::map(*this).range_factor_range();
  8684. }
  8685.  
  8686. isl::fixed_box basic_map::range_lattice_tile() const
  8687. {
  8688.   return isl::map(*this).range_lattice_tile();
  8689. }
  8690.  
  8691. isl::map basic_map::range_map() const
  8692. {
  8693.   return isl::map(*this).range_map();
  8694. }
  8695.  
  8696. isl::map basic_map::range_product(const isl::map &map2) const
  8697. {
  8698.   return isl::map(*this).range_product(map2);
  8699. }
  8700.  
  8701. isl::union_map basic_map::range_product(const isl::union_map &umap2) const
  8702. {
  8703.   return isl::map(*this).range_product(umap2);
  8704. }
  8705.  
  8706. isl::map basic_map::range_reverse() const
  8707. {
  8708.   return isl::map(*this).range_reverse();
  8709. }
  8710.  
  8711. isl::fixed_box basic_map::range_simple_fixed_box_hull() const
  8712. {
  8713.   return isl::map(*this).range_simple_fixed_box_hull();
  8714. }
  8715.  
  8716. class size basic_map::range_tuple_dim() const
  8717. {
  8718.   return isl::map(*this).range_tuple_dim();
  8719. }
  8720.  
  8721. isl::id basic_map::range_tuple_id() const
  8722. {
  8723.   return isl::map(*this).range_tuple_id();
  8724. }
  8725.  
  8726. isl::basic_map basic_map::reverse() const
  8727. {
  8728.   auto res = isl_basic_map_reverse(copy());
  8729.   return manage(res);
  8730. }
  8731.  
  8732. isl::basic_map basic_map::sample() const
  8733. {
  8734.   auto res = isl_basic_map_sample(copy());
  8735.   return manage(res);
  8736. }
  8737.  
  8738. isl::map basic_map::set_domain_tuple(const isl::id &id) const
  8739. {
  8740.   return isl::map(*this).set_domain_tuple(id);
  8741. }
  8742.  
  8743. isl::map basic_map::set_domain_tuple(const std::string &id) const
  8744. {
  8745.   return this->set_domain_tuple(isl::id(ctx(), id));
  8746. }
  8747.  
  8748. isl::map basic_map::set_range_tuple(const isl::id &id) const
  8749. {
  8750.   return isl::map(*this).set_range_tuple(id);
  8751. }
  8752.  
  8753. isl::map basic_map::set_range_tuple(const std::string &id) const
  8754. {
  8755.   return this->set_range_tuple(isl::id(ctx(), id));
  8756. }
  8757.  
  8758. isl::map basic_map::set_tuple_id(isl::dim type, const isl::id &id) const
  8759. {
  8760.   return isl::map(*this).set_tuple_id(type, id);
  8761. }
  8762.  
  8763. isl::map basic_map::set_tuple_id(isl::dim type, const std::string &id) const
  8764. {
  8765.   return this->set_tuple_id(type, isl::id(ctx(), id));
  8766. }
  8767.  
  8768. isl::space basic_map::space() const
  8769. {
  8770.   return isl::map(*this).space();
  8771. }
  8772.  
  8773. isl::map basic_map::subtract(const isl::map &map2) const
  8774. {
  8775.   return isl::map(*this).subtract(map2);
  8776. }
  8777.  
  8778. isl::union_map basic_map::subtract(const isl::union_map &umap2) const
  8779. {
  8780.   return isl::map(*this).subtract(umap2);
  8781. }
  8782.  
  8783. isl::union_map basic_map::subtract_domain(const isl::union_set &dom) const
  8784. {
  8785.   return isl::map(*this).subtract_domain(dom);
  8786. }
  8787.  
  8788. isl::union_map basic_map::subtract_range(const isl::union_set &dom) const
  8789. {
  8790.   return isl::map(*this).subtract_range(dom);
  8791. }
  8792.  
  8793. isl::map basic_map::sum(const isl::map &map2) const
  8794. {
  8795.   return isl::map(*this).sum(map2);
  8796. }
  8797.  
  8798. isl::basic_map_list basic_map::to_list() const
  8799. {
  8800.   auto res = isl_basic_map_to_list(copy());
  8801.   return manage(res);
  8802. }
  8803.  
  8804. isl::union_map basic_map::to_union_map() const
  8805. {
  8806.   return isl::map(*this).to_union_map();
  8807. }
  8808.  
  8809. isl::id basic_map::tuple_id(isl::dim type) const
  8810. {
  8811.   return isl::map(*this).tuple_id(type);
  8812. }
  8813.  
  8814. isl::map basic_map::uncurry() const
  8815. {
  8816.   return isl::map(*this).uncurry();
  8817. }
  8818.  
  8819. isl::map basic_map::unite(isl::basic_map bmap2) const
  8820. {
  8821.   auto res = isl_basic_map_union(copy(), bmap2.release());
  8822.   return manage(res);
  8823. }
  8824.  
  8825. isl::map basic_map::unite(const isl::map &map2) const
  8826. {
  8827.   return isl::map(*this).unite(map2);
  8828. }
  8829.  
  8830. isl::union_map basic_map::unite(const isl::union_map &umap2) const
  8831. {
  8832.   return isl::map(*this).unite(umap2);
  8833. }
  8834.  
  8835. isl::basic_map basic_map::universe(isl::space space)
  8836. {
  8837.   auto res = isl_basic_map_universe(space.release());
  8838.   return manage(res);
  8839. }
  8840.  
  8841. isl::basic_map basic_map::unshifted_simple_hull() const
  8842. {
  8843.   return isl::map(*this).unshifted_simple_hull();
  8844. }
  8845.  
  8846. isl::map basic_map::upper_bound(const isl::multi_pw_aff &upper) const
  8847. {
  8848.   return isl::map(*this).upper_bound(upper);
  8849. }
  8850.  
  8851. isl::map basic_map::upper_bound_si(isl::dim type, unsigned int pos, int value) const
  8852. {
  8853.   return isl::map(*this).upper_bound_si(type, pos, value);
  8854. }
  8855.  
  8856. isl::set basic_map::wrap() const
  8857. {
  8858.   return isl::map(*this).wrap();
  8859. }
  8860.  
  8861. isl::map basic_map::zip() const
  8862. {
  8863.   return isl::map(*this).zip();
  8864. }
  8865.  
  8866. inline std::ostream &operator<<(std::ostream &os, const basic_map &obj)
  8867. {
  8868.   char *str = isl_basic_map_to_str(obj.get());
  8869.   if (!str) {
  8870.     os.setstate(std::ios_base::badbit);
  8871.     return os;
  8872.   }
  8873.   os << str;
  8874.   free(str);
  8875.   return os;
  8876. }
  8877.  
  8878. // implementations for isl::basic_map_list
  8879. basic_map_list manage(__isl_take isl_basic_map_list *ptr) {
  8880.   return basic_map_list(ptr);
  8881. }
  8882. basic_map_list manage_copy(__isl_keep isl_basic_map_list *ptr) {
  8883.   ptr = isl_basic_map_list_copy(ptr);
  8884.   return basic_map_list(ptr);
  8885. }
  8886.  
  8887. basic_map_list::basic_map_list()
  8888.     : ptr(nullptr) {}
  8889.  
  8890. basic_map_list::basic_map_list(const basic_map_list &obj)
  8891.     : ptr(nullptr)
  8892. {
  8893.   ptr = obj.copy();
  8894. }
  8895.  
  8896. basic_map_list::basic_map_list(__isl_take isl_basic_map_list *ptr)
  8897.     : ptr(ptr) {}
  8898.  
  8899. basic_map_list::basic_map_list(isl::ctx ctx, int n)
  8900. {
  8901.   auto res = isl_basic_map_list_alloc(ctx.release(), n);
  8902.   ptr = res;
  8903. }
  8904.  
  8905. basic_map_list::basic_map_list(isl::basic_map el)
  8906. {
  8907.   auto res = isl_basic_map_list_from_basic_map(el.release());
  8908.   ptr = res;
  8909. }
  8910.  
  8911. basic_map_list &basic_map_list::operator=(basic_map_list obj) {
  8912.   std::swap(this->ptr, obj.ptr);
  8913.   return *this;
  8914. }
  8915.  
  8916. basic_map_list::~basic_map_list() {
  8917.   if (ptr)
  8918.     isl_basic_map_list_free(ptr);
  8919. }
  8920.  
  8921. __isl_give isl_basic_map_list *basic_map_list::copy() const & {
  8922.   return isl_basic_map_list_copy(ptr);
  8923. }
  8924.  
  8925. __isl_keep isl_basic_map_list *basic_map_list::get() const {
  8926.   return ptr;
  8927. }
  8928.  
  8929. __isl_give isl_basic_map_list *basic_map_list::release() {
  8930.   isl_basic_map_list *tmp = ptr;
  8931.   ptr = nullptr;
  8932.   return tmp;
  8933. }
  8934.  
  8935. bool basic_map_list::is_null() const {
  8936.   return ptr == nullptr;
  8937. }
  8938.  
  8939. isl::ctx basic_map_list::ctx() const {
  8940.   return isl::ctx(isl_basic_map_list_get_ctx(ptr));
  8941. }
  8942.  
  8943. isl::basic_map_list basic_map_list::add(isl::basic_map el) const
  8944. {
  8945.   auto res = isl_basic_map_list_add(copy(), el.release());
  8946.   return manage(res);
  8947. }
  8948.  
  8949. isl::basic_map basic_map_list::at(int index) const
  8950. {
  8951.   auto res = isl_basic_map_list_get_at(get(), index);
  8952.   return manage(res);
  8953. }
  8954.  
  8955. isl::basic_map basic_map_list::get_at(int index) const
  8956. {
  8957.   return at(index);
  8958. }
  8959.  
  8960. isl::basic_map_list basic_map_list::clear() const
  8961. {
  8962.   auto res = isl_basic_map_list_clear(copy());
  8963.   return manage(res);
  8964. }
  8965.  
  8966. isl::basic_map_list basic_map_list::concat(isl::basic_map_list list2) const
  8967. {
  8968.   auto res = isl_basic_map_list_concat(copy(), list2.release());
  8969.   return manage(res);
  8970. }
  8971.  
  8972. isl::basic_map_list basic_map_list::drop(unsigned int first, unsigned int n) const
  8973. {
  8974.   auto res = isl_basic_map_list_drop(copy(), first, n);
  8975.   return manage(res);
  8976. }
  8977.  
  8978. stat basic_map_list::foreach(const std::function<stat(isl::basic_map)> &fn) const
  8979. {
  8980.   struct fn_data {
  8981.     std::function<stat(isl::basic_map)> func;
  8982.   } fn_data = { fn };
  8983.   auto fn_lambda = [](isl_basic_map *arg_0, void *arg_1) -> isl_stat {
  8984.     auto *data = static_cast<struct fn_data *>(arg_1);
  8985.     auto ret = (data->func)(manage(arg_0));
  8986.     return ret.release();
  8987.   };
  8988.   auto res = isl_basic_map_list_foreach(get(), fn_lambda, &fn_data);
  8989.   return manage(res);
  8990. }
  8991.  
  8992. isl::basic_map_list basic_map_list::insert(unsigned int pos, isl::basic_map el) const
  8993. {
  8994.   auto res = isl_basic_map_list_insert(copy(), pos, el.release());
  8995.   return manage(res);
  8996. }
  8997.  
  8998. class size basic_map_list::size() const
  8999. {
  9000.   auto res = isl_basic_map_list_size(get());
  9001.   return manage(res);
  9002. }
  9003.  
  9004. inline std::ostream &operator<<(std::ostream &os, const basic_map_list &obj)
  9005. {
  9006.   char *str = isl_basic_map_list_to_str(obj.get());
  9007.   if (!str) {
  9008.     os.setstate(std::ios_base::badbit);
  9009.     return os;
  9010.   }
  9011.   os << str;
  9012.   free(str);
  9013.   return os;
  9014. }
  9015.  
  9016. // implementations for isl::basic_set
  9017. basic_set manage(__isl_take isl_basic_set *ptr) {
  9018.   return basic_set(ptr);
  9019. }
  9020. basic_set manage_copy(__isl_keep isl_basic_set *ptr) {
  9021.   ptr = isl_basic_set_copy(ptr);
  9022.   return basic_set(ptr);
  9023. }
  9024.  
  9025. basic_set::basic_set()
  9026.     : ptr(nullptr) {}
  9027.  
  9028. basic_set::basic_set(const basic_set &obj)
  9029.     : ptr(nullptr)
  9030. {
  9031.   ptr = obj.copy();
  9032. }
  9033.  
  9034. basic_set::basic_set(__isl_take isl_basic_set *ptr)
  9035.     : ptr(ptr) {}
  9036.  
  9037. basic_set::basic_set(isl::point pnt)
  9038. {
  9039.   auto res = isl_basic_set_from_point(pnt.release());
  9040.   ptr = res;
  9041. }
  9042.  
  9043. basic_set::basic_set(isl::ctx ctx, const std::string &str)
  9044. {
  9045.   auto res = isl_basic_set_read_from_str(ctx.release(), str.c_str());
  9046.   ptr = res;
  9047. }
  9048.  
  9049. basic_set &basic_set::operator=(basic_set obj) {
  9050.   std::swap(this->ptr, obj.ptr);
  9051.   return *this;
  9052. }
  9053.  
  9054. basic_set::~basic_set() {
  9055.   if (ptr)
  9056.     isl_basic_set_free(ptr);
  9057. }
  9058.  
  9059. __isl_give isl_basic_set *basic_set::copy() const & {
  9060.   return isl_basic_set_copy(ptr);
  9061. }
  9062.  
  9063. __isl_keep isl_basic_set *basic_set::get() const {
  9064.   return ptr;
  9065. }
  9066.  
  9067. __isl_give isl_basic_set *basic_set::release() {
  9068.   isl_basic_set *tmp = ptr;
  9069.   ptr = nullptr;
  9070.   return tmp;
  9071. }
  9072.  
  9073. bool basic_set::is_null() const {
  9074.   return ptr == nullptr;
  9075. }
  9076.  
  9077. isl::ctx basic_set::ctx() const {
  9078.   return isl::ctx(isl_basic_set_get_ctx(ptr));
  9079. }
  9080.  
  9081. isl::set basic_set::add_constraint(const isl::constraint &constraint) const
  9082. {
  9083.   return isl::set(*this).add_constraint(constraint);
  9084. }
  9085.  
  9086. isl::set basic_set::add_dims(isl::dim type, unsigned int n) const
  9087. {
  9088.   return isl::set(*this).add_dims(type, n);
  9089. }
  9090.  
  9091. isl::basic_set basic_set::affine_hull() const
  9092. {
  9093.   auto res = isl_basic_set_affine_hull(copy());
  9094.   return manage(res);
  9095. }
  9096.  
  9097. isl::set basic_set::align_params(const isl::space &model) const
  9098. {
  9099.   return isl::set(*this).align_params(model);
  9100. }
  9101.  
  9102. isl::basic_set basic_set::apply(isl::basic_map bmap) const
  9103. {
  9104.   auto res = isl_basic_set_apply(copy(), bmap.release());
  9105.   return manage(res);
  9106. }
  9107.  
  9108. isl::set basic_set::apply(const isl::map &map) const
  9109. {
  9110.   return isl::set(*this).apply(map);
  9111. }
  9112.  
  9113. isl::union_set basic_set::apply(const isl::union_map &umap) const
  9114. {
  9115.   return isl::set(*this).apply(umap);
  9116. }
  9117.  
  9118. isl::pw_multi_aff basic_set::as_pw_multi_aff() const
  9119. {
  9120.   return isl::set(*this).as_pw_multi_aff();
  9121. }
  9122.  
  9123. isl::set basic_set::as_set() const
  9124. {
  9125.   return isl::set(*this).as_set();
  9126. }
  9127.  
  9128. isl::basic_set_list basic_set::basic_set_list() const
  9129. {
  9130.   return isl::set(*this).basic_set_list();
  9131. }
  9132.  
  9133. isl::set basic_set::bind(const isl::multi_id &tuple) const
  9134. {
  9135.   return isl::set(*this).bind(tuple);
  9136. }
  9137.  
  9138. isl::set basic_set::coalesce() const
  9139. {
  9140.   return isl::set(*this).coalesce();
  9141. }
  9142.  
  9143. isl::set basic_set::complement() const
  9144. {
  9145.   return isl::set(*this).complement();
  9146. }
  9147.  
  9148. isl::union_set basic_set::compute_divs() const
  9149. {
  9150.   return isl::set(*this).compute_divs();
  9151. }
  9152.  
  9153. boolean basic_set::contains(const isl::space &space) const
  9154. {
  9155.   return isl::set(*this).contains(space);
  9156. }
  9157.  
  9158. isl::basic_set basic_set::convex_hull() const
  9159. {
  9160.   return isl::set(*this).convex_hull();
  9161. }
  9162.  
  9163. isl::basic_set basic_set::detect_equalities() const
  9164. {
  9165.   auto res = isl_basic_set_detect_equalities(copy());
  9166.   return manage(res);
  9167. }
  9168.  
  9169. class size basic_set::dim(isl::dim type) const
  9170. {
  9171.   auto res = isl_basic_set_dim(get(), static_cast<enum isl_dim_type>(type));
  9172.   return manage(res);
  9173. }
  9174.  
  9175. boolean basic_set::dim_has_any_lower_bound(isl::dim type, unsigned int pos) const
  9176. {
  9177.   return isl::set(*this).dim_has_any_lower_bound(type, pos);
  9178. }
  9179.  
  9180. isl::id basic_set::dim_id(isl::dim type, unsigned int pos) const
  9181. {
  9182.   return isl::set(*this).dim_id(type, pos);
  9183. }
  9184.  
  9185. isl::pw_aff basic_set::dim_max(int pos) const
  9186. {
  9187.   return isl::set(*this).dim_max(pos);
  9188. }
  9189.  
  9190. isl::val basic_set::dim_max_val(int pos) const
  9191. {
  9192.   auto res = isl_basic_set_dim_max_val(copy(), pos);
  9193.   return manage(res);
  9194. }
  9195.  
  9196. isl::pw_aff basic_set::dim_min(int pos) const
  9197. {
  9198.   return isl::set(*this).dim_min(pos);
  9199. }
  9200.  
  9201. isl::val basic_set::dim_min_val(int pos) const
  9202. {
  9203.   return isl::set(*this).dim_min_val(pos);
  9204. }
  9205.  
  9206. std::string basic_set::dim_name(isl::dim type, unsigned int pos) const
  9207. {
  9208.   return isl::set(*this).dim_name(type, pos);
  9209. }
  9210.  
  9211. isl::aff basic_set::div(int pos) const
  9212. {
  9213.   auto res = isl_basic_set_get_div(get(), pos);
  9214.   return manage(res);
  9215. }
  9216.  
  9217. isl::aff basic_set::get_div(int pos) const
  9218. {
  9219.   return div(pos);
  9220. }
  9221.  
  9222. isl::set basic_set::drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const
  9223. {
  9224.   return isl::set(*this).drop_constraints_involving_dims(type, first, n);
  9225. }
  9226.  
  9227. isl::set basic_set::eliminate(isl::dim type, unsigned int first, unsigned int n) const
  9228. {
  9229.   return isl::set(*this).eliminate(type, first, n);
  9230. }
  9231.  
  9232. boolean basic_set::every_set(const std::function<boolean(isl::set)> &test) const
  9233. {
  9234.   return isl::set(*this).every_set(test);
  9235. }
  9236.  
  9237. isl::set basic_set::extract_set(const isl::space &space) const
  9238. {
  9239.   return isl::set(*this).extract_set(space);
  9240. }
  9241.  
  9242. int basic_set::find_dim_by_id(isl::dim type, const isl::id &id) const
  9243. {
  9244.   return isl::set(*this).find_dim_by_id(type, id);
  9245. }
  9246.  
  9247. int basic_set::find_dim_by_id(isl::dim type, const std::string &id) const
  9248. {
  9249.   return this->find_dim_by_id(type, isl::id(ctx(), id));
  9250. }
  9251.  
  9252. isl::basic_set basic_set::fix_si(isl::dim type, unsigned int pos, int value) const
  9253. {
  9254.   auto res = isl_basic_set_fix_si(copy(), static_cast<enum isl_dim_type>(type), pos, value);
  9255.   return manage(res);
  9256. }
  9257.  
  9258. isl::basic_set basic_set::fix_val(isl::dim type, unsigned int pos, isl::val v) const
  9259. {
  9260.   auto res = isl_basic_set_fix_val(copy(), static_cast<enum isl_dim_type>(type), pos, v.release());
  9261.   return manage(res);
  9262. }
  9263.  
  9264. isl::basic_set basic_set::fix_val(isl::dim type, unsigned int pos, long v) const
  9265. {
  9266.   return this->fix_val(type, pos, isl::val(ctx(), v));
  9267. }
  9268.  
  9269. isl::basic_set basic_set::flatten() const
  9270. {
  9271.   auto res = isl_basic_set_flatten(copy());
  9272.   return manage(res);
  9273. }
  9274.  
  9275. stat basic_set::foreach_basic_set(const std::function<stat(isl::basic_set)> &fn) const
  9276. {
  9277.   return isl::set(*this).foreach_basic_set(fn);
  9278. }
  9279.  
  9280. stat basic_set::foreach_point(const std::function<stat(isl::point)> &fn) const
  9281. {
  9282.   return isl::set(*this).foreach_point(fn);
  9283. }
  9284.  
  9285. stat basic_set::foreach_set(const std::function<stat(isl::set)> &fn) const
  9286. {
  9287.   return isl::set(*this).foreach_set(fn);
  9288. }
  9289.  
  9290. isl::basic_set basic_set::gist(isl::basic_set context) const
  9291. {
  9292.   auto res = isl_basic_set_gist(copy(), context.release());
  9293.   return manage(res);
  9294. }
  9295.  
  9296. isl::set basic_set::gist(const isl::set &context) const
  9297. {
  9298.   return isl::set(*this).gist(context);
  9299. }
  9300.  
  9301. isl::union_set basic_set::gist(const isl::union_set &context) const
  9302. {
  9303.   return isl::set(*this).gist(context);
  9304. }
  9305.  
  9306. isl::basic_set basic_set::gist(const isl::point &context) const
  9307. {
  9308.   return this->gist(isl::basic_set(context));
  9309. }
  9310.  
  9311. isl::set basic_set::gist_params(const isl::set &context) const
  9312. {
  9313.   return isl::set(*this).gist_params(context);
  9314. }
  9315.  
  9316. boolean basic_set::has_equal_space(const isl::set &set2) const
  9317. {
  9318.   return isl::set(*this).has_equal_space(set2);
  9319. }
  9320.  
  9321. isl::map basic_set::identity() const
  9322. {
  9323.   return isl::set(*this).identity();
  9324. }
  9325.  
  9326. isl::union_pw_multi_aff basic_set::identity_union_pw_multi_aff() const
  9327. {
  9328.   return isl::set(*this).identity_union_pw_multi_aff();
  9329. }
  9330.  
  9331. isl::pw_aff basic_set::indicator_function() const
  9332. {
  9333.   return isl::set(*this).indicator_function();
  9334. }
  9335.  
  9336. isl::set basic_set::insert_dims(isl::dim type, unsigned int pos, unsigned int n) const
  9337. {
  9338.   return isl::set(*this).insert_dims(type, pos, n);
  9339. }
  9340.  
  9341. isl::map basic_set::insert_domain(const isl::space &domain) const
  9342. {
  9343.   return isl::set(*this).insert_domain(domain);
  9344. }
  9345.  
  9346. isl::basic_set basic_set::intersect(isl::basic_set bset2) const
  9347. {
  9348.   auto res = isl_basic_set_intersect(copy(), bset2.release());
  9349.   return manage(res);
  9350. }
  9351.  
  9352. isl::set basic_set::intersect(const isl::set &set2) const
  9353. {
  9354.   return isl::set(*this).intersect(set2);
  9355. }
  9356.  
  9357. isl::union_set basic_set::intersect(const isl::union_set &uset2) const
  9358. {
  9359.   return isl::set(*this).intersect(uset2);
  9360. }
  9361.  
  9362. isl::basic_set basic_set::intersect(const isl::point &bset2) const
  9363. {
  9364.   return this->intersect(isl::basic_set(bset2));
  9365. }
  9366.  
  9367. isl::basic_set basic_set::intersect_params(isl::basic_set bset2) const
  9368. {
  9369.   auto res = isl_basic_set_intersect_params(copy(), bset2.release());
  9370.   return manage(res);
  9371. }
  9372.  
  9373. isl::set basic_set::intersect_params(const isl::set &params) const
  9374. {
  9375.   return isl::set(*this).intersect_params(params);
  9376. }
  9377.  
  9378. isl::basic_set basic_set::intersect_params(const isl::point &bset2) const
  9379. {
  9380.   return this->intersect_params(isl::basic_set(bset2));
  9381. }
  9382.  
  9383. boolean basic_set::involves_dims(isl::dim type, unsigned int first, unsigned int n) const
  9384. {
  9385.   return isl::set(*this).involves_dims(type, first, n);
  9386. }
  9387.  
  9388. boolean basic_set::involves_locals() const
  9389. {
  9390.   return isl::set(*this).involves_locals();
  9391. }
  9392.  
  9393. boolean basic_set::is_bounded() const
  9394. {
  9395.   auto res = isl_basic_set_is_bounded(get());
  9396.   return manage(res);
  9397. }
  9398.  
  9399. boolean basic_set::is_disjoint(const isl::set &set2) const
  9400. {
  9401.   return isl::set(*this).is_disjoint(set2);
  9402. }
  9403.  
  9404. boolean basic_set::is_disjoint(const isl::union_set &uset2) const
  9405. {
  9406.   return isl::set(*this).is_disjoint(uset2);
  9407. }
  9408.  
  9409. boolean basic_set::is_empty() const
  9410. {
  9411.   auto res = isl_basic_set_is_empty(get());
  9412.   return manage(res);
  9413. }
  9414.  
  9415. boolean basic_set::is_equal(const isl::basic_set &bset2) const
  9416. {
  9417.   auto res = isl_basic_set_is_equal(get(), bset2.get());
  9418.   return manage(res);
  9419. }
  9420.  
  9421. boolean basic_set::is_equal(const isl::set &set2) const
  9422. {
  9423.   return isl::set(*this).is_equal(set2);
  9424. }
  9425.  
  9426. boolean basic_set::is_equal(const isl::union_set &uset2) const
  9427. {
  9428.   return isl::set(*this).is_equal(uset2);
  9429. }
  9430.  
  9431. boolean basic_set::is_equal(const isl::point &bset2) const
  9432. {
  9433.   return this->is_equal(isl::basic_set(bset2));
  9434. }
  9435.  
  9436. boolean basic_set::is_params() const
  9437. {
  9438.   return isl::set(*this).is_params();
  9439. }
  9440.  
  9441. boolean basic_set::is_singleton() const
  9442. {
  9443.   return isl::set(*this).is_singleton();
  9444. }
  9445.  
  9446. boolean basic_set::is_strict_subset(const isl::set &set2) const
  9447. {
  9448.   return isl::set(*this).is_strict_subset(set2);
  9449. }
  9450.  
  9451. boolean basic_set::is_strict_subset(const isl::union_set &uset2) const
  9452. {
  9453.   return isl::set(*this).is_strict_subset(uset2);
  9454. }
  9455.  
  9456. boolean basic_set::is_subset(const isl::basic_set &bset2) const
  9457. {
  9458.   auto res = isl_basic_set_is_subset(get(), bset2.get());
  9459.   return manage(res);
  9460. }
  9461.  
  9462. boolean basic_set::is_subset(const isl::set &set2) const
  9463. {
  9464.   return isl::set(*this).is_subset(set2);
  9465. }
  9466.  
  9467. boolean basic_set::is_subset(const isl::union_set &uset2) const
  9468. {
  9469.   return isl::set(*this).is_subset(uset2);
  9470. }
  9471.  
  9472. boolean basic_set::is_subset(const isl::point &bset2) const
  9473. {
  9474.   return this->is_subset(isl::basic_set(bset2));
  9475. }
  9476.  
  9477. boolean basic_set::is_wrapping() const
  9478. {
  9479.   auto res = isl_basic_set_is_wrapping(get());
  9480.   return manage(res);
  9481. }
  9482.  
  9483. boolean basic_set::isa_set() const
  9484. {
  9485.   return isl::set(*this).isa_set();
  9486. }
  9487.  
  9488. isl::set basic_set::lexmax() const
  9489. {
  9490.   auto res = isl_basic_set_lexmax(copy());
  9491.   return manage(res);
  9492. }
  9493.  
  9494. isl::pw_multi_aff basic_set::lexmax_pw_multi_aff() const
  9495. {
  9496.   return isl::set(*this).lexmax_pw_multi_aff();
  9497. }
  9498.  
  9499. isl::set basic_set::lexmin() const
  9500. {
  9501.   auto res = isl_basic_set_lexmin(copy());
  9502.   return manage(res);
  9503. }
  9504.  
  9505. isl::pw_multi_aff basic_set::lexmin_pw_multi_aff() const
  9506. {
  9507.   return isl::set(*this).lexmin_pw_multi_aff();
  9508. }
  9509.  
  9510. isl::set basic_set::lower_bound(const isl::multi_pw_aff &lower) const
  9511. {
  9512.   return isl::set(*this).lower_bound(lower);
  9513. }
  9514.  
  9515. isl::set basic_set::lower_bound(const isl::multi_val &lower) const
  9516. {
  9517.   return isl::set(*this).lower_bound(lower);
  9518. }
  9519.  
  9520. isl::set basic_set::lower_bound_si(isl::dim type, unsigned int pos, int value) const
  9521. {
  9522.   return isl::set(*this).lower_bound_si(type, pos, value);
  9523. }
  9524.  
  9525. isl::set basic_set::lower_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const
  9526. {
  9527.   return isl::set(*this).lower_bound_val(type, pos, value);
  9528. }
  9529.  
  9530. isl::set basic_set::lower_bound_val(isl::dim type, unsigned int pos, long value) const
  9531. {
  9532.   return this->lower_bound_val(type, pos, isl::val(ctx(), value));
  9533. }
  9534.  
  9535. isl::multi_pw_aff basic_set::max_multi_pw_aff() const
  9536. {
  9537.   return isl::set(*this).max_multi_pw_aff();
  9538. }
  9539.  
  9540. isl::val basic_set::max_val(const isl::aff &obj) const
  9541. {
  9542.   return isl::set(*this).max_val(obj);
  9543. }
  9544.  
  9545. isl::multi_pw_aff basic_set::min_multi_pw_aff() const
  9546. {
  9547.   return isl::set(*this).min_multi_pw_aff();
  9548. }
  9549.  
  9550. isl::val basic_set::min_val(const isl::aff &obj) const
  9551. {
  9552.   return isl::set(*this).min_val(obj);
  9553. }
  9554.  
  9555. class size basic_set::n_basic_set() const
  9556. {
  9557.   return isl::set(*this).n_basic_set();
  9558. }
  9559.  
  9560. isl::basic_set basic_set::params() const
  9561. {
  9562.   auto res = isl_basic_set_params(copy());
  9563.   return manage(res);
  9564. }
  9565.  
  9566. isl::val basic_set::plain_get_val_if_fixed(isl::dim type, unsigned int pos) const
  9567. {
  9568.   return isl::set(*this).plain_get_val_if_fixed(type, pos);
  9569. }
  9570.  
  9571. isl::multi_val basic_set::plain_multi_val_if_fixed() const
  9572. {
  9573.   return isl::set(*this).plain_multi_val_if_fixed();
  9574. }
  9575.  
  9576. isl::basic_set basic_set::polyhedral_hull() const
  9577. {
  9578.   return isl::set(*this).polyhedral_hull();
  9579. }
  9580.  
  9581. isl::set basic_set::preimage(const isl::multi_aff &ma) const
  9582. {
  9583.   return isl::set(*this).preimage(ma);
  9584. }
  9585.  
  9586. isl::set basic_set::preimage(const isl::multi_pw_aff &mpa) const
  9587. {
  9588.   return isl::set(*this).preimage(mpa);
  9589. }
  9590.  
  9591. isl::set basic_set::preimage(const isl::pw_multi_aff &pma) const
  9592. {
  9593.   return isl::set(*this).preimage(pma);
  9594. }
  9595.  
  9596. isl::union_set basic_set::preimage(const isl::union_pw_multi_aff &upma) const
  9597. {
  9598.   return isl::set(*this).preimage(upma);
  9599. }
  9600.  
  9601. isl::set basic_set::product(const isl::set &set2) const
  9602. {
  9603.   return isl::set(*this).product(set2);
  9604. }
  9605.  
  9606. isl::basic_set basic_set::project_out(isl::dim type, unsigned int first, unsigned int n) const
  9607. {
  9608.   auto res = isl_basic_set_project_out(copy(), static_cast<enum isl_dim_type>(type), first, n);
  9609.   return manage(res);
  9610. }
  9611.  
  9612. isl::set basic_set::project_out_all_params() const
  9613. {
  9614.   return isl::set(*this).project_out_all_params();
  9615. }
  9616.  
  9617. isl::set basic_set::project_out_param(const isl::id &id) const
  9618. {
  9619.   return isl::set(*this).project_out_param(id);
  9620. }
  9621.  
  9622. isl::set basic_set::project_out_param(const std::string &id) const
  9623. {
  9624.   return this->project_out_param(isl::id(ctx(), id));
  9625. }
  9626.  
  9627. isl::set basic_set::project_out_param(const isl::id_list &list) const
  9628. {
  9629.   return isl::set(*this).project_out_param(list);
  9630. }
  9631.  
  9632. isl::pw_multi_aff basic_set::pw_multi_aff_on_domain(const isl::multi_val &mv) const
  9633. {
  9634.   return isl::set(*this).pw_multi_aff_on_domain(mv);
  9635. }
  9636.  
  9637. isl::set basic_set::remove_dims(isl::dim type, unsigned int first, unsigned int n) const
  9638. {
  9639.   return isl::set(*this).remove_dims(type, first, n);
  9640. }
  9641.  
  9642. isl::set basic_set::remove_divs() const
  9643. {
  9644.   return isl::set(*this).remove_divs();
  9645. }
  9646.  
  9647. isl::set basic_set::remove_redundancies() const
  9648. {
  9649.   return isl::set(*this).remove_redundancies();
  9650. }
  9651.  
  9652. isl::set basic_set::reset_tuple_id() const
  9653. {
  9654.   return isl::set(*this).reset_tuple_id();
  9655. }
  9656.  
  9657. isl::basic_set basic_set::sample() const
  9658. {
  9659.   auto res = isl_basic_set_sample(copy());
  9660.   return manage(res);
  9661. }
  9662.  
  9663. isl::point basic_set::sample_point() const
  9664. {
  9665.   auto res = isl_basic_set_sample_point(copy());
  9666.   return manage(res);
  9667. }
  9668.  
  9669. isl::set basic_set::set_dim_id(isl::dim type, unsigned int pos, const isl::id &id) const
  9670. {
  9671.   return isl::set(*this).set_dim_id(type, pos, id);
  9672. }
  9673.  
  9674. isl::set basic_set::set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const
  9675. {
  9676.   return this->set_dim_id(type, pos, isl::id(ctx(), id));
  9677. }
  9678.  
  9679. isl::set_list basic_set::set_list() const
  9680. {
  9681.   return isl::set(*this).set_list();
  9682. }
  9683.  
  9684. isl::set basic_set::set_tuple_id(const isl::id &id) const
  9685. {
  9686.   return isl::set(*this).set_tuple_id(id);
  9687. }
  9688.  
  9689. isl::set basic_set::set_tuple_id(const std::string &id) const
  9690. {
  9691.   return this->set_tuple_id(isl::id(ctx(), id));
  9692. }
  9693.  
  9694. isl::fixed_box basic_set::simple_fixed_box_hull() const
  9695. {
  9696.   return isl::set(*this).simple_fixed_box_hull();
  9697. }
  9698.  
  9699. isl::basic_set basic_set::simple_hull() const
  9700. {
  9701.   return isl::set(*this).simple_hull();
  9702. }
  9703.  
  9704. isl::space basic_set::space() const
  9705. {
  9706.   auto res = isl_basic_set_get_space(get());
  9707.   return manage(res);
  9708. }
  9709.  
  9710. isl::space basic_set::get_space() const
  9711. {
  9712.   return space();
  9713. }
  9714.  
  9715. isl::val basic_set::stride(int pos) const
  9716. {
  9717.   return isl::set(*this).stride(pos);
  9718. }
  9719.  
  9720. isl::set basic_set::subtract(const isl::set &set2) const
  9721. {
  9722.   return isl::set(*this).subtract(set2);
  9723. }
  9724.  
  9725. isl::union_set basic_set::subtract(const isl::union_set &uset2) const
  9726. {
  9727.   return isl::set(*this).subtract(uset2);
  9728. }
  9729.  
  9730. isl::basic_set_list basic_set::to_list() const
  9731. {
  9732.   auto res = isl_basic_set_to_list(copy());
  9733.   return manage(res);
  9734. }
  9735.  
  9736. isl::set basic_set::to_set() const
  9737. {
  9738.   auto res = isl_basic_set_to_set(copy());
  9739.   return manage(res);
  9740. }
  9741.  
  9742. isl::union_set basic_set::to_union_set() const
  9743. {
  9744.   return isl::set(*this).to_union_set();
  9745. }
  9746.  
  9747. isl::map basic_set::translation() const
  9748. {
  9749.   return isl::set(*this).translation();
  9750. }
  9751.  
  9752. class size basic_set::tuple_dim() const
  9753. {
  9754.   return isl::set(*this).tuple_dim();
  9755. }
  9756.  
  9757. isl::id basic_set::tuple_id() const
  9758. {
  9759.   return isl::set(*this).tuple_id();
  9760. }
  9761.  
  9762. std::string basic_set::tuple_name() const
  9763. {
  9764.   return isl::set(*this).tuple_name();
  9765. }
  9766.  
  9767. isl::set basic_set::unbind_params(const isl::multi_id &tuple) const
  9768. {
  9769.   return isl::set(*this).unbind_params(tuple);
  9770. }
  9771.  
  9772. isl::map basic_set::unbind_params_insert_domain(const isl::multi_id &domain) const
  9773. {
  9774.   return isl::set(*this).unbind_params_insert_domain(domain);
  9775. }
  9776.  
  9777. isl::set basic_set::unite(isl::basic_set bset2) const
  9778. {
  9779.   auto res = isl_basic_set_union(copy(), bset2.release());
  9780.   return manage(res);
  9781. }
  9782.  
  9783. isl::set basic_set::unite(const isl::set &set2) const
  9784. {
  9785.   return isl::set(*this).unite(set2);
  9786. }
  9787.  
  9788. isl::union_set basic_set::unite(const isl::union_set &uset2) const
  9789. {
  9790.   return isl::set(*this).unite(uset2);
  9791. }
  9792.  
  9793. isl::set basic_set::unite(const isl::point &bset2) const
  9794. {
  9795.   return this->unite(isl::basic_set(bset2));
  9796. }
  9797.  
  9798. isl::basic_set basic_set::universe(isl::space space)
  9799. {
  9800.   auto res = isl_basic_set_universe(space.release());
  9801.   return manage(res);
  9802. }
  9803.  
  9804. isl::basic_set basic_set::unshifted_simple_hull() const
  9805. {
  9806.   return isl::set(*this).unshifted_simple_hull();
  9807. }
  9808.  
  9809. isl::map basic_set::unwrap() const
  9810. {
  9811.   return isl::set(*this).unwrap();
  9812. }
  9813.  
  9814. isl::set basic_set::upper_bound(const isl::multi_pw_aff &upper) const
  9815. {
  9816.   return isl::set(*this).upper_bound(upper);
  9817. }
  9818.  
  9819. isl::set basic_set::upper_bound(const isl::multi_val &upper) const
  9820. {
  9821.   return isl::set(*this).upper_bound(upper);
  9822. }
  9823.  
  9824. isl::set basic_set::upper_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const
  9825. {
  9826.   return isl::set(*this).upper_bound_val(type, pos, value);
  9827. }
  9828.  
  9829. isl::set basic_set::upper_bound_val(isl::dim type, unsigned int pos, long value) const
  9830. {
  9831.   return this->upper_bound_val(type, pos, isl::val(ctx(), value));
  9832. }
  9833.  
  9834. inline std::ostream &operator<<(std::ostream &os, const basic_set &obj)
  9835. {
  9836.   char *str = isl_basic_set_to_str(obj.get());
  9837.   if (!str) {
  9838.     os.setstate(std::ios_base::badbit);
  9839.     return os;
  9840.   }
  9841.   os << str;
  9842.   free(str);
  9843.   return os;
  9844. }
  9845.  
  9846. // implementations for isl::basic_set_list
  9847. basic_set_list manage(__isl_take isl_basic_set_list *ptr) {
  9848.   return basic_set_list(ptr);
  9849. }
  9850. basic_set_list manage_copy(__isl_keep isl_basic_set_list *ptr) {
  9851.   ptr = isl_basic_set_list_copy(ptr);
  9852.   return basic_set_list(ptr);
  9853. }
  9854.  
  9855. basic_set_list::basic_set_list()
  9856.     : ptr(nullptr) {}
  9857.  
  9858. basic_set_list::basic_set_list(const basic_set_list &obj)
  9859.     : ptr(nullptr)
  9860. {
  9861.   ptr = obj.copy();
  9862. }
  9863.  
  9864. basic_set_list::basic_set_list(__isl_take isl_basic_set_list *ptr)
  9865.     : ptr(ptr) {}
  9866.  
  9867. basic_set_list::basic_set_list(isl::ctx ctx, int n)
  9868. {
  9869.   auto res = isl_basic_set_list_alloc(ctx.release(), n);
  9870.   ptr = res;
  9871. }
  9872.  
  9873. basic_set_list::basic_set_list(isl::basic_set el)
  9874. {
  9875.   auto res = isl_basic_set_list_from_basic_set(el.release());
  9876.   ptr = res;
  9877. }
  9878.  
  9879. basic_set_list &basic_set_list::operator=(basic_set_list obj) {
  9880.   std::swap(this->ptr, obj.ptr);
  9881.   return *this;
  9882. }
  9883.  
  9884. basic_set_list::~basic_set_list() {
  9885.   if (ptr)
  9886.     isl_basic_set_list_free(ptr);
  9887. }
  9888.  
  9889. __isl_give isl_basic_set_list *basic_set_list::copy() const & {
  9890.   return isl_basic_set_list_copy(ptr);
  9891. }
  9892.  
  9893. __isl_keep isl_basic_set_list *basic_set_list::get() const {
  9894.   return ptr;
  9895. }
  9896.  
  9897. __isl_give isl_basic_set_list *basic_set_list::release() {
  9898.   isl_basic_set_list *tmp = ptr;
  9899.   ptr = nullptr;
  9900.   return tmp;
  9901. }
  9902.  
  9903. bool basic_set_list::is_null() const {
  9904.   return ptr == nullptr;
  9905. }
  9906.  
  9907. isl::ctx basic_set_list::ctx() const {
  9908.   return isl::ctx(isl_basic_set_list_get_ctx(ptr));
  9909. }
  9910.  
  9911. isl::basic_set_list basic_set_list::add(isl::basic_set el) const
  9912. {
  9913.   auto res = isl_basic_set_list_add(copy(), el.release());
  9914.   return manage(res);
  9915. }
  9916.  
  9917. isl::basic_set basic_set_list::at(int index) const
  9918. {
  9919.   auto res = isl_basic_set_list_get_at(get(), index);
  9920.   return manage(res);
  9921. }
  9922.  
  9923. isl::basic_set basic_set_list::get_at(int index) const
  9924. {
  9925.   return at(index);
  9926. }
  9927.  
  9928. isl::basic_set_list basic_set_list::clear() const
  9929. {
  9930.   auto res = isl_basic_set_list_clear(copy());
  9931.   return manage(res);
  9932. }
  9933.  
  9934. isl::basic_set_list basic_set_list::concat(isl::basic_set_list list2) const
  9935. {
  9936.   auto res = isl_basic_set_list_concat(copy(), list2.release());
  9937.   return manage(res);
  9938. }
  9939.  
  9940. isl::basic_set_list basic_set_list::drop(unsigned int first, unsigned int n) const
  9941. {
  9942.   auto res = isl_basic_set_list_drop(copy(), first, n);
  9943.   return manage(res);
  9944. }
  9945.  
  9946. stat basic_set_list::foreach(const std::function<stat(isl::basic_set)> &fn) const
  9947. {
  9948.   struct fn_data {
  9949.     std::function<stat(isl::basic_set)> func;
  9950.   } fn_data = { fn };
  9951.   auto fn_lambda = [](isl_basic_set *arg_0, void *arg_1) -> isl_stat {
  9952.     auto *data = static_cast<struct fn_data *>(arg_1);
  9953.     auto ret = (data->func)(manage(arg_0));
  9954.     return ret.release();
  9955.   };
  9956.   auto res = isl_basic_set_list_foreach(get(), fn_lambda, &fn_data);
  9957.   return manage(res);
  9958. }
  9959.  
  9960. isl::basic_set_list basic_set_list::insert(unsigned int pos, isl::basic_set el) const
  9961. {
  9962.   auto res = isl_basic_set_list_insert(copy(), pos, el.release());
  9963.   return manage(res);
  9964. }
  9965.  
  9966. class size basic_set_list::size() const
  9967. {
  9968.   auto res = isl_basic_set_list_size(get());
  9969.   return manage(res);
  9970. }
  9971.  
  9972. inline std::ostream &operator<<(std::ostream &os, const basic_set_list &obj)
  9973. {
  9974.   char *str = isl_basic_set_list_to_str(obj.get());
  9975.   if (!str) {
  9976.     os.setstate(std::ios_base::badbit);
  9977.     return os;
  9978.   }
  9979.   os << str;
  9980.   free(str);
  9981.   return os;
  9982. }
  9983.  
  9984. // implementations for isl::constraint
  9985. constraint manage(__isl_take isl_constraint *ptr) {
  9986.   return constraint(ptr);
  9987. }
  9988. constraint manage_copy(__isl_keep isl_constraint *ptr) {
  9989.   ptr = isl_constraint_copy(ptr);
  9990.   return constraint(ptr);
  9991. }
  9992.  
  9993. constraint::constraint()
  9994.     : ptr(nullptr) {}
  9995.  
  9996. constraint::constraint(const constraint &obj)
  9997.     : ptr(nullptr)
  9998. {
  9999.   ptr = obj.copy();
  10000. }
  10001.  
  10002. constraint::constraint(__isl_take isl_constraint *ptr)
  10003.     : ptr(ptr) {}
  10004.  
  10005. constraint &constraint::operator=(constraint obj) {
  10006.   std::swap(this->ptr, obj.ptr);
  10007.   return *this;
  10008. }
  10009.  
  10010. constraint::~constraint() {
  10011.   if (ptr)
  10012.     isl_constraint_free(ptr);
  10013. }
  10014.  
  10015. __isl_give isl_constraint *constraint::copy() const & {
  10016.   return isl_constraint_copy(ptr);
  10017. }
  10018.  
  10019. __isl_keep isl_constraint *constraint::get() const {
  10020.   return ptr;
  10021. }
  10022.  
  10023. __isl_give isl_constraint *constraint::release() {
  10024.   isl_constraint *tmp = ptr;
  10025.   ptr = nullptr;
  10026.   return tmp;
  10027. }
  10028.  
  10029. bool constraint::is_null() const {
  10030.   return ptr == nullptr;
  10031. }
  10032.  
  10033. isl::ctx constraint::ctx() const {
  10034.   return isl::ctx(isl_constraint_get_ctx(ptr));
  10035. }
  10036.  
  10037. isl::constraint constraint::alloc_equality(isl::local_space ls)
  10038. {
  10039.   auto res = isl_constraint_alloc_equality(ls.release());
  10040.   return manage(res);
  10041. }
  10042.  
  10043. isl::constraint constraint::alloc_inequality(isl::local_space ls)
  10044. {
  10045.   auto res = isl_constraint_alloc_inequality(ls.release());
  10046.   return manage(res);
  10047. }
  10048.  
  10049. isl::constraint constraint::set_coefficient_si(isl::dim type, int pos, int v) const
  10050. {
  10051.   auto res = isl_constraint_set_coefficient_si(copy(), static_cast<enum isl_dim_type>(type), pos, v);
  10052.   return manage(res);
  10053. }
  10054.  
  10055. isl::constraint constraint::set_constant_si(int v) const
  10056. {
  10057.   auto res = isl_constraint_set_constant_si(copy(), v);
  10058.   return manage(res);
  10059. }
  10060.  
  10061. isl::constraint constraint::set_constant_val(isl::val v) const
  10062. {
  10063.   auto res = isl_constraint_set_constant_val(copy(), v.release());
  10064.   return manage(res);
  10065. }
  10066.  
  10067. isl::constraint constraint::set_constant_val(long v) const
  10068. {
  10069.   return this->set_constant_val(isl::val(ctx(), v));
  10070. }
  10071.  
  10072. // implementations for isl::fixed_box
  10073. fixed_box manage(__isl_take isl_fixed_box *ptr) {
  10074.   return fixed_box(ptr);
  10075. }
  10076. fixed_box manage_copy(__isl_keep isl_fixed_box *ptr) {
  10077.   ptr = isl_fixed_box_copy(ptr);
  10078.   return fixed_box(ptr);
  10079. }
  10080.  
  10081. fixed_box::fixed_box()
  10082.     : ptr(nullptr) {}
  10083.  
  10084. fixed_box::fixed_box(const fixed_box &obj)
  10085.     : ptr(nullptr)
  10086. {
  10087.   ptr = obj.copy();
  10088. }
  10089.  
  10090. fixed_box::fixed_box(__isl_take isl_fixed_box *ptr)
  10091.     : ptr(ptr) {}
  10092.  
  10093. fixed_box &fixed_box::operator=(fixed_box obj) {
  10094.   std::swap(this->ptr, obj.ptr);
  10095.   return *this;
  10096. }
  10097.  
  10098. fixed_box::~fixed_box() {
  10099.   if (ptr)
  10100.     isl_fixed_box_free(ptr);
  10101. }
  10102.  
  10103. __isl_give isl_fixed_box *fixed_box::copy() const & {
  10104.   return isl_fixed_box_copy(ptr);
  10105. }
  10106.  
  10107. __isl_keep isl_fixed_box *fixed_box::get() const {
  10108.   return ptr;
  10109. }
  10110.  
  10111. __isl_give isl_fixed_box *fixed_box::release() {
  10112.   isl_fixed_box *tmp = ptr;
  10113.   ptr = nullptr;
  10114.   return tmp;
  10115. }
  10116.  
  10117. bool fixed_box::is_null() const {
  10118.   return ptr == nullptr;
  10119. }
  10120.  
  10121. isl::ctx fixed_box::ctx() const {
  10122.   return isl::ctx(isl_fixed_box_get_ctx(ptr));
  10123. }
  10124.  
  10125. boolean fixed_box::is_valid() const
  10126. {
  10127.   auto res = isl_fixed_box_is_valid(get());
  10128.   return manage(res);
  10129. }
  10130.  
  10131. isl::multi_aff fixed_box::offset() const
  10132. {
  10133.   auto res = isl_fixed_box_get_offset(get());
  10134.   return manage(res);
  10135. }
  10136.  
  10137. isl::multi_aff fixed_box::get_offset() const
  10138. {
  10139.   return offset();
  10140. }
  10141.  
  10142. isl::multi_val fixed_box::size() const
  10143. {
  10144.   auto res = isl_fixed_box_get_size(get());
  10145.   return manage(res);
  10146. }
  10147.  
  10148. isl::multi_val fixed_box::get_size() const
  10149. {
  10150.   return size();
  10151. }
  10152.  
  10153. isl::space fixed_box::space() const
  10154. {
  10155.   auto res = isl_fixed_box_get_space(get());
  10156.   return manage(res);
  10157. }
  10158.  
  10159. isl::space fixed_box::get_space() const
  10160. {
  10161.   return space();
  10162. }
  10163.  
  10164. inline std::ostream &operator<<(std::ostream &os, const fixed_box &obj)
  10165. {
  10166.   char *str = isl_fixed_box_to_str(obj.get());
  10167.   if (!str) {
  10168.     os.setstate(std::ios_base::badbit);
  10169.     return os;
  10170.   }
  10171.   os << str;
  10172.   free(str);
  10173.   return os;
  10174. }
  10175.  
  10176. // implementations for isl::id
  10177. id manage(__isl_take isl_id *ptr) {
  10178.   return id(ptr);
  10179. }
  10180. id manage_copy(__isl_keep isl_id *ptr) {
  10181.   ptr = isl_id_copy(ptr);
  10182.   return id(ptr);
  10183. }
  10184.  
  10185. id::id()
  10186.     : ptr(nullptr) {}
  10187.  
  10188. id::id(const id &obj)
  10189.     : ptr(nullptr)
  10190. {
  10191.   ptr = obj.copy();
  10192. }
  10193.  
  10194. id::id(__isl_take isl_id *ptr)
  10195.     : ptr(ptr) {}
  10196.  
  10197. id::id(isl::ctx ctx, const std::string &str)
  10198. {
  10199.   auto res = isl_id_read_from_str(ctx.release(), str.c_str());
  10200.   ptr = res;
  10201. }
  10202.  
  10203. id &id::operator=(id obj) {
  10204.   std::swap(this->ptr, obj.ptr);
  10205.   return *this;
  10206. }
  10207.  
  10208. id::~id() {
  10209.   if (ptr)
  10210.     isl_id_free(ptr);
  10211. }
  10212.  
  10213. __isl_give isl_id *id::copy() const & {
  10214.   return isl_id_copy(ptr);
  10215. }
  10216.  
  10217. __isl_keep isl_id *id::get() const {
  10218.   return ptr;
  10219. }
  10220.  
  10221. __isl_give isl_id *id::release() {
  10222.   isl_id *tmp = ptr;
  10223.   ptr = nullptr;
  10224.   return tmp;
  10225. }
  10226.  
  10227. bool id::is_null() const {
  10228.   return ptr == nullptr;
  10229. }
  10230.  
  10231. isl::ctx id::ctx() const {
  10232.   return isl::ctx(isl_id_get_ctx(ptr));
  10233. }
  10234.  
  10235. isl::id id::alloc(isl::ctx ctx, const std::string &name, void * user)
  10236. {
  10237.   auto res = isl_id_alloc(ctx.release(), name.c_str(), user);
  10238.   return manage(res);
  10239. }
  10240.  
  10241. std::string id::name() const
  10242. {
  10243.   auto res = isl_id_get_name(get());
  10244.   std::string tmp(res);
  10245.   return tmp;
  10246. }
  10247.  
  10248. std::string id::get_name() const
  10249. {
  10250.   return name();
  10251. }
  10252.  
  10253. isl::id_list id::to_list() const
  10254. {
  10255.   auto res = isl_id_to_list(copy());
  10256.   return manage(res);
  10257. }
  10258.  
  10259. void * id::user() const
  10260. {
  10261.   auto res = isl_id_get_user(get());
  10262.   return res;
  10263. }
  10264.  
  10265. void * id::get_user() const
  10266. {
  10267.   return user();
  10268. }
  10269.  
  10270. inline std::ostream &operator<<(std::ostream &os, const id &obj)
  10271. {
  10272.   char *str = isl_id_to_str(obj.get());
  10273.   if (!str) {
  10274.     os.setstate(std::ios_base::badbit);
  10275.     return os;
  10276.   }
  10277.   os << str;
  10278.   free(str);
  10279.   return os;
  10280. }
  10281.  
  10282. // implementations for isl::id_list
  10283. id_list manage(__isl_take isl_id_list *ptr) {
  10284.   return id_list(ptr);
  10285. }
  10286. id_list manage_copy(__isl_keep isl_id_list *ptr) {
  10287.   ptr = isl_id_list_copy(ptr);
  10288.   return id_list(ptr);
  10289. }
  10290.  
  10291. id_list::id_list()
  10292.     : ptr(nullptr) {}
  10293.  
  10294. id_list::id_list(const id_list &obj)
  10295.     : ptr(nullptr)
  10296. {
  10297.   ptr = obj.copy();
  10298. }
  10299.  
  10300. id_list::id_list(__isl_take isl_id_list *ptr)
  10301.     : ptr(ptr) {}
  10302.  
  10303. id_list::id_list(isl::ctx ctx, int n)
  10304. {
  10305.   auto res = isl_id_list_alloc(ctx.release(), n);
  10306.   ptr = res;
  10307. }
  10308.  
  10309. id_list::id_list(isl::id el)
  10310. {
  10311.   auto res = isl_id_list_from_id(el.release());
  10312.   ptr = res;
  10313. }
  10314.  
  10315. id_list::id_list(isl::ctx ctx, const std::string &str)
  10316. {
  10317.   auto res = isl_id_list_read_from_str(ctx.release(), str.c_str());
  10318.   ptr = res;
  10319. }
  10320.  
  10321. id_list &id_list::operator=(id_list obj) {
  10322.   std::swap(this->ptr, obj.ptr);
  10323.   return *this;
  10324. }
  10325.  
  10326. id_list::~id_list() {
  10327.   if (ptr)
  10328.     isl_id_list_free(ptr);
  10329. }
  10330.  
  10331. __isl_give isl_id_list *id_list::copy() const & {
  10332.   return isl_id_list_copy(ptr);
  10333. }
  10334.  
  10335. __isl_keep isl_id_list *id_list::get() const {
  10336.   return ptr;
  10337. }
  10338.  
  10339. __isl_give isl_id_list *id_list::release() {
  10340.   isl_id_list *tmp = ptr;
  10341.   ptr = nullptr;
  10342.   return tmp;
  10343. }
  10344.  
  10345. bool id_list::is_null() const {
  10346.   return ptr == nullptr;
  10347. }
  10348.  
  10349. isl::ctx id_list::ctx() const {
  10350.   return isl::ctx(isl_id_list_get_ctx(ptr));
  10351. }
  10352.  
  10353. isl::id_list id_list::add(isl::id el) const
  10354. {
  10355.   auto res = isl_id_list_add(copy(), el.release());
  10356.   return manage(res);
  10357. }
  10358.  
  10359. isl::id_list id_list::add(const std::string &el) const
  10360. {
  10361.   return this->add(isl::id(ctx(), el));
  10362. }
  10363.  
  10364. isl::id id_list::at(int index) const
  10365. {
  10366.   auto res = isl_id_list_get_at(get(), index);
  10367.   return manage(res);
  10368. }
  10369.  
  10370. isl::id id_list::get_at(int index) const
  10371. {
  10372.   return at(index);
  10373. }
  10374.  
  10375. isl::id_list id_list::clear() const
  10376. {
  10377.   auto res = isl_id_list_clear(copy());
  10378.   return manage(res);
  10379. }
  10380.  
  10381. isl::id_list id_list::concat(isl::id_list list2) const
  10382. {
  10383.   auto res = isl_id_list_concat(copy(), list2.release());
  10384.   return manage(res);
  10385. }
  10386.  
  10387. isl::id_list id_list::drop(unsigned int first, unsigned int n) const
  10388. {
  10389.   auto res = isl_id_list_drop(copy(), first, n);
  10390.   return manage(res);
  10391. }
  10392.  
  10393. stat id_list::foreach(const std::function<stat(isl::id)> &fn) const
  10394. {
  10395.   struct fn_data {
  10396.     std::function<stat(isl::id)> func;
  10397.   } fn_data = { fn };
  10398.   auto fn_lambda = [](isl_id *arg_0, void *arg_1) -> isl_stat {
  10399.     auto *data = static_cast<struct fn_data *>(arg_1);
  10400.     auto ret = (data->func)(manage(arg_0));
  10401.     return ret.release();
  10402.   };
  10403.   auto res = isl_id_list_foreach(get(), fn_lambda, &fn_data);
  10404.   return manage(res);
  10405. }
  10406.  
  10407. isl::id_list id_list::insert(unsigned int pos, isl::id el) const
  10408. {
  10409.   auto res = isl_id_list_insert(copy(), pos, el.release());
  10410.   return manage(res);
  10411. }
  10412.  
  10413. isl::id_list id_list::insert(unsigned int pos, const std::string &el) const
  10414. {
  10415.   return this->insert(pos, isl::id(ctx(), el));
  10416. }
  10417.  
  10418. class size id_list::size() const
  10419. {
  10420.   auto res = isl_id_list_size(get());
  10421.   return manage(res);
  10422. }
  10423.  
  10424. inline std::ostream &operator<<(std::ostream &os, const id_list &obj)
  10425. {
  10426.   char *str = isl_id_list_to_str(obj.get());
  10427.   if (!str) {
  10428.     os.setstate(std::ios_base::badbit);
  10429.     return os;
  10430.   }
  10431.   os << str;
  10432.   free(str);
  10433.   return os;
  10434. }
  10435.  
  10436. // implementations for isl::id_to_ast_expr
  10437. id_to_ast_expr manage(__isl_take isl_id_to_ast_expr *ptr) {
  10438.   return id_to_ast_expr(ptr);
  10439. }
  10440. id_to_ast_expr manage_copy(__isl_keep isl_id_to_ast_expr *ptr) {
  10441.   ptr = isl_id_to_ast_expr_copy(ptr);
  10442.   return id_to_ast_expr(ptr);
  10443. }
  10444.  
  10445. id_to_ast_expr::id_to_ast_expr()
  10446.     : ptr(nullptr) {}
  10447.  
  10448. id_to_ast_expr::id_to_ast_expr(const id_to_ast_expr &obj)
  10449.     : ptr(nullptr)
  10450. {
  10451.   ptr = obj.copy();
  10452. }
  10453.  
  10454. id_to_ast_expr::id_to_ast_expr(__isl_take isl_id_to_ast_expr *ptr)
  10455.     : ptr(ptr) {}
  10456.  
  10457. id_to_ast_expr &id_to_ast_expr::operator=(id_to_ast_expr obj) {
  10458.   std::swap(this->ptr, obj.ptr);
  10459.   return *this;
  10460. }
  10461.  
  10462. id_to_ast_expr::~id_to_ast_expr() {
  10463.   if (ptr)
  10464.     isl_id_to_ast_expr_free(ptr);
  10465. }
  10466.  
  10467. __isl_give isl_id_to_ast_expr *id_to_ast_expr::copy() const & {
  10468.   return isl_id_to_ast_expr_copy(ptr);
  10469. }
  10470.  
  10471. __isl_keep isl_id_to_ast_expr *id_to_ast_expr::get() const {
  10472.   return ptr;
  10473. }
  10474.  
  10475. __isl_give isl_id_to_ast_expr *id_to_ast_expr::release() {
  10476.   isl_id_to_ast_expr *tmp = ptr;
  10477.   ptr = nullptr;
  10478.   return tmp;
  10479. }
  10480.  
  10481. bool id_to_ast_expr::is_null() const {
  10482.   return ptr == nullptr;
  10483. }
  10484.  
  10485. isl::ctx id_to_ast_expr::ctx() const {
  10486.   return isl::ctx(isl_id_to_ast_expr_get_ctx(ptr));
  10487. }
  10488.  
  10489. isl::id_to_ast_expr id_to_ast_expr::alloc(isl::ctx ctx, int min_size)
  10490. {
  10491.   auto res = isl_id_to_ast_expr_alloc(ctx.release(), min_size);
  10492.   return manage(res);
  10493. }
  10494.  
  10495. isl::id_to_ast_expr id_to_ast_expr::set(isl::id key, isl::ast_expr val) const
  10496. {
  10497.   auto res = isl_id_to_ast_expr_set(copy(), key.release(), val.release());
  10498.   return manage(res);
  10499. }
  10500.  
  10501. isl::id_to_ast_expr id_to_ast_expr::set(const std::string &key, const isl::ast_expr &val) const
  10502. {
  10503.   return this->set(isl::id(ctx(), key), val);
  10504. }
  10505.  
  10506. // implementations for isl::local_space
  10507. local_space manage(__isl_take isl_local_space *ptr) {
  10508.   return local_space(ptr);
  10509. }
  10510. local_space manage_copy(__isl_keep isl_local_space *ptr) {
  10511.   ptr = isl_local_space_copy(ptr);
  10512.   return local_space(ptr);
  10513. }
  10514.  
  10515. local_space::local_space()
  10516.     : ptr(nullptr) {}
  10517.  
  10518. local_space::local_space(const local_space &obj)
  10519.     : ptr(nullptr)
  10520. {
  10521.   ptr = obj.copy();
  10522. }
  10523.  
  10524. local_space::local_space(__isl_take isl_local_space *ptr)
  10525.     : ptr(ptr) {}
  10526.  
  10527. local_space::local_space(isl::space space)
  10528. {
  10529.   auto res = isl_local_space_from_space(space.release());
  10530.   ptr = res;
  10531. }
  10532.  
  10533. local_space &local_space::operator=(local_space obj) {
  10534.   std::swap(this->ptr, obj.ptr);
  10535.   return *this;
  10536. }
  10537.  
  10538. local_space::~local_space() {
  10539.   if (ptr)
  10540.     isl_local_space_free(ptr);
  10541. }
  10542.  
  10543. __isl_give isl_local_space *local_space::copy() const & {
  10544.   return isl_local_space_copy(ptr);
  10545. }
  10546.  
  10547. __isl_keep isl_local_space *local_space::get() const {
  10548.   return ptr;
  10549. }
  10550.  
  10551. __isl_give isl_local_space *local_space::release() {
  10552.   isl_local_space *tmp = ptr;
  10553.   ptr = nullptr;
  10554.   return tmp;
  10555. }
  10556.  
  10557. bool local_space::is_null() const {
  10558.   return ptr == nullptr;
  10559. }
  10560.  
  10561. isl::ctx local_space::ctx() const {
  10562.   return isl::ctx(isl_local_space_get_ctx(ptr));
  10563. }
  10564.  
  10565. // implementations for isl::map
  10566. map manage(__isl_take isl_map *ptr) {
  10567.   return map(ptr);
  10568. }
  10569. map manage_copy(__isl_keep isl_map *ptr) {
  10570.   ptr = isl_map_copy(ptr);
  10571.   return map(ptr);
  10572. }
  10573.  
  10574. map::map()
  10575.     : ptr(nullptr) {}
  10576.  
  10577. map::map(const map &obj)
  10578.     : ptr(nullptr)
  10579. {
  10580.   ptr = obj.copy();
  10581. }
  10582.  
  10583. map::map(__isl_take isl_map *ptr)
  10584.     : ptr(ptr) {}
  10585.  
  10586. map::map(isl::basic_map bmap)
  10587. {
  10588.   auto res = isl_map_from_basic_map(bmap.release());
  10589.   ptr = res;
  10590. }
  10591.  
  10592. map::map(isl::ctx ctx, const std::string &str)
  10593. {
  10594.   auto res = isl_map_read_from_str(ctx.release(), str.c_str());
  10595.   ptr = res;
  10596. }
  10597.  
  10598. map &map::operator=(map obj) {
  10599.   std::swap(this->ptr, obj.ptr);
  10600.   return *this;
  10601. }
  10602.  
  10603. map::~map() {
  10604.   if (ptr)
  10605.     isl_map_free(ptr);
  10606. }
  10607.  
  10608. __isl_give isl_map *map::copy() const & {
  10609.   return isl_map_copy(ptr);
  10610. }
  10611.  
  10612. __isl_keep isl_map *map::get() const {
  10613.   return ptr;
  10614. }
  10615.  
  10616. __isl_give isl_map *map::release() {
  10617.   isl_map *tmp = ptr;
  10618.   ptr = nullptr;
  10619.   return tmp;
  10620. }
  10621.  
  10622. bool map::is_null() const {
  10623.   return ptr == nullptr;
  10624. }
  10625.  
  10626. isl::ctx map::ctx() const {
  10627.   return isl::ctx(isl_map_get_ctx(ptr));
  10628. }
  10629.  
  10630. isl::map map::add_constraint(isl::constraint constraint) const
  10631. {
  10632.   auto res = isl_map_add_constraint(copy(), constraint.release());
  10633.   return manage(res);
  10634. }
  10635.  
  10636. isl::map map::add_dims(isl::dim type, unsigned int n) const
  10637. {
  10638.   auto res = isl_map_add_dims(copy(), static_cast<enum isl_dim_type>(type), n);
  10639.   return manage(res);
  10640. }
  10641.  
  10642. isl::basic_map map::affine_hull() const
  10643. {
  10644.   auto res = isl_map_affine_hull(copy());
  10645.   return manage(res);
  10646. }
  10647.  
  10648. isl::map map::align_params(isl::space model) const
  10649. {
  10650.   auto res = isl_map_align_params(copy(), model.release());
  10651.   return manage(res);
  10652. }
  10653.  
  10654. isl::map map::apply_domain(isl::map map2) const
  10655. {
  10656.   auto res = isl_map_apply_domain(copy(), map2.release());
  10657.   return manage(res);
  10658. }
  10659.  
  10660. isl::union_map map::apply_domain(const isl::union_map &umap2) const
  10661. {
  10662.   return isl::union_map(*this).apply_domain(umap2);
  10663. }
  10664.  
  10665. isl::map map::apply_domain(const isl::basic_map &map2) const
  10666. {
  10667.   return this->apply_domain(isl::map(map2));
  10668. }
  10669.  
  10670. isl::map map::apply_range(isl::map map2) const
  10671. {
  10672.   auto res = isl_map_apply_range(copy(), map2.release());
  10673.   return manage(res);
  10674. }
  10675.  
  10676. isl::union_map map::apply_range(const isl::union_map &umap2) const
  10677. {
  10678.   return isl::union_map(*this).apply_range(umap2);
  10679. }
  10680.  
  10681. isl::map map::apply_range(const isl::basic_map &map2) const
  10682. {
  10683.   return this->apply_range(isl::map(map2));
  10684. }
  10685.  
  10686. isl::map map::as_map() const
  10687. {
  10688.   return isl::union_map(*this).as_map();
  10689. }
  10690.  
  10691. isl::multi_union_pw_aff map::as_multi_union_pw_aff() const
  10692. {
  10693.   return isl::union_map(*this).as_multi_union_pw_aff();
  10694. }
  10695.  
  10696. isl::pw_multi_aff map::as_pw_multi_aff() const
  10697. {
  10698.   auto res = isl_map_as_pw_multi_aff(copy());
  10699.   return manage(res);
  10700. }
  10701.  
  10702. isl::union_pw_multi_aff map::as_union_pw_multi_aff() const
  10703. {
  10704.   return isl::union_map(*this).as_union_pw_multi_aff();
  10705. }
  10706.  
  10707. isl::basic_map_list map::basic_map_list() const
  10708. {
  10709.   auto res = isl_map_get_basic_map_list(get());
  10710.   return manage(res);
  10711. }
  10712.  
  10713. isl::basic_map_list map::get_basic_map_list() const
  10714. {
  10715.   return basic_map_list();
  10716. }
  10717.  
  10718. isl::set map::bind_domain(isl::multi_id tuple) const
  10719. {
  10720.   auto res = isl_map_bind_domain(copy(), tuple.release());
  10721.   return manage(res);
  10722. }
  10723.  
  10724. isl::set map::bind_range(isl::multi_id tuple) const
  10725. {
  10726.   auto res = isl_map_bind_range(copy(), tuple.release());
  10727.   return manage(res);
  10728. }
  10729.  
  10730. boolean map::can_curry() const
  10731. {
  10732.   auto res = isl_map_can_curry(get());
  10733.   return manage(res);
  10734. }
  10735.  
  10736. isl::map map::coalesce() const
  10737. {
  10738.   auto res = isl_map_coalesce(copy());
  10739.   return manage(res);
  10740. }
  10741.  
  10742. isl::map map::complement() const
  10743. {
  10744.   auto res = isl_map_complement(copy());
  10745.   return manage(res);
  10746. }
  10747.  
  10748. isl::union_map map::compute_divs() const
  10749. {
  10750.   return isl::union_map(*this).compute_divs();
  10751. }
  10752.  
  10753. isl::map map::curry() const
  10754. {
  10755.   auto res = isl_map_curry(copy());
  10756.   return manage(res);
  10757. }
  10758.  
  10759. isl::set map::deltas() const
  10760. {
  10761.   auto res = isl_map_deltas(copy());
  10762.   return manage(res);
  10763. }
  10764.  
  10765. isl::map map::detect_equalities() const
  10766. {
  10767.   auto res = isl_map_detect_equalities(copy());
  10768.   return manage(res);
  10769. }
  10770.  
  10771. class size map::dim(isl::dim type) const
  10772. {
  10773.   auto res = isl_map_dim(get(), static_cast<enum isl_dim_type>(type));
  10774.   return manage(res);
  10775. }
  10776.  
  10777. isl::pw_aff map::dim_max(int pos) const
  10778. {
  10779.   auto res = isl_map_dim_max(copy(), pos);
  10780.   return manage(res);
  10781. }
  10782.  
  10783. isl::pw_aff map::dim_min(int pos) const
  10784. {
  10785.   auto res = isl_map_dim_min(copy(), pos);
  10786.   return manage(res);
  10787. }
  10788.  
  10789. isl::set map::domain() const
  10790. {
  10791.   auto res = isl_map_domain(copy());
  10792.   return manage(res);
  10793. }
  10794.  
  10795. isl::map map::domain_factor_domain() const
  10796. {
  10797.   auto res = isl_map_domain_factor_domain(copy());
  10798.   return manage(res);
  10799. }
  10800.  
  10801. isl::map map::domain_factor_range() const
  10802. {
  10803.   auto res = isl_map_domain_factor_range(copy());
  10804.   return manage(res);
  10805. }
  10806.  
  10807. isl::map map::domain_map() const
  10808. {
  10809.   auto res = isl_map_domain_map(copy());
  10810.   return manage(res);
  10811. }
  10812.  
  10813. isl::union_pw_multi_aff map::domain_map_union_pw_multi_aff() const
  10814. {
  10815.   return isl::union_map(*this).domain_map_union_pw_multi_aff();
  10816. }
  10817.  
  10818. isl::map map::domain_product(isl::map map2) const
  10819. {
  10820.   auto res = isl_map_domain_product(copy(), map2.release());
  10821.   return manage(res);
  10822. }
  10823.  
  10824. isl::union_map map::domain_product(const isl::union_map &umap2) const
  10825. {
  10826.   return isl::union_map(*this).domain_product(umap2);
  10827. }
  10828.  
  10829. isl::map map::domain_product(const isl::basic_map &map2) const
  10830. {
  10831.   return this->domain_product(isl::map(map2));
  10832. }
  10833.  
  10834. class size map::domain_tuple_dim() const
  10835. {
  10836.   auto res = isl_map_domain_tuple_dim(get());
  10837.   return manage(res);
  10838. }
  10839.  
  10840. isl::id map::domain_tuple_id() const
  10841. {
  10842.   auto res = isl_map_get_domain_tuple_id(get());
  10843.   return manage(res);
  10844. }
  10845.  
  10846. isl::id map::get_domain_tuple_id() const
  10847. {
  10848.   return domain_tuple_id();
  10849. }
  10850.  
  10851. isl::map map::empty(isl::space space)
  10852. {
  10853.   auto res = isl_map_empty(space.release());
  10854.   return manage(res);
  10855. }
  10856.  
  10857. isl::map map::eq_at(isl::multi_pw_aff mpa) const
  10858. {
  10859.   auto res = isl_map_eq_at_multi_pw_aff(copy(), mpa.release());
  10860.   return manage(res);
  10861. }
  10862.  
  10863. isl::union_map map::eq_at(const isl::multi_union_pw_aff &mupa) const
  10864. {
  10865.   return isl::union_map(*this).eq_at(mupa);
  10866. }
  10867.  
  10868. isl::map map::eq_at(const isl::aff &mpa) const
  10869. {
  10870.   return this->eq_at(isl::multi_pw_aff(mpa));
  10871. }
  10872.  
  10873. isl::map map::eq_at(const isl::multi_aff &mpa) const
  10874. {
  10875.   return this->eq_at(isl::multi_pw_aff(mpa));
  10876. }
  10877.  
  10878. isl::map map::eq_at(const isl::pw_aff &mpa) const
  10879. {
  10880.   return this->eq_at(isl::multi_pw_aff(mpa));
  10881. }
  10882.  
  10883. isl::map map::eq_at(const isl::pw_multi_aff &mpa) const
  10884. {
  10885.   return this->eq_at(isl::multi_pw_aff(mpa));
  10886. }
  10887.  
  10888. isl::map map::equate(isl::dim type1, int pos1, isl::dim type2, int pos2) const
  10889. {
  10890.   auto res = isl_map_equate(copy(), static_cast<enum isl_dim_type>(type1), pos1, static_cast<enum isl_dim_type>(type2), pos2);
  10891.   return manage(res);
  10892. }
  10893.  
  10894. boolean map::every_map(const std::function<boolean(isl::map)> &test) const
  10895. {
  10896.   return isl::union_map(*this).every_map(test);
  10897. }
  10898.  
  10899. isl::map map::extract_map(const isl::space &space) const
  10900. {
  10901.   return isl::union_map(*this).extract_map(space);
  10902. }
  10903.  
  10904. isl::map map::factor_domain() const
  10905. {
  10906.   auto res = isl_map_factor_domain(copy());
  10907.   return manage(res);
  10908. }
  10909.  
  10910. isl::map map::factor_range() const
  10911. {
  10912.   auto res = isl_map_factor_range(copy());
  10913.   return manage(res);
  10914. }
  10915.  
  10916. isl::map map::fix_si(isl::dim type, unsigned int pos, int value) const
  10917. {
  10918.   auto res = isl_map_fix_si(copy(), static_cast<enum isl_dim_type>(type), pos, value);
  10919.   return manage(res);
  10920. }
  10921.  
  10922. isl::union_map map::fixed_power(const isl::val &exp) const
  10923. {
  10924.   return isl::union_map(*this).fixed_power(exp);
  10925. }
  10926.  
  10927. isl::union_map map::fixed_power(long exp) const
  10928. {
  10929.   return this->fixed_power(isl::val(ctx(), exp));
  10930. }
  10931.  
  10932. isl::map map::flat_range_product(isl::map map2) const
  10933. {
  10934.   auto res = isl_map_flat_range_product(copy(), map2.release());
  10935.   return manage(res);
  10936. }
  10937.  
  10938. isl::union_map map::flat_range_product(const isl::union_map &umap2) const
  10939. {
  10940.   return isl::union_map(*this).flat_range_product(umap2);
  10941. }
  10942.  
  10943. isl::map map::flat_range_product(const isl::basic_map &map2) const
  10944. {
  10945.   return this->flat_range_product(isl::map(map2));
  10946. }
  10947.  
  10948. isl::map map::flatten() const
  10949. {
  10950.   auto res = isl_map_flatten(copy());
  10951.   return manage(res);
  10952. }
  10953.  
  10954. isl::map map::flatten_domain() const
  10955. {
  10956.   auto res = isl_map_flatten_domain(copy());
  10957.   return manage(res);
  10958. }
  10959.  
  10960. isl::map map::flatten_range() const
  10961. {
  10962.   auto res = isl_map_flatten_range(copy());
  10963.   return manage(res);
  10964. }
  10965.  
  10966. isl::map map::floordiv_val(isl::val d) const
  10967. {
  10968.   auto res = isl_map_floordiv_val(copy(), d.release());
  10969.   return manage(res);
  10970. }
  10971.  
  10972. isl::map map::floordiv_val(long d) const
  10973. {
  10974.   return this->floordiv_val(isl::val(ctx(), d));
  10975. }
  10976.  
  10977. stat map::foreach_basic_map(const std::function<stat(isl::basic_map)> &fn) const
  10978. {
  10979.   struct fn_data {
  10980.     std::function<stat(isl::basic_map)> func;
  10981.   } fn_data = { fn };
  10982.   auto fn_lambda = [](isl_basic_map *arg_0, void *arg_1) -> isl_stat {
  10983.     auto *data = static_cast<struct fn_data *>(arg_1);
  10984.     auto ret = (data->func)(manage(arg_0));
  10985.     return ret.release();
  10986.   };
  10987.   auto res = isl_map_foreach_basic_map(get(), fn_lambda, &fn_data);
  10988.   return manage(res);
  10989. }
  10990.  
  10991. stat map::foreach_map(const std::function<stat(isl::map)> &fn) const
  10992. {
  10993.   return isl::union_map(*this).foreach_map(fn);
  10994. }
  10995.  
  10996. isl::map map::from_aff(isl::aff aff)
  10997. {
  10998.   auto res = isl_map_from_aff(aff.release());
  10999.   return manage(res);
  11000. }
  11001.  
  11002. isl::map map::from_domain(isl::set set)
  11003. {
  11004.   auto res = isl_map_from_domain(set.release());
  11005.   return manage(res);
  11006. }
  11007.  
  11008. isl::map map::from_domain_and_range(isl::set domain, isl::set range)
  11009. {
  11010.   auto res = isl_map_from_domain_and_range(domain.release(), range.release());
  11011.   return manage(res);
  11012. }
  11013.  
  11014. isl::map map::from_multi_aff(isl::multi_aff maff)
  11015. {
  11016.   auto res = isl_map_from_multi_aff(maff.release());
  11017.   return manage(res);
  11018. }
  11019.  
  11020. isl::map map::from_pw_aff(isl::pw_aff pwaff)
  11021. {
  11022.   auto res = isl_map_from_pw_aff(pwaff.release());
  11023.   return manage(res);
  11024. }
  11025.  
  11026. isl::map map::from_range(isl::set set)
  11027. {
  11028.   auto res = isl_map_from_range(set.release());
  11029.   return manage(res);
  11030. }
  11031.  
  11032. isl::map map::from_union_map(isl::union_map umap)
  11033. {
  11034.   auto res = isl_map_from_union_map(umap.release());
  11035.   return manage(res);
  11036. }
  11037.  
  11038. isl::map map::gist(isl::map context) const
  11039. {
  11040.   auto res = isl_map_gist(copy(), context.release());
  11041.   return manage(res);
  11042. }
  11043.  
  11044. isl::union_map map::gist(const isl::union_map &context) const
  11045. {
  11046.   return isl::union_map(*this).gist(context);
  11047. }
  11048.  
  11049. isl::map map::gist(const isl::basic_map &context) const
  11050. {
  11051.   return this->gist(isl::map(context));
  11052. }
  11053.  
  11054. isl::map map::gist_domain(isl::set context) const
  11055. {
  11056.   auto res = isl_map_gist_domain(copy(), context.release());
  11057.   return manage(res);
  11058. }
  11059.  
  11060. isl::union_map map::gist_domain(const isl::union_set &uset) const
  11061. {
  11062.   return isl::union_map(*this).gist_domain(uset);
  11063. }
  11064.  
  11065. isl::map map::gist_domain(const isl::basic_set &context) const
  11066. {
  11067.   return this->gist_domain(isl::set(context));
  11068. }
  11069.  
  11070. isl::map map::gist_domain(const isl::point &context) const
  11071. {
  11072.   return this->gist_domain(isl::set(context));
  11073. }
  11074.  
  11075. isl::map map::gist_params(isl::set context) const
  11076. {
  11077.   auto res = isl_map_gist_params(copy(), context.release());
  11078.   return manage(res);
  11079. }
  11080.  
  11081. isl::union_map map::gist_range(const isl::union_set &uset) const
  11082. {
  11083.   return isl::union_map(*this).gist_range(uset);
  11084. }
  11085.  
  11086. boolean map::has_domain_tuple_id() const
  11087. {
  11088.   auto res = isl_map_has_domain_tuple_id(get());
  11089.   return manage(res);
  11090. }
  11091.  
  11092. boolean map::has_equal_space(const isl::map &map2) const
  11093. {
  11094.   auto res = isl_map_has_equal_space(get(), map2.get());
  11095.   return manage(res);
  11096. }
  11097.  
  11098. boolean map::has_range_tuple_id() const
  11099. {
  11100.   auto res = isl_map_has_range_tuple_id(get());
  11101.   return manage(res);
  11102. }
  11103.  
  11104. boolean map::has_tuple_id(isl::dim type) const
  11105. {
  11106.   auto res = isl_map_has_tuple_id(get(), static_cast<enum isl_dim_type>(type));
  11107.   return manage(res);
  11108. }
  11109.  
  11110. boolean map::has_tuple_name(isl::dim type) const
  11111. {
  11112.   auto res = isl_map_has_tuple_name(get(), static_cast<enum isl_dim_type>(type));
  11113.   return manage(res);
  11114. }
  11115.  
  11116. isl::map map::identity(isl::space space)
  11117. {
  11118.   auto res = isl_map_identity(space.release());
  11119.   return manage(res);
  11120. }
  11121.  
  11122. isl::map map::intersect(isl::map map2) const
  11123. {
  11124.   auto res = isl_map_intersect(copy(), map2.release());
  11125.   return manage(res);
  11126. }
  11127.  
  11128. isl::union_map map::intersect(const isl::union_map &umap2) const
  11129. {
  11130.   return isl::union_map(*this).intersect(umap2);
  11131. }
  11132.  
  11133. isl::map map::intersect(const isl::basic_map &map2) const
  11134. {
  11135.   return this->intersect(isl::map(map2));
  11136. }
  11137.  
  11138. isl::map map::intersect_domain(isl::set set) const
  11139. {
  11140.   auto res = isl_map_intersect_domain(copy(), set.release());
  11141.   return manage(res);
  11142. }
  11143.  
  11144. isl::union_map map::intersect_domain(const isl::space &space) const
  11145. {
  11146.   return isl::union_map(*this).intersect_domain(space);
  11147. }
  11148.  
  11149. isl::union_map map::intersect_domain(const isl::union_set &uset) const
  11150. {
  11151.   return isl::union_map(*this).intersect_domain(uset);
  11152. }
  11153.  
  11154. isl::map map::intersect_domain(const isl::basic_set &set) const
  11155. {
  11156.   return this->intersect_domain(isl::set(set));
  11157. }
  11158.  
  11159. isl::map map::intersect_domain(const isl::point &set) const
  11160. {
  11161.   return this->intersect_domain(isl::set(set));
  11162. }
  11163.  
  11164. isl::map map::intersect_domain_factor_domain(isl::map factor) const
  11165. {
  11166.   auto res = isl_map_intersect_domain_factor_domain(copy(), factor.release());
  11167.   return manage(res);
  11168. }
  11169.  
  11170. isl::union_map map::intersect_domain_factor_domain(const isl::union_map &factor) const
  11171. {
  11172.   return isl::union_map(*this).intersect_domain_factor_domain(factor);
  11173. }
  11174.  
  11175. isl::map map::intersect_domain_factor_domain(const isl::basic_map &factor) const
  11176. {
  11177.   return this->intersect_domain_factor_domain(isl::map(factor));
  11178. }
  11179.  
  11180. isl::map map::intersect_domain_factor_range(isl::map factor) const
  11181. {
  11182.   auto res = isl_map_intersect_domain_factor_range(copy(), factor.release());
  11183.   return manage(res);
  11184. }
  11185.  
  11186. isl::union_map map::intersect_domain_factor_range(const isl::union_map &factor) const
  11187. {
  11188.   return isl::union_map(*this).intersect_domain_factor_range(factor);
  11189. }
  11190.  
  11191. isl::map map::intersect_domain_factor_range(const isl::basic_map &factor) const
  11192. {
  11193.   return this->intersect_domain_factor_range(isl::map(factor));
  11194. }
  11195.  
  11196. isl::map map::intersect_params(isl::set params) const
  11197. {
  11198.   auto res = isl_map_intersect_params(copy(), params.release());
  11199.   return manage(res);
  11200. }
  11201.  
  11202. isl::map map::intersect_range(isl::set set) const
  11203. {
  11204.   auto res = isl_map_intersect_range(copy(), set.release());
  11205.   return manage(res);
  11206. }
  11207.  
  11208. isl::union_map map::intersect_range(const isl::space &space) const
  11209. {
  11210.   return isl::union_map(*this).intersect_range(space);
  11211. }
  11212.  
  11213. isl::union_map map::intersect_range(const isl::union_set &uset) const
  11214. {
  11215.   return isl::union_map(*this).intersect_range(uset);
  11216. }
  11217.  
  11218. isl::map map::intersect_range(const isl::basic_set &set) const
  11219. {
  11220.   return this->intersect_range(isl::set(set));
  11221. }
  11222.  
  11223. isl::map map::intersect_range(const isl::point &set) const
  11224. {
  11225.   return this->intersect_range(isl::set(set));
  11226. }
  11227.  
  11228. isl::map map::intersect_range_factor_domain(isl::map factor) const
  11229. {
  11230.   auto res = isl_map_intersect_range_factor_domain(copy(), factor.release());
  11231.   return manage(res);
  11232. }
  11233.  
  11234. isl::union_map map::intersect_range_factor_domain(const isl::union_map &factor) const
  11235. {
  11236.   return isl::union_map(*this).intersect_range_factor_domain(factor);
  11237. }
  11238.  
  11239. isl::map map::intersect_range_factor_domain(const isl::basic_map &factor) const
  11240. {
  11241.   return this->intersect_range_factor_domain(isl::map(factor));
  11242. }
  11243.  
  11244. isl::map map::intersect_range_factor_range(isl::map factor) const
  11245. {
  11246.   auto res = isl_map_intersect_range_factor_range(copy(), factor.release());
  11247.   return manage(res);
  11248. }
  11249.  
  11250. isl::union_map map::intersect_range_factor_range(const isl::union_map &factor) const
  11251. {
  11252.   return isl::union_map(*this).intersect_range_factor_range(factor);
  11253. }
  11254.  
  11255. isl::map map::intersect_range_factor_range(const isl::basic_map &factor) const
  11256. {
  11257.   return this->intersect_range_factor_range(isl::map(factor));
  11258. }
  11259.  
  11260. boolean map::involves_dims(isl::dim type, unsigned int first, unsigned int n) const
  11261. {
  11262.   auto res = isl_map_involves_dims(get(), static_cast<enum isl_dim_type>(type), first, n);
  11263.   return manage(res);
  11264. }
  11265.  
  11266. boolean map::is_bijective() const
  11267. {
  11268.   auto res = isl_map_is_bijective(get());
  11269.   return manage(res);
  11270. }
  11271.  
  11272. boolean map::is_disjoint(const isl::map &map2) const
  11273. {
  11274.   auto res = isl_map_is_disjoint(get(), map2.get());
  11275.   return manage(res);
  11276. }
  11277.  
  11278. boolean map::is_disjoint(const isl::union_map &umap2) const
  11279. {
  11280.   return isl::union_map(*this).is_disjoint(umap2);
  11281. }
  11282.  
  11283. boolean map::is_disjoint(const isl::basic_map &map2) const
  11284. {
  11285.   return this->is_disjoint(isl::map(map2));
  11286. }
  11287.  
  11288. boolean map::is_empty() const
  11289. {
  11290.   auto res = isl_map_is_empty(get());
  11291.   return manage(res);
  11292. }
  11293.  
  11294. boolean map::is_equal(const isl::map &map2) const
  11295. {
  11296.   auto res = isl_map_is_equal(get(), map2.get());
  11297.   return manage(res);
  11298. }
  11299.  
  11300. boolean map::is_equal(const isl::union_map &umap2) const
  11301. {
  11302.   return isl::union_map(*this).is_equal(umap2);
  11303. }
  11304.  
  11305. boolean map::is_equal(const isl::basic_map &map2) const
  11306. {
  11307.   return this->is_equal(isl::map(map2));
  11308. }
  11309.  
  11310. boolean map::is_injective() const
  11311. {
  11312.   auto res = isl_map_is_injective(get());
  11313.   return manage(res);
  11314. }
  11315.  
  11316. boolean map::is_single_valued() const
  11317. {
  11318.   auto res = isl_map_is_single_valued(get());
  11319.   return manage(res);
  11320. }
  11321.  
  11322. boolean map::is_strict_subset(const isl::map &map2) const
  11323. {
  11324.   auto res = isl_map_is_strict_subset(get(), map2.get());
  11325.   return manage(res);
  11326. }
  11327.  
  11328. boolean map::is_strict_subset(const isl::union_map &umap2) const
  11329. {
  11330.   return isl::union_map(*this).is_strict_subset(umap2);
  11331. }
  11332.  
  11333. boolean map::is_strict_subset(const isl::basic_map &map2) const
  11334. {
  11335.   return this->is_strict_subset(isl::map(map2));
  11336. }
  11337.  
  11338. boolean map::is_subset(const isl::map &map2) const
  11339. {
  11340.   auto res = isl_map_is_subset(get(), map2.get());
  11341.   return manage(res);
  11342. }
  11343.  
  11344. boolean map::is_subset(const isl::union_map &umap2) const
  11345. {
  11346.   return isl::union_map(*this).is_subset(umap2);
  11347. }
  11348.  
  11349. boolean map::is_subset(const isl::basic_map &map2) const
  11350. {
  11351.   return this->is_subset(isl::map(map2));
  11352. }
  11353.  
  11354. boolean map::isa_map() const
  11355. {
  11356.   return isl::union_map(*this).isa_map();
  11357. }
  11358.  
  11359. isl::map map::lex_ge(isl::space set_space)
  11360. {
  11361.   auto res = isl_map_lex_ge(set_space.release());
  11362.   return manage(res);
  11363. }
  11364.  
  11365. isl::map map::lex_ge_at(isl::multi_pw_aff mpa) const
  11366. {
  11367.   auto res = isl_map_lex_ge_at_multi_pw_aff(copy(), mpa.release());
  11368.   return manage(res);
  11369. }
  11370.  
  11371. isl::map map::lex_gt(isl::space set_space)
  11372. {
  11373.   auto res = isl_map_lex_gt(set_space.release());
  11374.   return manage(res);
  11375. }
  11376.  
  11377. isl::map map::lex_gt_at(isl::multi_pw_aff mpa) const
  11378. {
  11379.   auto res = isl_map_lex_gt_at_multi_pw_aff(copy(), mpa.release());
  11380.   return manage(res);
  11381. }
  11382.  
  11383. isl::map map::lex_le(isl::space set_space)
  11384. {
  11385.   auto res = isl_map_lex_le(set_space.release());
  11386.   return manage(res);
  11387. }
  11388.  
  11389. isl::map map::lex_le_at(isl::multi_pw_aff mpa) const
  11390. {
  11391.   auto res = isl_map_lex_le_at_multi_pw_aff(copy(), mpa.release());
  11392.   return manage(res);
  11393. }
  11394.  
  11395. isl::map map::lex_lt(isl::space set_space)
  11396. {
  11397.   auto res = isl_map_lex_lt(set_space.release());
  11398.   return manage(res);
  11399. }
  11400.  
  11401. isl::map map::lex_lt_at(isl::multi_pw_aff mpa) const
  11402. {
  11403.   auto res = isl_map_lex_lt_at_multi_pw_aff(copy(), mpa.release());
  11404.   return manage(res);
  11405. }
  11406.  
  11407. isl::map map::lexmax() const
  11408. {
  11409.   auto res = isl_map_lexmax(copy());
  11410.   return manage(res);
  11411. }
  11412.  
  11413. isl::pw_multi_aff map::lexmax_pw_multi_aff() const
  11414. {
  11415.   auto res = isl_map_lexmax_pw_multi_aff(copy());
  11416.   return manage(res);
  11417. }
  11418.  
  11419. isl::map map::lexmin() const
  11420. {
  11421.   auto res = isl_map_lexmin(copy());
  11422.   return manage(res);
  11423. }
  11424.  
  11425. isl::pw_multi_aff map::lexmin_pw_multi_aff() const
  11426. {
  11427.   auto res = isl_map_lexmin_pw_multi_aff(copy());
  11428.   return manage(res);
  11429. }
  11430.  
  11431. isl::map map::lower_bound(isl::multi_pw_aff lower) const
  11432. {
  11433.   auto res = isl_map_lower_bound_multi_pw_aff(copy(), lower.release());
  11434.   return manage(res);
  11435. }
  11436.  
  11437. isl::map map::lower_bound_si(isl::dim type, unsigned int pos, int value) const
  11438. {
  11439.   auto res = isl_map_lower_bound_si(copy(), static_cast<enum isl_dim_type>(type), pos, value);
  11440.   return manage(res);
  11441. }
  11442.  
  11443. isl::map_list map::map_list() const
  11444. {
  11445.   return isl::union_map(*this).map_list();
  11446. }
  11447.  
  11448. isl::multi_pw_aff map::max_multi_pw_aff() const
  11449. {
  11450.   auto res = isl_map_max_multi_pw_aff(copy());
  11451.   return manage(res);
  11452. }
  11453.  
  11454. isl::multi_pw_aff map::min_multi_pw_aff() const
  11455. {
  11456.   auto res = isl_map_min_multi_pw_aff(copy());
  11457.   return manage(res);
  11458. }
  11459.  
  11460. isl::map map::move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const
  11461. {
  11462.   auto res = isl_map_move_dims(copy(), static_cast<enum isl_dim_type>(dst_type), dst_pos, static_cast<enum isl_dim_type>(src_type), src_pos, n);
  11463.   return manage(res);
  11464. }
  11465.  
  11466. class size map::n_basic_map() const
  11467. {
  11468.   auto res = isl_map_n_basic_map(get());
  11469.   return manage(res);
  11470. }
  11471.  
  11472. isl::map map::order_lt(isl::dim type1, int pos1, isl::dim type2, int pos2) const
  11473. {
  11474.   auto res = isl_map_order_lt(copy(), static_cast<enum isl_dim_type>(type1), pos1, static_cast<enum isl_dim_type>(type2), pos2);
  11475.   return manage(res);
  11476. }
  11477.  
  11478. isl::set map::params() const
  11479. {
  11480.   return isl::union_map(*this).params();
  11481. }
  11482.  
  11483. isl::basic_map map::polyhedral_hull() const
  11484. {
  11485.   auto res = isl_map_polyhedral_hull(copy());
  11486.   return manage(res);
  11487. }
  11488.  
  11489. isl::map map::preimage_domain(isl::multi_aff ma) const
  11490. {
  11491.   auto res = isl_map_preimage_domain_multi_aff(copy(), ma.release());
  11492.   return manage(res);
  11493. }
  11494.  
  11495. isl::map map::preimage_domain(isl::multi_pw_aff mpa) const
  11496. {
  11497.   auto res = isl_map_preimage_domain_multi_pw_aff(copy(), mpa.release());
  11498.   return manage(res);
  11499. }
  11500.  
  11501. isl::map map::preimage_domain(isl::pw_multi_aff pma) const
  11502. {
  11503.   auto res = isl_map_preimage_domain_pw_multi_aff(copy(), pma.release());
  11504.   return manage(res);
  11505. }
  11506.  
  11507. isl::union_map map::preimage_domain(const isl::union_pw_multi_aff &upma) const
  11508. {
  11509.   return isl::union_map(*this).preimage_domain(upma);
  11510. }
  11511.  
  11512. isl::map map::preimage_range(isl::multi_aff ma) const
  11513. {
  11514.   auto res = isl_map_preimage_range_multi_aff(copy(), ma.release());
  11515.   return manage(res);
  11516. }
  11517.  
  11518. isl::map map::preimage_range(isl::pw_multi_aff pma) const
  11519. {
  11520.   auto res = isl_map_preimage_range_pw_multi_aff(copy(), pma.release());
  11521.   return manage(res);
  11522. }
  11523.  
  11524. isl::union_map map::preimage_range(const isl::union_pw_multi_aff &upma) const
  11525. {
  11526.   return isl::union_map(*this).preimage_range(upma);
  11527. }
  11528.  
  11529. isl::map map::product(isl::map map2) const
  11530. {
  11531.   auto res = isl_map_product(copy(), map2.release());
  11532.   return manage(res);
  11533. }
  11534.  
  11535. isl::union_map map::product(const isl::union_map &umap2) const
  11536. {
  11537.   return isl::union_map(*this).product(umap2);
  11538. }
  11539.  
  11540. isl::map map::product(const isl::basic_map &map2) const
  11541. {
  11542.   return this->product(isl::map(map2));
  11543. }
  11544.  
  11545. isl::map map::project_out(isl::dim type, unsigned int first, unsigned int n) const
  11546. {
  11547.   auto res = isl_map_project_out(copy(), static_cast<enum isl_dim_type>(type), first, n);
  11548.   return manage(res);
  11549. }
  11550.  
  11551. isl::map map::project_out_all_params() const
  11552. {
  11553.   auto res = isl_map_project_out_all_params(copy());
  11554.   return manage(res);
  11555. }
  11556.  
  11557. isl::set map::range() const
  11558. {
  11559.   auto res = isl_map_range(copy());
  11560.   return manage(res);
  11561. }
  11562.  
  11563. isl::map map::range_factor_domain() const
  11564. {
  11565.   auto res = isl_map_range_factor_domain(copy());
  11566.   return manage(res);
  11567. }
  11568.  
  11569. isl::map map::range_factor_range() const
  11570. {
  11571.   auto res = isl_map_range_factor_range(copy());
  11572.   return manage(res);
  11573. }
  11574.  
  11575. isl::fixed_box map::range_lattice_tile() const
  11576. {
  11577.   auto res = isl_map_get_range_lattice_tile(get());
  11578.   return manage(res);
  11579. }
  11580.  
  11581. isl::fixed_box map::get_range_lattice_tile() const
  11582. {
  11583.   return range_lattice_tile();
  11584. }
  11585.  
  11586. isl::map map::range_map() const
  11587. {
  11588.   auto res = isl_map_range_map(copy());
  11589.   return manage(res);
  11590. }
  11591.  
  11592. isl::map map::range_product(isl::map map2) const
  11593. {
  11594.   auto res = isl_map_range_product(copy(), map2.release());
  11595.   return manage(res);
  11596. }
  11597.  
  11598. isl::union_map map::range_product(const isl::union_map &umap2) const
  11599. {
  11600.   return isl::union_map(*this).range_product(umap2);
  11601. }
  11602.  
  11603. isl::map map::range_product(const isl::basic_map &map2) const
  11604. {
  11605.   return this->range_product(isl::map(map2));
  11606. }
  11607.  
  11608. isl::map map::range_reverse() const
  11609. {
  11610.   auto res = isl_map_range_reverse(copy());
  11611.   return manage(res);
  11612. }
  11613.  
  11614. isl::fixed_box map::range_simple_fixed_box_hull() const
  11615. {
  11616.   auto res = isl_map_get_range_simple_fixed_box_hull(get());
  11617.   return manage(res);
  11618. }
  11619.  
  11620. isl::fixed_box map::get_range_simple_fixed_box_hull() const
  11621. {
  11622.   return range_simple_fixed_box_hull();
  11623. }
  11624.  
  11625. class size map::range_tuple_dim() const
  11626. {
  11627.   auto res = isl_map_range_tuple_dim(get());
  11628.   return manage(res);
  11629. }
  11630.  
  11631. isl::id map::range_tuple_id() const
  11632. {
  11633.   auto res = isl_map_get_range_tuple_id(get());
  11634.   return manage(res);
  11635. }
  11636.  
  11637. isl::id map::get_range_tuple_id() const
  11638. {
  11639.   return range_tuple_id();
  11640. }
  11641.  
  11642. isl::map map::reverse() const
  11643. {
  11644.   auto res = isl_map_reverse(copy());
  11645.   return manage(res);
  11646. }
  11647.  
  11648. isl::basic_map map::sample() const
  11649. {
  11650.   auto res = isl_map_sample(copy());
  11651.   return manage(res);
  11652. }
  11653.  
  11654. isl::map map::set_domain_tuple(isl::id id) const
  11655. {
  11656.   auto res = isl_map_set_domain_tuple_id(copy(), id.release());
  11657.   return manage(res);
  11658. }
  11659.  
  11660. isl::map map::set_domain_tuple(const std::string &id) const
  11661. {
  11662.   return this->set_domain_tuple(isl::id(ctx(), id));
  11663. }
  11664.  
  11665. isl::map map::set_range_tuple(isl::id id) const
  11666. {
  11667.   auto res = isl_map_set_range_tuple_id(copy(), id.release());
  11668.   return manage(res);
  11669. }
  11670.  
  11671. isl::map map::set_range_tuple(const std::string &id) const
  11672. {
  11673.   return this->set_range_tuple(isl::id(ctx(), id));
  11674. }
  11675.  
  11676. isl::map map::set_tuple_id(isl::dim type, isl::id id) const
  11677. {
  11678.   auto res = isl_map_set_tuple_id(copy(), static_cast<enum isl_dim_type>(type), id.release());
  11679.   return manage(res);
  11680. }
  11681.  
  11682. isl::map map::set_tuple_id(isl::dim type, const std::string &id) const
  11683. {
  11684.   return this->set_tuple_id(type, isl::id(ctx(), id));
  11685. }
  11686.  
  11687. isl::space map::space() const
  11688. {
  11689.   auto res = isl_map_get_space(get());
  11690.   return manage(res);
  11691. }
  11692.  
  11693. isl::space map::get_space() const
  11694. {
  11695.   return space();
  11696. }
  11697.  
  11698. isl::map map::subtract(isl::map map2) const
  11699. {
  11700.   auto res = isl_map_subtract(copy(), map2.release());
  11701.   return manage(res);
  11702. }
  11703.  
  11704. isl::union_map map::subtract(const isl::union_map &umap2) const
  11705. {
  11706.   return isl::union_map(*this).subtract(umap2);
  11707. }
  11708.  
  11709. isl::map map::subtract(const isl::basic_map &map2) const
  11710. {
  11711.   return this->subtract(isl::map(map2));
  11712. }
  11713.  
  11714. isl::union_map map::subtract_domain(const isl::union_set &dom) const
  11715. {
  11716.   return isl::union_map(*this).subtract_domain(dom);
  11717. }
  11718.  
  11719. isl::union_map map::subtract_range(const isl::union_set &dom) const
  11720. {
  11721.   return isl::union_map(*this).subtract_range(dom);
  11722. }
  11723.  
  11724. isl::map map::sum(isl::map map2) const
  11725. {
  11726.   auto res = isl_map_sum(copy(), map2.release());
  11727.   return manage(res);
  11728. }
  11729.  
  11730. isl::map_list map::to_list() const
  11731. {
  11732.   auto res = isl_map_to_list(copy());
  11733.   return manage(res);
  11734. }
  11735.  
  11736. isl::union_map map::to_union_map() const
  11737. {
  11738.   auto res = isl_map_to_union_map(copy());
  11739.   return manage(res);
  11740. }
  11741.  
  11742. isl::id map::tuple_id(isl::dim type) const
  11743. {
  11744.   auto res = isl_map_get_tuple_id(get(), static_cast<enum isl_dim_type>(type));
  11745.   return manage(res);
  11746. }
  11747.  
  11748. isl::id map::get_tuple_id(isl::dim type) const
  11749. {
  11750.   return tuple_id(type);
  11751. }
  11752.  
  11753. isl::map map::uncurry() const
  11754. {
  11755.   auto res = isl_map_uncurry(copy());
  11756.   return manage(res);
  11757. }
  11758.  
  11759. isl::map map::unite(isl::map map2) const
  11760. {
  11761.   auto res = isl_map_union(copy(), map2.release());
  11762.   return manage(res);
  11763. }
  11764.  
  11765. isl::union_map map::unite(const isl::union_map &umap2) const
  11766. {
  11767.   return isl::union_map(*this).unite(umap2);
  11768. }
  11769.  
  11770. isl::map map::unite(const isl::basic_map &map2) const
  11771. {
  11772.   return this->unite(isl::map(map2));
  11773. }
  11774.  
  11775. isl::map map::universe(isl::space space)
  11776. {
  11777.   auto res = isl_map_universe(space.release());
  11778.   return manage(res);
  11779. }
  11780.  
  11781. isl::basic_map map::unshifted_simple_hull() const
  11782. {
  11783.   auto res = isl_map_unshifted_simple_hull(copy());
  11784.   return manage(res);
  11785. }
  11786.  
  11787. isl::map map::upper_bound(isl::multi_pw_aff upper) const
  11788. {
  11789.   auto res = isl_map_upper_bound_multi_pw_aff(copy(), upper.release());
  11790.   return manage(res);
  11791. }
  11792.  
  11793. isl::map map::upper_bound_si(isl::dim type, unsigned int pos, int value) const
  11794. {
  11795.   auto res = isl_map_upper_bound_si(copy(), static_cast<enum isl_dim_type>(type), pos, value);
  11796.   return manage(res);
  11797. }
  11798.  
  11799. isl::set map::wrap() const
  11800. {
  11801.   auto res = isl_map_wrap(copy());
  11802.   return manage(res);
  11803. }
  11804.  
  11805. isl::map map::zip() const
  11806. {
  11807.   auto res = isl_map_zip(copy());
  11808.   return manage(res);
  11809. }
  11810.  
  11811. inline std::ostream &operator<<(std::ostream &os, const map &obj)
  11812. {
  11813.   char *str = isl_map_to_str(obj.get());
  11814.   if (!str) {
  11815.     os.setstate(std::ios_base::badbit);
  11816.     return os;
  11817.   }
  11818.   os << str;
  11819.   free(str);
  11820.   return os;
  11821. }
  11822.  
  11823. // implementations for isl::map_list
  11824. map_list manage(__isl_take isl_map_list *ptr) {
  11825.   return map_list(ptr);
  11826. }
  11827. map_list manage_copy(__isl_keep isl_map_list *ptr) {
  11828.   ptr = isl_map_list_copy(ptr);
  11829.   return map_list(ptr);
  11830. }
  11831.  
  11832. map_list::map_list()
  11833.     : ptr(nullptr) {}
  11834.  
  11835. map_list::map_list(const map_list &obj)
  11836.     : ptr(nullptr)
  11837. {
  11838.   ptr = obj.copy();
  11839. }
  11840.  
  11841. map_list::map_list(__isl_take isl_map_list *ptr)
  11842.     : ptr(ptr) {}
  11843.  
  11844. map_list::map_list(isl::ctx ctx, int n)
  11845. {
  11846.   auto res = isl_map_list_alloc(ctx.release(), n);
  11847.   ptr = res;
  11848. }
  11849.  
  11850. map_list::map_list(isl::map el)
  11851. {
  11852.   auto res = isl_map_list_from_map(el.release());
  11853.   ptr = res;
  11854. }
  11855.  
  11856. map_list::map_list(isl::ctx ctx, const std::string &str)
  11857. {
  11858.   auto res = isl_map_list_read_from_str(ctx.release(), str.c_str());
  11859.   ptr = res;
  11860. }
  11861.  
  11862. map_list &map_list::operator=(map_list obj) {
  11863.   std::swap(this->ptr, obj.ptr);
  11864.   return *this;
  11865. }
  11866.  
  11867. map_list::~map_list() {
  11868.   if (ptr)
  11869.     isl_map_list_free(ptr);
  11870. }
  11871.  
  11872. __isl_give isl_map_list *map_list::copy() const & {
  11873.   return isl_map_list_copy(ptr);
  11874. }
  11875.  
  11876. __isl_keep isl_map_list *map_list::get() const {
  11877.   return ptr;
  11878. }
  11879.  
  11880. __isl_give isl_map_list *map_list::release() {
  11881.   isl_map_list *tmp = ptr;
  11882.   ptr = nullptr;
  11883.   return tmp;
  11884. }
  11885.  
  11886. bool map_list::is_null() const {
  11887.   return ptr == nullptr;
  11888. }
  11889.  
  11890. isl::ctx map_list::ctx() const {
  11891.   return isl::ctx(isl_map_list_get_ctx(ptr));
  11892. }
  11893.  
  11894. isl::map_list map_list::add(isl::map el) const
  11895. {
  11896.   auto res = isl_map_list_add(copy(), el.release());
  11897.   return manage(res);
  11898. }
  11899.  
  11900. isl::map map_list::at(int index) const
  11901. {
  11902.   auto res = isl_map_list_get_at(get(), index);
  11903.   return manage(res);
  11904. }
  11905.  
  11906. isl::map map_list::get_at(int index) const
  11907. {
  11908.   return at(index);
  11909. }
  11910.  
  11911. isl::map_list map_list::clear() const
  11912. {
  11913.   auto res = isl_map_list_clear(copy());
  11914.   return manage(res);
  11915. }
  11916.  
  11917. isl::map_list map_list::concat(isl::map_list list2) const
  11918. {
  11919.   auto res = isl_map_list_concat(copy(), list2.release());
  11920.   return manage(res);
  11921. }
  11922.  
  11923. isl::map_list map_list::drop(unsigned int first, unsigned int n) const
  11924. {
  11925.   auto res = isl_map_list_drop(copy(), first, n);
  11926.   return manage(res);
  11927. }
  11928.  
  11929. stat map_list::foreach(const std::function<stat(isl::map)> &fn) const
  11930. {
  11931.   struct fn_data {
  11932.     std::function<stat(isl::map)> func;
  11933.   } fn_data = { fn };
  11934.   auto fn_lambda = [](isl_map *arg_0, void *arg_1) -> isl_stat {
  11935.     auto *data = static_cast<struct fn_data *>(arg_1);
  11936.     auto ret = (data->func)(manage(arg_0));
  11937.     return ret.release();
  11938.   };
  11939.   auto res = isl_map_list_foreach(get(), fn_lambda, &fn_data);
  11940.   return manage(res);
  11941. }
  11942.  
  11943. isl::map_list map_list::insert(unsigned int pos, isl::map el) const
  11944. {
  11945.   auto res = isl_map_list_insert(copy(), pos, el.release());
  11946.   return manage(res);
  11947. }
  11948.  
  11949. class size map_list::size() const
  11950. {
  11951.   auto res = isl_map_list_size(get());
  11952.   return manage(res);
  11953. }
  11954.  
  11955. inline std::ostream &operator<<(std::ostream &os, const map_list &obj)
  11956. {
  11957.   char *str = isl_map_list_to_str(obj.get());
  11958.   if (!str) {
  11959.     os.setstate(std::ios_base::badbit);
  11960.     return os;
  11961.   }
  11962.   os << str;
  11963.   free(str);
  11964.   return os;
  11965. }
  11966.  
  11967. // implementations for isl::multi_aff
  11968. multi_aff manage(__isl_take isl_multi_aff *ptr) {
  11969.   return multi_aff(ptr);
  11970. }
  11971. multi_aff manage_copy(__isl_keep isl_multi_aff *ptr) {
  11972.   ptr = isl_multi_aff_copy(ptr);
  11973.   return multi_aff(ptr);
  11974. }
  11975.  
  11976. multi_aff::multi_aff()
  11977.     : ptr(nullptr) {}
  11978.  
  11979. multi_aff::multi_aff(const multi_aff &obj)
  11980.     : ptr(nullptr)
  11981. {
  11982.   ptr = obj.copy();
  11983. }
  11984.  
  11985. multi_aff::multi_aff(__isl_take isl_multi_aff *ptr)
  11986.     : ptr(ptr) {}
  11987.  
  11988. multi_aff::multi_aff(isl::aff aff)
  11989. {
  11990.   auto res = isl_multi_aff_from_aff(aff.release());
  11991.   ptr = res;
  11992. }
  11993.  
  11994. multi_aff::multi_aff(isl::space space, isl::aff_list list)
  11995. {
  11996.   auto res = isl_multi_aff_from_aff_list(space.release(), list.release());
  11997.   ptr = res;
  11998. }
  11999.  
  12000. multi_aff::multi_aff(isl::ctx ctx, const std::string &str)
  12001. {
  12002.   auto res = isl_multi_aff_read_from_str(ctx.release(), str.c_str());
  12003.   ptr = res;
  12004. }
  12005.  
  12006. multi_aff &multi_aff::operator=(multi_aff obj) {
  12007.   std::swap(this->ptr, obj.ptr);
  12008.   return *this;
  12009. }
  12010.  
  12011. multi_aff::~multi_aff() {
  12012.   if (ptr)
  12013.     isl_multi_aff_free(ptr);
  12014. }
  12015.  
  12016. __isl_give isl_multi_aff *multi_aff::copy() const & {
  12017.   return isl_multi_aff_copy(ptr);
  12018. }
  12019.  
  12020. __isl_keep isl_multi_aff *multi_aff::get() const {
  12021.   return ptr;
  12022. }
  12023.  
  12024. __isl_give isl_multi_aff *multi_aff::release() {
  12025.   isl_multi_aff *tmp = ptr;
  12026.   ptr = nullptr;
  12027.   return tmp;
  12028. }
  12029.  
  12030. bool multi_aff::is_null() const {
  12031.   return ptr == nullptr;
  12032. }
  12033.  
  12034. isl::ctx multi_aff::ctx() const {
  12035.   return isl::ctx(isl_multi_aff_get_ctx(ptr));
  12036. }
  12037.  
  12038. isl::multi_aff multi_aff::add(isl::multi_aff multi2) const
  12039. {
  12040.   auto res = isl_multi_aff_add(copy(), multi2.release());
  12041.   return manage(res);
  12042. }
  12043.  
  12044. isl::multi_pw_aff multi_aff::add(const isl::multi_pw_aff &multi2) const
  12045. {
  12046.   return isl::pw_multi_aff(*this).add(multi2);
  12047. }
  12048.  
  12049. isl::multi_union_pw_aff multi_aff::add(const isl::multi_union_pw_aff &multi2) const
  12050. {
  12051.   return isl::pw_multi_aff(*this).add(multi2);
  12052. }
  12053.  
  12054. isl::pw_multi_aff multi_aff::add(const isl::pw_multi_aff &pma2) const
  12055. {
  12056.   return isl::pw_multi_aff(*this).add(pma2);
  12057. }
  12058.  
  12059. isl::union_pw_multi_aff multi_aff::add(const isl::union_pw_multi_aff &upma2) const
  12060. {
  12061.   return isl::pw_multi_aff(*this).add(upma2);
  12062. }
  12063.  
  12064. isl::multi_aff multi_aff::add(const isl::aff &multi2) const
  12065. {
  12066.   return this->add(isl::multi_aff(multi2));
  12067. }
  12068.  
  12069. isl::multi_aff multi_aff::add_constant(isl::multi_val mv) const
  12070. {
  12071.   auto res = isl_multi_aff_add_constant_multi_val(copy(), mv.release());
  12072.   return manage(res);
  12073. }
  12074.  
  12075. isl::multi_aff multi_aff::add_constant(isl::val v) const
  12076. {
  12077.   auto res = isl_multi_aff_add_constant_val(copy(), v.release());
  12078.   return manage(res);
  12079. }
  12080.  
  12081. isl::multi_aff multi_aff::add_constant(long v) const
  12082. {
  12083.   return this->add_constant(isl::val(ctx(), v));
  12084. }
  12085.  
  12086. isl::union_pw_multi_aff multi_aff::add_pw_multi_aff(const isl::pw_multi_aff &pma) const
  12087. {
  12088.   return isl::pw_multi_aff(*this).add_pw_multi_aff(pma);
  12089. }
  12090.  
  12091. isl::union_pw_multi_aff multi_aff::apply(const isl::union_pw_multi_aff &upma2) const
  12092. {
  12093.   return isl::pw_multi_aff(*this).apply(upma2);
  12094. }
  12095.  
  12096. isl::map multi_aff::as_map() const
  12097. {
  12098.   auto res = isl_multi_aff_as_map(copy());
  12099.   return manage(res);
  12100. }
  12101.  
  12102. isl::multi_aff multi_aff::as_multi_aff() const
  12103. {
  12104.   return isl::pw_multi_aff(*this).as_multi_aff();
  12105. }
  12106.  
  12107. isl::multi_union_pw_aff multi_aff::as_multi_union_pw_aff() const
  12108. {
  12109.   return isl::pw_multi_aff(*this).as_multi_union_pw_aff();
  12110. }
  12111.  
  12112. isl::pw_multi_aff multi_aff::as_pw_multi_aff() const
  12113. {
  12114.   return isl::pw_multi_aff(*this).as_pw_multi_aff();
  12115. }
  12116.  
  12117. isl::set multi_aff::as_set() const
  12118. {
  12119.   auto res = isl_multi_aff_as_set(copy());
  12120.   return manage(res);
  12121. }
  12122.  
  12123. isl::union_map multi_aff::as_union_map() const
  12124. {
  12125.   return isl::pw_multi_aff(*this).as_union_map();
  12126. }
  12127.  
  12128. isl::aff multi_aff::at(int pos) const
  12129. {
  12130.   auto res = isl_multi_aff_get_at(get(), pos);
  12131.   return manage(res);
  12132. }
  12133.  
  12134. isl::aff multi_aff::get_at(int pos) const
  12135. {
  12136.   return at(pos);
  12137. }
  12138.  
  12139. isl::basic_set multi_aff::bind(isl::multi_id tuple) const
  12140. {
  12141.   auto res = isl_multi_aff_bind(copy(), tuple.release());
  12142.   return manage(res);
  12143. }
  12144.  
  12145. isl::multi_aff multi_aff::bind_domain(isl::multi_id tuple) const
  12146. {
  12147.   auto res = isl_multi_aff_bind_domain(copy(), tuple.release());
  12148.   return manage(res);
  12149. }
  12150.  
  12151. isl::multi_aff multi_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const
  12152. {
  12153.   auto res = isl_multi_aff_bind_domain_wrapped_domain(copy(), tuple.release());
  12154.   return manage(res);
  12155. }
  12156.  
  12157. isl::pw_multi_aff multi_aff::coalesce() const
  12158. {
  12159.   return isl::pw_multi_aff(*this).coalesce();
  12160. }
  12161.  
  12162. isl::multi_val multi_aff::constant_multi_val() const
  12163. {
  12164.   auto res = isl_multi_aff_get_constant_multi_val(get());
  12165.   return manage(res);
  12166. }
  12167.  
  12168. isl::multi_val multi_aff::get_constant_multi_val() const
  12169. {
  12170.   return constant_multi_val();
  12171. }
  12172.  
  12173. class size multi_aff::dim(isl::dim type) const
  12174. {
  12175.   auto res = isl_multi_aff_dim(get(), static_cast<enum isl_dim_type>(type));
  12176.   return manage(res);
  12177. }
  12178.  
  12179. isl::set multi_aff::domain() const
  12180. {
  12181.   return isl::pw_multi_aff(*this).domain();
  12182. }
  12183.  
  12184. isl::multi_aff multi_aff::domain_map(isl::space space)
  12185. {
  12186.   auto res = isl_multi_aff_domain_map(space.release());
  12187.   return manage(res);
  12188. }
  12189.  
  12190. isl::pw_multi_aff multi_aff::drop_dims(isl::dim type, unsigned int first, unsigned int n) const
  12191. {
  12192.   return isl::pw_multi_aff(*this).drop_dims(type, first, n);
  12193. }
  12194.  
  12195. isl::pw_multi_aff multi_aff::extract_pw_multi_aff(const isl::space &space) const
  12196. {
  12197.   return isl::pw_multi_aff(*this).extract_pw_multi_aff(space);
  12198. }
  12199.  
  12200. isl::multi_aff multi_aff::flat_range_product(isl::multi_aff multi2) const
  12201. {
  12202.   auto res = isl_multi_aff_flat_range_product(copy(), multi2.release());
  12203.   return manage(res);
  12204. }
  12205.  
  12206. isl::multi_pw_aff multi_aff::flat_range_product(const isl::multi_pw_aff &multi2) const
  12207. {
  12208.   return isl::pw_multi_aff(*this).flat_range_product(multi2);
  12209. }
  12210.  
  12211. isl::multi_union_pw_aff multi_aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const
  12212. {
  12213.   return isl::pw_multi_aff(*this).flat_range_product(multi2);
  12214. }
  12215.  
  12216. isl::pw_multi_aff multi_aff::flat_range_product(const isl::pw_multi_aff &pma2) const
  12217. {
  12218.   return isl::pw_multi_aff(*this).flat_range_product(pma2);
  12219. }
  12220.  
  12221. isl::union_pw_multi_aff multi_aff::flat_range_product(const isl::union_pw_multi_aff &upma2) const
  12222. {
  12223.   return isl::pw_multi_aff(*this).flat_range_product(upma2);
  12224. }
  12225.  
  12226. isl::multi_aff multi_aff::flat_range_product(const isl::aff &multi2) const
  12227. {
  12228.   return this->flat_range_product(isl::multi_aff(multi2));
  12229. }
  12230.  
  12231. isl::multi_aff multi_aff::floor() const
  12232. {
  12233.   auto res = isl_multi_aff_floor(copy());
  12234.   return manage(res);
  12235. }
  12236.  
  12237. stat multi_aff::foreach_piece(const std::function<stat(isl::set, isl::multi_aff)> &fn) const
  12238. {
  12239.   return isl::pw_multi_aff(*this).foreach_piece(fn);
  12240. }
  12241.  
  12242. isl::multi_aff multi_aff::gist(isl::set context) const
  12243. {
  12244.   auto res = isl_multi_aff_gist(copy(), context.release());
  12245.   return manage(res);
  12246. }
  12247.  
  12248. isl::union_pw_multi_aff multi_aff::gist(const isl::union_set &context) const
  12249. {
  12250.   return isl::pw_multi_aff(*this).gist(context);
  12251. }
  12252.  
  12253. isl::multi_aff multi_aff::gist(const isl::basic_set &context) const
  12254. {
  12255.   return this->gist(isl::set(context));
  12256. }
  12257.  
  12258. isl::multi_aff multi_aff::gist(const isl::point &context) const
  12259. {
  12260.   return this->gist(isl::set(context));
  12261. }
  12262.  
  12263. boolean multi_aff::has_range_tuple_id() const
  12264. {
  12265.   auto res = isl_multi_aff_has_range_tuple_id(get());
  12266.   return manage(res);
  12267. }
  12268.  
  12269. isl::multi_aff multi_aff::identity(isl::space space)
  12270. {
  12271.   auto res = isl_multi_aff_identity(space.release());
  12272.   return manage(res);
  12273. }
  12274.  
  12275. isl::multi_aff multi_aff::identity() const
  12276. {
  12277.   auto res = isl_multi_aff_identity_multi_aff(copy());
  12278.   return manage(res);
  12279. }
  12280.  
  12281. isl::multi_aff multi_aff::identity_on_domain(isl::space space)
  12282. {
  12283.   auto res = isl_multi_aff_identity_on_domain_space(space.release());
  12284.   return manage(res);
  12285. }
  12286.  
  12287. isl::multi_aff multi_aff::insert_domain(isl::space domain) const
  12288. {
  12289.   auto res = isl_multi_aff_insert_domain(copy(), domain.release());
  12290.   return manage(res);
  12291. }
  12292.  
  12293. isl::pw_multi_aff multi_aff::intersect_domain(const isl::set &set) const
  12294. {
  12295.   return isl::pw_multi_aff(*this).intersect_domain(set);
  12296. }
  12297.  
  12298. isl::union_pw_multi_aff multi_aff::intersect_domain(const isl::space &space) const
  12299. {
  12300.   return isl::pw_multi_aff(*this).intersect_domain(space);
  12301. }
  12302.  
  12303. isl::union_pw_multi_aff multi_aff::intersect_domain(const isl::union_set &uset) const
  12304. {
  12305.   return isl::pw_multi_aff(*this).intersect_domain(uset);
  12306. }
  12307.  
  12308. isl::union_pw_multi_aff multi_aff::intersect_domain_wrapped_domain(const isl::union_set &uset) const
  12309. {
  12310.   return isl::pw_multi_aff(*this).intersect_domain_wrapped_domain(uset);
  12311. }
  12312.  
  12313. isl::union_pw_multi_aff multi_aff::intersect_domain_wrapped_range(const isl::union_set &uset) const
  12314. {
  12315.   return isl::pw_multi_aff(*this).intersect_domain_wrapped_range(uset);
  12316. }
  12317.  
  12318. isl::pw_multi_aff multi_aff::intersect_params(const isl::set &set) const
  12319. {
  12320.   return isl::pw_multi_aff(*this).intersect_params(set);
  12321. }
  12322.  
  12323. boolean multi_aff::involves_locals() const
  12324. {
  12325.   auto res = isl_multi_aff_involves_locals(get());
  12326.   return manage(res);
  12327. }
  12328.  
  12329. boolean multi_aff::involves_nan() const
  12330. {
  12331.   auto res = isl_multi_aff_involves_nan(get());
  12332.   return manage(res);
  12333. }
  12334.  
  12335. boolean multi_aff::involves_param(const isl::id &id) const
  12336. {
  12337.   return isl::pw_multi_aff(*this).involves_param(id);
  12338. }
  12339.  
  12340. boolean multi_aff::involves_param(const std::string &id) const
  12341. {
  12342.   return this->involves_param(isl::id(ctx(), id));
  12343. }
  12344.  
  12345. boolean multi_aff::involves_param(const isl::id_list &list) const
  12346. {
  12347.   return isl::pw_multi_aff(*this).involves_param(list);
  12348. }
  12349.  
  12350. boolean multi_aff::isa_multi_aff() const
  12351. {
  12352.   return isl::pw_multi_aff(*this).isa_multi_aff();
  12353. }
  12354.  
  12355. boolean multi_aff::isa_pw_multi_aff() const
  12356. {
  12357.   return isl::pw_multi_aff(*this).isa_pw_multi_aff();
  12358. }
  12359.  
  12360. isl::aff_list multi_aff::list() const
  12361. {
  12362.   auto res = isl_multi_aff_get_list(get());
  12363.   return manage(res);
  12364. }
  12365.  
  12366. isl::aff_list multi_aff::get_list() const
  12367. {
  12368.   return list();
  12369. }
  12370.  
  12371. isl::multi_pw_aff multi_aff::max(const isl::multi_pw_aff &multi2) const
  12372. {
  12373.   return isl::pw_multi_aff(*this).max(multi2);
  12374. }
  12375.  
  12376. isl::multi_val multi_aff::max_multi_val() const
  12377. {
  12378.   return isl::pw_multi_aff(*this).max_multi_val();
  12379. }
  12380.  
  12381. isl::multi_pw_aff multi_aff::min(const isl::multi_pw_aff &multi2) const
  12382. {
  12383.   return isl::pw_multi_aff(*this).min(multi2);
  12384. }
  12385.  
  12386. isl::multi_val multi_aff::min_multi_val() const
  12387. {
  12388.   return isl::pw_multi_aff(*this).min_multi_val();
  12389. }
  12390.  
  12391. isl::multi_aff multi_aff::multi_val_on_domain(isl::space space, isl::multi_val mv)
  12392. {
  12393.   auto res = isl_multi_aff_multi_val_on_domain_space(space.release(), mv.release());
  12394.   return manage(res);
  12395. }
  12396.  
  12397. class size multi_aff::n_piece() const
  12398. {
  12399.   return isl::pw_multi_aff(*this).n_piece();
  12400. }
  12401.  
  12402. isl::multi_aff multi_aff::neg() const
  12403. {
  12404.   auto res = isl_multi_aff_neg(copy());
  12405.   return manage(res);
  12406. }
  12407.  
  12408. boolean multi_aff::plain_is_empty() const
  12409. {
  12410.   return isl::pw_multi_aff(*this).plain_is_empty();
  12411. }
  12412.  
  12413. boolean multi_aff::plain_is_equal(const isl::multi_aff &multi2) const
  12414. {
  12415.   auto res = isl_multi_aff_plain_is_equal(get(), multi2.get());
  12416.   return manage(res);
  12417. }
  12418.  
  12419. boolean multi_aff::plain_is_equal(const isl::multi_pw_aff &multi2) const
  12420. {
  12421.   return isl::pw_multi_aff(*this).plain_is_equal(multi2);
  12422. }
  12423.  
  12424. boolean multi_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
  12425. {
  12426.   return isl::pw_multi_aff(*this).plain_is_equal(multi2);
  12427. }
  12428.  
  12429. boolean multi_aff::plain_is_equal(const isl::aff &multi2) const
  12430. {
  12431.   return this->plain_is_equal(isl::multi_aff(multi2));
  12432. }
  12433.  
  12434. isl::pw_multi_aff multi_aff::preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const
  12435. {
  12436.   return isl::pw_multi_aff(*this).preimage_domain_wrapped_domain(pma2);
  12437. }
  12438.  
  12439. isl::union_pw_multi_aff multi_aff::preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const
  12440. {
  12441.   return isl::pw_multi_aff(*this).preimage_domain_wrapped_domain(upma2);
  12442. }
  12443.  
  12444. isl::multi_aff multi_aff::product(isl::multi_aff multi2) const
  12445. {
  12446.   auto res = isl_multi_aff_product(copy(), multi2.release());
  12447.   return manage(res);
  12448. }
  12449.  
  12450. isl::multi_pw_aff multi_aff::product(const isl::multi_pw_aff &multi2) const
  12451. {
  12452.   return isl::pw_multi_aff(*this).product(multi2);
  12453. }
  12454.  
  12455. isl::pw_multi_aff multi_aff::product(const isl::pw_multi_aff &pma2) const
  12456. {
  12457.   return isl::pw_multi_aff(*this).product(pma2);
  12458. }
  12459.  
  12460. isl::multi_aff multi_aff::product(const isl::aff &multi2) const
  12461. {
  12462.   return this->product(isl::multi_aff(multi2));
  12463. }
  12464.  
  12465. isl::multi_aff multi_aff::pullback(isl::multi_aff ma2) const
  12466. {
  12467.   auto res = isl_multi_aff_pullback_multi_aff(copy(), ma2.release());
  12468.   return manage(res);
  12469. }
  12470.  
  12471. isl::multi_pw_aff multi_aff::pullback(const isl::multi_pw_aff &mpa2) const
  12472. {
  12473.   return isl::pw_multi_aff(*this).pullback(mpa2);
  12474. }
  12475.  
  12476. isl::pw_multi_aff multi_aff::pullback(const isl::pw_multi_aff &pma2) const
  12477. {
  12478.   return isl::pw_multi_aff(*this).pullback(pma2);
  12479. }
  12480.  
  12481. isl::union_pw_multi_aff multi_aff::pullback(const isl::union_pw_multi_aff &upma2) const
  12482. {
  12483.   return isl::pw_multi_aff(*this).pullback(upma2);
  12484. }
  12485.  
  12486. isl::multi_aff multi_aff::pullback(const isl::aff &ma2) const
  12487. {
  12488.   return this->pullback(isl::multi_aff(ma2));
  12489. }
  12490.  
  12491. isl::pw_multi_aff_list multi_aff::pw_multi_aff_list() const
  12492. {
  12493.   return isl::pw_multi_aff(*this).pw_multi_aff_list();
  12494. }
  12495.  
  12496. isl::pw_multi_aff multi_aff::range_factor_domain() const
  12497. {
  12498.   return isl::pw_multi_aff(*this).range_factor_domain();
  12499. }
  12500.  
  12501. isl::pw_multi_aff multi_aff::range_factor_range() const
  12502. {
  12503.   return isl::pw_multi_aff(*this).range_factor_range();
  12504. }
  12505.  
  12506. isl::multi_aff multi_aff::range_map(isl::space space)
  12507. {
  12508.   auto res = isl_multi_aff_range_map(space.release());
  12509.   return manage(res);
  12510. }
  12511.  
  12512. isl::multi_aff multi_aff::range_product(isl::multi_aff multi2) const
  12513. {
  12514.   auto res = isl_multi_aff_range_product(copy(), multi2.release());
  12515.   return manage(res);
  12516. }
  12517.  
  12518. isl::multi_pw_aff multi_aff::range_product(const isl::multi_pw_aff &multi2) const
  12519. {
  12520.   return isl::pw_multi_aff(*this).range_product(multi2);
  12521. }
  12522.  
  12523. isl::multi_union_pw_aff multi_aff::range_product(const isl::multi_union_pw_aff &multi2) const
  12524. {
  12525.   return isl::pw_multi_aff(*this).range_product(multi2);
  12526. }
  12527.  
  12528. isl::pw_multi_aff multi_aff::range_product(const isl::pw_multi_aff &pma2) const
  12529. {
  12530.   return isl::pw_multi_aff(*this).range_product(pma2);
  12531. }
  12532.  
  12533. isl::union_pw_multi_aff multi_aff::range_product(const isl::union_pw_multi_aff &upma2) const
  12534. {
  12535.   return isl::pw_multi_aff(*this).range_product(upma2);
  12536. }
  12537.  
  12538. isl::multi_aff multi_aff::range_product(const isl::aff &multi2) const
  12539. {
  12540.   return this->range_product(isl::multi_aff(multi2));
  12541. }
  12542.  
  12543. isl::id multi_aff::range_tuple_id() const
  12544. {
  12545.   auto res = isl_multi_aff_get_range_tuple_id(get());
  12546.   return manage(res);
  12547. }
  12548.  
  12549. isl::id multi_aff::get_range_tuple_id() const
  12550. {
  12551.   return range_tuple_id();
  12552. }
  12553.  
  12554. isl::multi_aff multi_aff::reset_range_tuple_id() const
  12555. {
  12556.   auto res = isl_multi_aff_reset_range_tuple_id(copy());
  12557.   return manage(res);
  12558. }
  12559.  
  12560. isl::multi_aff multi_aff::reset_tuple_id(isl::dim type) const
  12561. {
  12562.   auto res = isl_multi_aff_reset_tuple_id(copy(), static_cast<enum isl_dim_type>(type));
  12563.   return manage(res);
  12564. }
  12565.  
  12566. isl::multi_aff multi_aff::scale(isl::multi_val mv) const
  12567. {
  12568.   auto res = isl_multi_aff_scale_multi_val(copy(), mv.release());
  12569.   return manage(res);
  12570. }
  12571.  
  12572. isl::multi_aff multi_aff::scale(isl::val v) const
  12573. {
  12574.   auto res = isl_multi_aff_scale_val(copy(), v.release());
  12575.   return manage(res);
  12576. }
  12577.  
  12578. isl::multi_aff multi_aff::scale(long v) const
  12579. {
  12580.   return this->scale(isl::val(ctx(), v));
  12581. }
  12582.  
  12583. isl::multi_aff multi_aff::scale_down(isl::multi_val mv) const
  12584. {
  12585.   auto res = isl_multi_aff_scale_down_multi_val(copy(), mv.release());
  12586.   return manage(res);
  12587. }
  12588.  
  12589. isl::multi_aff multi_aff::scale_down(isl::val v) const
  12590. {
  12591.   auto res = isl_multi_aff_scale_down_val(copy(), v.release());
  12592.   return manage(res);
  12593. }
  12594.  
  12595. isl::multi_aff multi_aff::scale_down(long v) const
  12596. {
  12597.   return this->scale_down(isl::val(ctx(), v));
  12598. }
  12599.  
  12600. isl::multi_aff multi_aff::set_aff(int pos, isl::aff el) const
  12601. {
  12602.   auto res = isl_multi_aff_set_aff(copy(), pos, el.release());
  12603.   return manage(res);
  12604. }
  12605.  
  12606. isl::multi_aff multi_aff::set_at(int pos, isl::aff el) const
  12607. {
  12608.   auto res = isl_multi_aff_set_at(copy(), pos, el.release());
  12609.   return manage(res);
  12610. }
  12611.  
  12612. isl::multi_pw_aff multi_aff::set_at(int pos, const isl::pw_aff &el) const
  12613. {
  12614.   return isl::pw_multi_aff(*this).set_at(pos, el);
  12615. }
  12616.  
  12617. isl::multi_union_pw_aff multi_aff::set_at(int pos, const isl::union_pw_aff &el) const
  12618. {
  12619.   return isl::pw_multi_aff(*this).set_at(pos, el);
  12620. }
  12621.  
  12622. isl::multi_pw_aff multi_aff::set_pw_aff(int pos, const isl::pw_aff &el) const
  12623. {
  12624.   return isl::pw_multi_aff(*this).set_pw_aff(pos, el);
  12625. }
  12626.  
  12627. isl::pw_multi_aff multi_aff::set_pw_aff(unsigned int pos, const isl::pw_aff &pa) const
  12628. {
  12629.   return isl::pw_multi_aff(*this).set_pw_aff(pos, pa);
  12630. }
  12631.  
  12632. isl::multi_aff multi_aff::set_range_tuple(isl::id id) const
  12633. {
  12634.   auto res = isl_multi_aff_set_range_tuple_id(copy(), id.release());
  12635.   return manage(res);
  12636. }
  12637.  
  12638. isl::multi_aff multi_aff::set_range_tuple(const std::string &id) const
  12639. {
  12640.   return this->set_range_tuple(isl::id(ctx(), id));
  12641. }
  12642.  
  12643. isl::multi_union_pw_aff multi_aff::set_union_pw_aff(int pos, const isl::union_pw_aff &el) const
  12644. {
  12645.   return isl::pw_multi_aff(*this).set_union_pw_aff(pos, el);
  12646. }
  12647.  
  12648. class size multi_aff::size() const
  12649. {
  12650.   auto res = isl_multi_aff_size(get());
  12651.   return manage(res);
  12652. }
  12653.  
  12654. isl::space multi_aff::space() const
  12655. {
  12656.   auto res = isl_multi_aff_get_space(get());
  12657.   return manage(res);
  12658. }
  12659.  
  12660. isl::space multi_aff::get_space() const
  12661. {
  12662.   return space();
  12663. }
  12664.  
  12665. isl::multi_aff multi_aff::sub(isl::multi_aff multi2) const
  12666. {
  12667.   auto res = isl_multi_aff_sub(copy(), multi2.release());
  12668.   return manage(res);
  12669. }
  12670.  
  12671. isl::multi_pw_aff multi_aff::sub(const isl::multi_pw_aff &multi2) const
  12672. {
  12673.   return isl::pw_multi_aff(*this).sub(multi2);
  12674. }
  12675.  
  12676. isl::multi_union_pw_aff multi_aff::sub(const isl::multi_union_pw_aff &multi2) const
  12677. {
  12678.   return isl::pw_multi_aff(*this).sub(multi2);
  12679. }
  12680.  
  12681. isl::pw_multi_aff multi_aff::sub(const isl::pw_multi_aff &pma2) const
  12682. {
  12683.   return isl::pw_multi_aff(*this).sub(pma2);
  12684. }
  12685.  
  12686. isl::union_pw_multi_aff multi_aff::sub(const isl::union_pw_multi_aff &upma2) const
  12687. {
  12688.   return isl::pw_multi_aff(*this).sub(upma2);
  12689. }
  12690.  
  12691. isl::multi_aff multi_aff::sub(const isl::aff &multi2) const
  12692. {
  12693.   return this->sub(isl::multi_aff(multi2));
  12694. }
  12695.  
  12696. isl::pw_multi_aff multi_aff::subtract_domain(const isl::set &set) const
  12697. {
  12698.   return isl::pw_multi_aff(*this).subtract_domain(set);
  12699. }
  12700.  
  12701. isl::union_pw_multi_aff multi_aff::subtract_domain(const isl::space &space) const
  12702. {
  12703.   return isl::pw_multi_aff(*this).subtract_domain(space);
  12704. }
  12705.  
  12706. isl::union_pw_multi_aff multi_aff::subtract_domain(const isl::union_set &uset) const
  12707. {
  12708.   return isl::pw_multi_aff(*this).subtract_domain(uset);
  12709. }
  12710.  
  12711. isl::pw_multi_aff_list multi_aff::to_list() const
  12712. {
  12713.   return isl::pw_multi_aff(*this).to_list();
  12714. }
  12715.  
  12716. isl::multi_pw_aff multi_aff::to_multi_pw_aff() const
  12717. {
  12718.   auto res = isl_multi_aff_to_multi_pw_aff(copy());
  12719.   return manage(res);
  12720. }
  12721.  
  12722. isl::multi_union_pw_aff multi_aff::to_multi_union_pw_aff() const
  12723. {
  12724.   auto res = isl_multi_aff_to_multi_union_pw_aff(copy());
  12725.   return manage(res);
  12726. }
  12727.  
  12728. isl::pw_multi_aff multi_aff::to_pw_multi_aff() const
  12729. {
  12730.   auto res = isl_multi_aff_to_pw_multi_aff(copy());
  12731.   return manage(res);
  12732. }
  12733.  
  12734. isl::union_pw_multi_aff multi_aff::to_union_pw_multi_aff() const
  12735. {
  12736.   return isl::pw_multi_aff(*this).to_union_pw_multi_aff();
  12737. }
  12738.  
  12739. isl::id multi_aff::tuple_id(isl::dim type) const
  12740. {
  12741.   return isl::pw_multi_aff(*this).tuple_id(type);
  12742. }
  12743.  
  12744. isl::multi_aff multi_aff::unbind_params_insert_domain(isl::multi_id domain) const
  12745. {
  12746.   auto res = isl_multi_aff_unbind_params_insert_domain(copy(), domain.release());
  12747.   return manage(res);
  12748. }
  12749.  
  12750. isl::multi_pw_aff multi_aff::union_add(const isl::multi_pw_aff &mpa2) const
  12751. {
  12752.   return isl::pw_multi_aff(*this).union_add(mpa2);
  12753. }
  12754.  
  12755. isl::multi_union_pw_aff multi_aff::union_add(const isl::multi_union_pw_aff &mupa2) const
  12756. {
  12757.   return isl::pw_multi_aff(*this).union_add(mupa2);
  12758. }
  12759.  
  12760. isl::pw_multi_aff multi_aff::union_add(const isl::pw_multi_aff &pma2) const
  12761. {
  12762.   return isl::pw_multi_aff(*this).union_add(pma2);
  12763. }
  12764.  
  12765. isl::union_pw_multi_aff multi_aff::union_add(const isl::union_pw_multi_aff &upma2) const
  12766. {
  12767.   return isl::pw_multi_aff(*this).union_add(upma2);
  12768. }
  12769.  
  12770. isl::multi_aff multi_aff::zero(isl::space space)
  12771. {
  12772.   auto res = isl_multi_aff_zero(space.release());
  12773.   return manage(res);
  12774. }
  12775.  
  12776. inline std::ostream &operator<<(std::ostream &os, const multi_aff &obj)
  12777. {
  12778.   char *str = isl_multi_aff_to_str(obj.get());
  12779.   if (!str) {
  12780.     os.setstate(std::ios_base::badbit);
  12781.     return os;
  12782.   }
  12783.   os << str;
  12784.   free(str);
  12785.   return os;
  12786. }
  12787.  
  12788. // implementations for isl::multi_id
  12789. multi_id manage(__isl_take isl_multi_id *ptr) {
  12790.   return multi_id(ptr);
  12791. }
  12792. multi_id manage_copy(__isl_keep isl_multi_id *ptr) {
  12793.   ptr = isl_multi_id_copy(ptr);
  12794.   return multi_id(ptr);
  12795. }
  12796.  
  12797. multi_id::multi_id()
  12798.     : ptr(nullptr) {}
  12799.  
  12800. multi_id::multi_id(const multi_id &obj)
  12801.     : ptr(nullptr)
  12802. {
  12803.   ptr = obj.copy();
  12804. }
  12805.  
  12806. multi_id::multi_id(__isl_take isl_multi_id *ptr)
  12807.     : ptr(ptr) {}
  12808.  
  12809. multi_id::multi_id(isl::space space, isl::id_list list)
  12810. {
  12811.   auto res = isl_multi_id_from_id_list(space.release(), list.release());
  12812.   ptr = res;
  12813. }
  12814.  
  12815. multi_id::multi_id(isl::ctx ctx, const std::string &str)
  12816. {
  12817.   auto res = isl_multi_id_read_from_str(ctx.release(), str.c_str());
  12818.   ptr = res;
  12819. }
  12820.  
  12821. multi_id &multi_id::operator=(multi_id obj) {
  12822.   std::swap(this->ptr, obj.ptr);
  12823.   return *this;
  12824. }
  12825.  
  12826. multi_id::~multi_id() {
  12827.   if (ptr)
  12828.     isl_multi_id_free(ptr);
  12829. }
  12830.  
  12831. __isl_give isl_multi_id *multi_id::copy() const & {
  12832.   return isl_multi_id_copy(ptr);
  12833. }
  12834.  
  12835. __isl_keep isl_multi_id *multi_id::get() const {
  12836.   return ptr;
  12837. }
  12838.  
  12839. __isl_give isl_multi_id *multi_id::release() {
  12840.   isl_multi_id *tmp = ptr;
  12841.   ptr = nullptr;
  12842.   return tmp;
  12843. }
  12844.  
  12845. bool multi_id::is_null() const {
  12846.   return ptr == nullptr;
  12847. }
  12848.  
  12849. isl::ctx multi_id::ctx() const {
  12850.   return isl::ctx(isl_multi_id_get_ctx(ptr));
  12851. }
  12852.  
  12853. isl::id multi_id::at(int pos) const
  12854. {
  12855.   auto res = isl_multi_id_get_at(get(), pos);
  12856.   return manage(res);
  12857. }
  12858.  
  12859. isl::id multi_id::get_at(int pos) const
  12860. {
  12861.   return at(pos);
  12862. }
  12863.  
  12864. isl::multi_id multi_id::flat_range_product(isl::multi_id multi2) const
  12865. {
  12866.   auto res = isl_multi_id_flat_range_product(copy(), multi2.release());
  12867.   return manage(res);
  12868. }
  12869.  
  12870. isl::id_list multi_id::list() const
  12871. {
  12872.   auto res = isl_multi_id_get_list(get());
  12873.   return manage(res);
  12874. }
  12875.  
  12876. isl::id_list multi_id::get_list() const
  12877. {
  12878.   return list();
  12879. }
  12880.  
  12881. boolean multi_id::plain_is_equal(const isl::multi_id &multi2) const
  12882. {
  12883.   auto res = isl_multi_id_plain_is_equal(get(), multi2.get());
  12884.   return manage(res);
  12885. }
  12886.  
  12887. isl::multi_id multi_id::range_product(isl::multi_id multi2) const
  12888. {
  12889.   auto res = isl_multi_id_range_product(copy(), multi2.release());
  12890.   return manage(res);
  12891. }
  12892.  
  12893. isl::multi_id multi_id::set_at(int pos, isl::id el) const
  12894. {
  12895.   auto res = isl_multi_id_set_at(copy(), pos, el.release());
  12896.   return manage(res);
  12897. }
  12898.  
  12899. isl::multi_id multi_id::set_at(int pos, const std::string &el) const
  12900. {
  12901.   return this->set_at(pos, isl::id(ctx(), el));
  12902. }
  12903.  
  12904. isl::multi_id multi_id::set_id(int pos, isl::id el) const
  12905. {
  12906.   auto res = isl_multi_id_set_id(copy(), pos, el.release());
  12907.   return manage(res);
  12908. }
  12909.  
  12910. isl::multi_id multi_id::set_id(int pos, const std::string &el) const
  12911. {
  12912.   return this->set_id(pos, isl::id(ctx(), el));
  12913. }
  12914.  
  12915. class size multi_id::size() const
  12916. {
  12917.   auto res = isl_multi_id_size(get());
  12918.   return manage(res);
  12919. }
  12920.  
  12921. isl::space multi_id::space() const
  12922. {
  12923.   auto res = isl_multi_id_get_space(get());
  12924.   return manage(res);
  12925. }
  12926.  
  12927. isl::space multi_id::get_space() const
  12928. {
  12929.   return space();
  12930. }
  12931.  
  12932. inline std::ostream &operator<<(std::ostream &os, const multi_id &obj)
  12933. {
  12934.   char *str = isl_multi_id_to_str(obj.get());
  12935.   if (!str) {
  12936.     os.setstate(std::ios_base::badbit);
  12937.     return os;
  12938.   }
  12939.   os << str;
  12940.   free(str);
  12941.   return os;
  12942. }
  12943.  
  12944. // implementations for isl::multi_pw_aff
  12945. multi_pw_aff manage(__isl_take isl_multi_pw_aff *ptr) {
  12946.   return multi_pw_aff(ptr);
  12947. }
  12948. multi_pw_aff manage_copy(__isl_keep isl_multi_pw_aff *ptr) {
  12949.   ptr = isl_multi_pw_aff_copy(ptr);
  12950.   return multi_pw_aff(ptr);
  12951. }
  12952.  
  12953. multi_pw_aff::multi_pw_aff()
  12954.     : ptr(nullptr) {}
  12955.  
  12956. multi_pw_aff::multi_pw_aff(const multi_pw_aff &obj)
  12957.     : ptr(nullptr)
  12958. {
  12959.   ptr = obj.copy();
  12960. }
  12961.  
  12962. multi_pw_aff::multi_pw_aff(__isl_take isl_multi_pw_aff *ptr)
  12963.     : ptr(ptr) {}
  12964.  
  12965. multi_pw_aff::multi_pw_aff(isl::aff aff)
  12966. {
  12967.   auto res = isl_multi_pw_aff_from_aff(aff.release());
  12968.   ptr = res;
  12969. }
  12970.  
  12971. multi_pw_aff::multi_pw_aff(isl::multi_aff ma)
  12972. {
  12973.   auto res = isl_multi_pw_aff_from_multi_aff(ma.release());
  12974.   ptr = res;
  12975. }
  12976.  
  12977. multi_pw_aff::multi_pw_aff(isl::pw_aff pa)
  12978. {
  12979.   auto res = isl_multi_pw_aff_from_pw_aff(pa.release());
  12980.   ptr = res;
  12981. }
  12982.  
  12983. multi_pw_aff::multi_pw_aff(isl::space space, isl::pw_aff_list list)
  12984. {
  12985.   auto res = isl_multi_pw_aff_from_pw_aff_list(space.release(), list.release());
  12986.   ptr = res;
  12987. }
  12988.  
  12989. multi_pw_aff::multi_pw_aff(isl::pw_multi_aff pma)
  12990. {
  12991.   auto res = isl_multi_pw_aff_from_pw_multi_aff(pma.release());
  12992.   ptr = res;
  12993. }
  12994.  
  12995. multi_pw_aff::multi_pw_aff(isl::ctx ctx, const std::string &str)
  12996. {
  12997.   auto res = isl_multi_pw_aff_read_from_str(ctx.release(), str.c_str());
  12998.   ptr = res;
  12999. }
  13000.  
  13001. multi_pw_aff &multi_pw_aff::operator=(multi_pw_aff obj) {
  13002.   std::swap(this->ptr, obj.ptr);
  13003.   return *this;
  13004. }
  13005.  
  13006. multi_pw_aff::~multi_pw_aff() {
  13007.   if (ptr)
  13008.     isl_multi_pw_aff_free(ptr);
  13009. }
  13010.  
  13011. __isl_give isl_multi_pw_aff *multi_pw_aff::copy() const & {
  13012.   return isl_multi_pw_aff_copy(ptr);
  13013. }
  13014.  
  13015. __isl_keep isl_multi_pw_aff *multi_pw_aff::get() const {
  13016.   return ptr;
  13017. }
  13018.  
  13019. __isl_give isl_multi_pw_aff *multi_pw_aff::release() {
  13020.   isl_multi_pw_aff *tmp = ptr;
  13021.   ptr = nullptr;
  13022.   return tmp;
  13023. }
  13024.  
  13025. bool multi_pw_aff::is_null() const {
  13026.   return ptr == nullptr;
  13027. }
  13028.  
  13029. isl::ctx multi_pw_aff::ctx() const {
  13030.   return isl::ctx(isl_multi_pw_aff_get_ctx(ptr));
  13031. }
  13032.  
  13033. isl::multi_pw_aff multi_pw_aff::add(isl::multi_pw_aff multi2) const
  13034. {
  13035.   auto res = isl_multi_pw_aff_add(copy(), multi2.release());
  13036.   return manage(res);
  13037. }
  13038.  
  13039. isl::multi_union_pw_aff multi_pw_aff::add(const isl::multi_union_pw_aff &multi2) const
  13040. {
  13041.   return isl::multi_union_pw_aff(*this).add(multi2);
  13042. }
  13043.  
  13044. isl::multi_pw_aff multi_pw_aff::add(const isl::aff &multi2) const
  13045. {
  13046.   return this->add(isl::multi_pw_aff(multi2));
  13047. }
  13048.  
  13049. isl::multi_pw_aff multi_pw_aff::add(const isl::multi_aff &multi2) const
  13050. {
  13051.   return this->add(isl::multi_pw_aff(multi2));
  13052. }
  13053.  
  13054. isl::multi_pw_aff multi_pw_aff::add(const isl::pw_aff &multi2) const
  13055. {
  13056.   return this->add(isl::multi_pw_aff(multi2));
  13057. }
  13058.  
  13059. isl::multi_pw_aff multi_pw_aff::add(const isl::pw_multi_aff &multi2) const
  13060. {
  13061.   return this->add(isl::multi_pw_aff(multi2));
  13062. }
  13063.  
  13064. isl::multi_pw_aff multi_pw_aff::add_constant(isl::multi_val mv) const
  13065. {
  13066.   auto res = isl_multi_pw_aff_add_constant_multi_val(copy(), mv.release());
  13067.   return manage(res);
  13068. }
  13069.  
  13070. isl::multi_pw_aff multi_pw_aff::add_constant(isl::val v) const
  13071. {
  13072.   auto res = isl_multi_pw_aff_add_constant_val(copy(), v.release());
  13073.   return manage(res);
  13074. }
  13075.  
  13076. isl::multi_pw_aff multi_pw_aff::add_constant(long v) const
  13077. {
  13078.   return this->add_constant(isl::val(ctx(), v));
  13079. }
  13080.  
  13081. isl::map multi_pw_aff::as_map() const
  13082. {
  13083.   auto res = isl_multi_pw_aff_as_map(copy());
  13084.   return manage(res);
  13085. }
  13086.  
  13087. isl::multi_aff multi_pw_aff::as_multi_aff() const
  13088. {
  13089.   auto res = isl_multi_pw_aff_as_multi_aff(copy());
  13090.   return manage(res);
  13091. }
  13092.  
  13093. isl::set multi_pw_aff::as_set() const
  13094. {
  13095.   auto res = isl_multi_pw_aff_as_set(copy());
  13096.   return manage(res);
  13097. }
  13098.  
  13099. isl::pw_aff multi_pw_aff::at(int pos) const
  13100. {
  13101.   auto res = isl_multi_pw_aff_get_at(get(), pos);
  13102.   return manage(res);
  13103. }
  13104.  
  13105. isl::pw_aff multi_pw_aff::get_at(int pos) const
  13106. {
  13107.   return at(pos);
  13108. }
  13109.  
  13110. isl::set multi_pw_aff::bind(isl::multi_id tuple) const
  13111. {
  13112.   auto res = isl_multi_pw_aff_bind(copy(), tuple.release());
  13113.   return manage(res);
  13114. }
  13115.  
  13116. isl::multi_pw_aff multi_pw_aff::bind_domain(isl::multi_id tuple) const
  13117. {
  13118.   auto res = isl_multi_pw_aff_bind_domain(copy(), tuple.release());
  13119.   return manage(res);
  13120. }
  13121.  
  13122. isl::multi_pw_aff multi_pw_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const
  13123. {
  13124.   auto res = isl_multi_pw_aff_bind_domain_wrapped_domain(copy(), tuple.release());
  13125.   return manage(res);
  13126. }
  13127.  
  13128. isl::multi_pw_aff multi_pw_aff::coalesce() const
  13129. {
  13130.   auto res = isl_multi_pw_aff_coalesce(copy());
  13131.   return manage(res);
  13132. }
  13133.  
  13134. class size multi_pw_aff::dim(isl::dim type) const
  13135. {
  13136.   auto res = isl_multi_pw_aff_dim(get(), static_cast<enum isl_dim_type>(type));
  13137.   return manage(res);
  13138. }
  13139.  
  13140. isl::set multi_pw_aff::domain() const
  13141. {
  13142.   auto res = isl_multi_pw_aff_domain(copy());
  13143.   return manage(res);
  13144. }
  13145.  
  13146. isl::multi_pw_aff multi_pw_aff::flat_range_product(isl::multi_pw_aff multi2) const
  13147. {
  13148.   auto res = isl_multi_pw_aff_flat_range_product(copy(), multi2.release());
  13149.   return manage(res);
  13150. }
  13151.  
  13152. isl::multi_union_pw_aff multi_pw_aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const
  13153. {
  13154.   return isl::multi_union_pw_aff(*this).flat_range_product(multi2);
  13155. }
  13156.  
  13157. isl::multi_pw_aff multi_pw_aff::flat_range_product(const isl::aff &multi2) const
  13158. {
  13159.   return this->flat_range_product(isl::multi_pw_aff(multi2));
  13160. }
  13161.  
  13162. isl::multi_pw_aff multi_pw_aff::flat_range_product(const isl::multi_aff &multi2) const
  13163. {
  13164.   return this->flat_range_product(isl::multi_pw_aff(multi2));
  13165. }
  13166.  
  13167. isl::multi_pw_aff multi_pw_aff::flat_range_product(const isl::pw_aff &multi2) const
  13168. {
  13169.   return this->flat_range_product(isl::multi_pw_aff(multi2));
  13170. }
  13171.  
  13172. isl::multi_pw_aff multi_pw_aff::flat_range_product(const isl::pw_multi_aff &multi2) const
  13173. {
  13174.   return this->flat_range_product(isl::multi_pw_aff(multi2));
  13175. }
  13176.  
  13177. isl::multi_pw_aff multi_pw_aff::gist(isl::set set) const
  13178. {
  13179.   auto res = isl_multi_pw_aff_gist(copy(), set.release());
  13180.   return manage(res);
  13181. }
  13182.  
  13183. isl::multi_union_pw_aff multi_pw_aff::gist(const isl::union_set &context) const
  13184. {
  13185.   return isl::multi_union_pw_aff(*this).gist(context);
  13186. }
  13187.  
  13188. isl::multi_pw_aff multi_pw_aff::gist(const isl::basic_set &set) const
  13189. {
  13190.   return this->gist(isl::set(set));
  13191. }
  13192.  
  13193. isl::multi_pw_aff multi_pw_aff::gist(const isl::point &set) const
  13194. {
  13195.   return this->gist(isl::set(set));
  13196. }
  13197.  
  13198. boolean multi_pw_aff::has_range_tuple_id() const
  13199. {
  13200.   auto res = isl_multi_pw_aff_has_range_tuple_id(get());
  13201.   return manage(res);
  13202. }
  13203.  
  13204. isl::multi_pw_aff multi_pw_aff::identity(isl::space space)
  13205. {
  13206.   auto res = isl_multi_pw_aff_identity(space.release());
  13207.   return manage(res);
  13208. }
  13209.  
  13210. isl::multi_pw_aff multi_pw_aff::identity() const
  13211. {
  13212.   auto res = isl_multi_pw_aff_identity_multi_pw_aff(copy());
  13213.   return manage(res);
  13214. }
  13215.  
  13216. isl::multi_pw_aff multi_pw_aff::identity_on_domain(isl::space space)
  13217. {
  13218.   auto res = isl_multi_pw_aff_identity_on_domain_space(space.release());
  13219.   return manage(res);
  13220. }
  13221.  
  13222. isl::multi_pw_aff multi_pw_aff::insert_domain(isl::space domain) const
  13223. {
  13224.   auto res = isl_multi_pw_aff_insert_domain(copy(), domain.release());
  13225.   return manage(res);
  13226. }
  13227.  
  13228. isl::multi_pw_aff multi_pw_aff::intersect_domain(isl::set domain) const
  13229. {
  13230.   auto res = isl_multi_pw_aff_intersect_domain(copy(), domain.release());
  13231.   return manage(res);
  13232. }
  13233.  
  13234. isl::multi_union_pw_aff multi_pw_aff::intersect_domain(const isl::union_set &uset) const
  13235. {
  13236.   return isl::multi_union_pw_aff(*this).intersect_domain(uset);
  13237. }
  13238.  
  13239. isl::multi_pw_aff multi_pw_aff::intersect_domain(const isl::basic_set &domain) const
  13240. {
  13241.   return this->intersect_domain(isl::set(domain));
  13242. }
  13243.  
  13244. isl::multi_pw_aff multi_pw_aff::intersect_domain(const isl::point &domain) const
  13245. {
  13246.   return this->intersect_domain(isl::set(domain));
  13247. }
  13248.  
  13249. isl::multi_pw_aff multi_pw_aff::intersect_params(isl::set set) const
  13250. {
  13251.   auto res = isl_multi_pw_aff_intersect_params(copy(), set.release());
  13252.   return manage(res);
  13253. }
  13254.  
  13255. boolean multi_pw_aff::involves_nan() const
  13256. {
  13257.   auto res = isl_multi_pw_aff_involves_nan(get());
  13258.   return manage(res);
  13259. }
  13260.  
  13261. boolean multi_pw_aff::involves_param(const isl::id &id) const
  13262. {
  13263.   auto res = isl_multi_pw_aff_involves_param_id(get(), id.get());
  13264.   return manage(res);
  13265. }
  13266.  
  13267. boolean multi_pw_aff::involves_param(const std::string &id) const
  13268. {
  13269.   return this->involves_param(isl::id(ctx(), id));
  13270. }
  13271.  
  13272. boolean multi_pw_aff::involves_param(const isl::id_list &list) const
  13273. {
  13274.   auto res = isl_multi_pw_aff_involves_param_id_list(get(), list.get());
  13275.   return manage(res);
  13276. }
  13277.  
  13278. boolean multi_pw_aff::isa_multi_aff() const
  13279. {
  13280.   auto res = isl_multi_pw_aff_isa_multi_aff(get());
  13281.   return manage(res);
  13282. }
  13283.  
  13284. isl::pw_aff_list multi_pw_aff::list() const
  13285. {
  13286.   auto res = isl_multi_pw_aff_get_list(get());
  13287.   return manage(res);
  13288. }
  13289.  
  13290. isl::pw_aff_list multi_pw_aff::get_list() const
  13291. {
  13292.   return list();
  13293. }
  13294.  
  13295. isl::multi_pw_aff multi_pw_aff::max(isl::multi_pw_aff multi2) const
  13296. {
  13297.   auto res = isl_multi_pw_aff_max(copy(), multi2.release());
  13298.   return manage(res);
  13299. }
  13300.  
  13301. isl::multi_val multi_pw_aff::max_multi_val() const
  13302. {
  13303.   auto res = isl_multi_pw_aff_max_multi_val(copy());
  13304.   return manage(res);
  13305. }
  13306.  
  13307. isl::multi_pw_aff multi_pw_aff::min(isl::multi_pw_aff multi2) const
  13308. {
  13309.   auto res = isl_multi_pw_aff_min(copy(), multi2.release());
  13310.   return manage(res);
  13311. }
  13312.  
  13313. isl::multi_val multi_pw_aff::min_multi_val() const
  13314. {
  13315.   auto res = isl_multi_pw_aff_min_multi_val(copy());
  13316.   return manage(res);
  13317. }
  13318.  
  13319. isl::multi_pw_aff multi_pw_aff::neg() const
  13320. {
  13321.   auto res = isl_multi_pw_aff_neg(copy());
  13322.   return manage(res);
  13323. }
  13324.  
  13325. boolean multi_pw_aff::plain_is_equal(const isl::multi_pw_aff &multi2) const
  13326. {
  13327.   auto res = isl_multi_pw_aff_plain_is_equal(get(), multi2.get());
  13328.   return manage(res);
  13329. }
  13330.  
  13331. boolean multi_pw_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
  13332. {
  13333.   return isl::multi_union_pw_aff(*this).plain_is_equal(multi2);
  13334. }
  13335.  
  13336. boolean multi_pw_aff::plain_is_equal(const isl::aff &multi2) const
  13337. {
  13338.   return this->plain_is_equal(isl::multi_pw_aff(multi2));
  13339. }
  13340.  
  13341. boolean multi_pw_aff::plain_is_equal(const isl::multi_aff &multi2) const
  13342. {
  13343.   return this->plain_is_equal(isl::multi_pw_aff(multi2));
  13344. }
  13345.  
  13346. boolean multi_pw_aff::plain_is_equal(const isl::pw_aff &multi2) const
  13347. {
  13348.   return this->plain_is_equal(isl::multi_pw_aff(multi2));
  13349. }
  13350.  
  13351. boolean multi_pw_aff::plain_is_equal(const isl::pw_multi_aff &multi2) const
  13352. {
  13353.   return this->plain_is_equal(isl::multi_pw_aff(multi2));
  13354. }
  13355.  
  13356. isl::multi_pw_aff multi_pw_aff::product(isl::multi_pw_aff multi2) const
  13357. {
  13358.   auto res = isl_multi_pw_aff_product(copy(), multi2.release());
  13359.   return manage(res);
  13360. }
  13361.  
  13362. isl::multi_pw_aff multi_pw_aff::pullback(isl::multi_aff ma) const
  13363. {
  13364.   auto res = isl_multi_pw_aff_pullback_multi_aff(copy(), ma.release());
  13365.   return manage(res);
  13366. }
  13367.  
  13368. isl::multi_pw_aff multi_pw_aff::pullback(isl::multi_pw_aff mpa2) const
  13369. {
  13370.   auto res = isl_multi_pw_aff_pullback_multi_pw_aff(copy(), mpa2.release());
  13371.   return manage(res);
  13372. }
  13373.  
  13374. isl::multi_pw_aff multi_pw_aff::pullback(isl::pw_multi_aff pma) const
  13375. {
  13376.   auto res = isl_multi_pw_aff_pullback_pw_multi_aff(copy(), pma.release());
  13377.   return manage(res);
  13378. }
  13379.  
  13380. isl::multi_union_pw_aff multi_pw_aff::pullback(const isl::union_pw_multi_aff &upma) const
  13381. {
  13382.   return isl::multi_union_pw_aff(*this).pullback(upma);
  13383. }
  13384.  
  13385. isl::multi_pw_aff multi_pw_aff::range_product(isl::multi_pw_aff multi2) const
  13386. {
  13387.   auto res = isl_multi_pw_aff_range_product(copy(), multi2.release());
  13388.   return manage(res);
  13389. }
  13390.  
  13391. isl::multi_union_pw_aff multi_pw_aff::range_product(const isl::multi_union_pw_aff &multi2) const
  13392. {
  13393.   return isl::multi_union_pw_aff(*this).range_product(multi2);
  13394. }
  13395.  
  13396. isl::multi_pw_aff multi_pw_aff::range_product(const isl::aff &multi2) const
  13397. {
  13398.   return this->range_product(isl::multi_pw_aff(multi2));
  13399. }
  13400.  
  13401. isl::multi_pw_aff multi_pw_aff::range_product(const isl::multi_aff &multi2) const
  13402. {
  13403.   return this->range_product(isl::multi_pw_aff(multi2));
  13404. }
  13405.  
  13406. isl::multi_pw_aff multi_pw_aff::range_product(const isl::pw_aff &multi2) const
  13407. {
  13408.   return this->range_product(isl::multi_pw_aff(multi2));
  13409. }
  13410.  
  13411. isl::multi_pw_aff multi_pw_aff::range_product(const isl::pw_multi_aff &multi2) const
  13412. {
  13413.   return this->range_product(isl::multi_pw_aff(multi2));
  13414. }
  13415.  
  13416. isl::id multi_pw_aff::range_tuple_id() const
  13417. {
  13418.   auto res = isl_multi_pw_aff_get_range_tuple_id(get());
  13419.   return manage(res);
  13420. }
  13421.  
  13422. isl::id multi_pw_aff::get_range_tuple_id() const
  13423. {
  13424.   return range_tuple_id();
  13425. }
  13426.  
  13427. isl::multi_pw_aff multi_pw_aff::reset_range_tuple_id() const
  13428. {
  13429.   auto res = isl_multi_pw_aff_reset_range_tuple_id(copy());
  13430.   return manage(res);
  13431. }
  13432.  
  13433. isl::multi_pw_aff multi_pw_aff::reset_tuple_id(isl::dim type) const
  13434. {
  13435.   auto res = isl_multi_pw_aff_reset_tuple_id(copy(), static_cast<enum isl_dim_type>(type));
  13436.   return manage(res);
  13437. }
  13438.  
  13439. isl::multi_pw_aff multi_pw_aff::scale(isl::multi_val mv) const
  13440. {
  13441.   auto res = isl_multi_pw_aff_scale_multi_val(copy(), mv.release());
  13442.   return manage(res);
  13443. }
  13444.  
  13445. isl::multi_pw_aff multi_pw_aff::scale(isl::val v) const
  13446. {
  13447.   auto res = isl_multi_pw_aff_scale_val(copy(), v.release());
  13448.   return manage(res);
  13449. }
  13450.  
  13451. isl::multi_pw_aff multi_pw_aff::scale(long v) const
  13452. {
  13453.   return this->scale(isl::val(ctx(), v));
  13454. }
  13455.  
  13456. isl::multi_pw_aff multi_pw_aff::scale_down(isl::multi_val mv) const
  13457. {
  13458.   auto res = isl_multi_pw_aff_scale_down_multi_val(copy(), mv.release());
  13459.   return manage(res);
  13460. }
  13461.  
  13462. isl::multi_pw_aff multi_pw_aff::scale_down(isl::val v) const
  13463. {
  13464.   auto res = isl_multi_pw_aff_scale_down_val(copy(), v.release());
  13465.   return manage(res);
  13466. }
  13467.  
  13468. isl::multi_pw_aff multi_pw_aff::scale_down(long v) const
  13469. {
  13470.   return this->scale_down(isl::val(ctx(), v));
  13471. }
  13472.  
  13473. isl::multi_pw_aff multi_pw_aff::set_at(int pos, isl::pw_aff el) const
  13474. {
  13475.   auto res = isl_multi_pw_aff_set_at(copy(), pos, el.release());
  13476.   return manage(res);
  13477. }
  13478.  
  13479. isl::multi_union_pw_aff multi_pw_aff::set_at(int pos, const isl::union_pw_aff &el) const
  13480. {
  13481.   return isl::multi_union_pw_aff(*this).set_at(pos, el);
  13482. }
  13483.  
  13484. isl::multi_pw_aff multi_pw_aff::set_pw_aff(int pos, isl::pw_aff el) const
  13485. {
  13486.   auto res = isl_multi_pw_aff_set_pw_aff(copy(), pos, el.release());
  13487.   return manage(res);
  13488. }
  13489.  
  13490. isl::multi_pw_aff multi_pw_aff::set_range_tuple(isl::id id) const
  13491. {
  13492.   auto res = isl_multi_pw_aff_set_range_tuple_id(copy(), id.release());
  13493.   return manage(res);
  13494. }
  13495.  
  13496. isl::multi_pw_aff multi_pw_aff::set_range_tuple(const std::string &id) const
  13497. {
  13498.   return this->set_range_tuple(isl::id(ctx(), id));
  13499. }
  13500.  
  13501. isl::multi_union_pw_aff multi_pw_aff::set_union_pw_aff(int pos, const isl::union_pw_aff &el) const
  13502. {
  13503.   return isl::multi_union_pw_aff(*this).set_union_pw_aff(pos, el);
  13504. }
  13505.  
  13506. class size multi_pw_aff::size() const
  13507. {
  13508.   auto res = isl_multi_pw_aff_size(get());
  13509.   return manage(res);
  13510. }
  13511.  
  13512. isl::space multi_pw_aff::space() const
  13513. {
  13514.   auto res = isl_multi_pw_aff_get_space(get());
  13515.   return manage(res);
  13516. }
  13517.  
  13518. isl::space multi_pw_aff::get_space() const
  13519. {
  13520.   return space();
  13521. }
  13522.  
  13523. isl::multi_pw_aff multi_pw_aff::sub(isl::multi_pw_aff multi2) const
  13524. {
  13525.   auto res = isl_multi_pw_aff_sub(copy(), multi2.release());
  13526.   return manage(res);
  13527. }
  13528.  
  13529. isl::multi_union_pw_aff multi_pw_aff::sub(const isl::multi_union_pw_aff &multi2) const
  13530. {
  13531.   return isl::multi_union_pw_aff(*this).sub(multi2);
  13532. }
  13533.  
  13534. isl::multi_pw_aff multi_pw_aff::sub(const isl::aff &multi2) const
  13535. {
  13536.   return this->sub(isl::multi_pw_aff(multi2));
  13537. }
  13538.  
  13539. isl::multi_pw_aff multi_pw_aff::sub(const isl::multi_aff &multi2) const
  13540. {
  13541.   return this->sub(isl::multi_pw_aff(multi2));
  13542. }
  13543.  
  13544. isl::multi_pw_aff multi_pw_aff::sub(const isl::pw_aff &multi2) const
  13545. {
  13546.   return this->sub(isl::multi_pw_aff(multi2));
  13547. }
  13548.  
  13549. isl::multi_pw_aff multi_pw_aff::sub(const isl::pw_multi_aff &multi2) const
  13550. {
  13551.   return this->sub(isl::multi_pw_aff(multi2));
  13552. }
  13553.  
  13554. isl::multi_pw_aff multi_pw_aff::unbind_params_insert_domain(isl::multi_id domain) const
  13555. {
  13556.   auto res = isl_multi_pw_aff_unbind_params_insert_domain(copy(), domain.release());
  13557.   return manage(res);
  13558. }
  13559.  
  13560. isl::multi_pw_aff multi_pw_aff::union_add(isl::multi_pw_aff mpa2) const
  13561. {
  13562.   auto res = isl_multi_pw_aff_union_add(copy(), mpa2.release());
  13563.   return manage(res);
  13564. }
  13565.  
  13566. isl::multi_union_pw_aff multi_pw_aff::union_add(const isl::multi_union_pw_aff &mupa2) const
  13567. {
  13568.   return isl::multi_union_pw_aff(*this).union_add(mupa2);
  13569. }
  13570.  
  13571. isl::multi_pw_aff multi_pw_aff::union_add(const isl::aff &mpa2) const
  13572. {
  13573.   return this->union_add(isl::multi_pw_aff(mpa2));
  13574. }
  13575.  
  13576. isl::multi_pw_aff multi_pw_aff::union_add(const isl::multi_aff &mpa2) const
  13577. {
  13578.   return this->union_add(isl::multi_pw_aff(mpa2));
  13579. }
  13580.  
  13581. isl::multi_pw_aff multi_pw_aff::union_add(const isl::pw_aff &mpa2) const
  13582. {
  13583.   return this->union_add(isl::multi_pw_aff(mpa2));
  13584. }
  13585.  
  13586. isl::multi_pw_aff multi_pw_aff::union_add(const isl::pw_multi_aff &mpa2) const
  13587. {
  13588.   return this->union_add(isl::multi_pw_aff(mpa2));
  13589. }
  13590.  
  13591. isl::multi_pw_aff multi_pw_aff::zero(isl::space space)
  13592. {
  13593.   auto res = isl_multi_pw_aff_zero(space.release());
  13594.   return manage(res);
  13595. }
  13596.  
  13597. inline std::ostream &operator<<(std::ostream &os, const multi_pw_aff &obj)
  13598. {
  13599.   char *str = isl_multi_pw_aff_to_str(obj.get());
  13600.   if (!str) {
  13601.     os.setstate(std::ios_base::badbit);
  13602.     return os;
  13603.   }
  13604.   os << str;
  13605.   free(str);
  13606.   return os;
  13607. }
  13608.  
  13609. // implementations for isl::multi_union_pw_aff
  13610. multi_union_pw_aff manage(__isl_take isl_multi_union_pw_aff *ptr) {
  13611.   return multi_union_pw_aff(ptr);
  13612. }
  13613. multi_union_pw_aff manage_copy(__isl_keep isl_multi_union_pw_aff *ptr) {
  13614.   ptr = isl_multi_union_pw_aff_copy(ptr);
  13615.   return multi_union_pw_aff(ptr);
  13616. }
  13617.  
  13618. multi_union_pw_aff::multi_union_pw_aff()
  13619.     : ptr(nullptr) {}
  13620.  
  13621. multi_union_pw_aff::multi_union_pw_aff(const multi_union_pw_aff &obj)
  13622.     : ptr(nullptr)
  13623. {
  13624.   ptr = obj.copy();
  13625. }
  13626.  
  13627. multi_union_pw_aff::multi_union_pw_aff(__isl_take isl_multi_union_pw_aff *ptr)
  13628.     : ptr(ptr) {}
  13629.  
  13630. multi_union_pw_aff::multi_union_pw_aff(isl::multi_pw_aff mpa)
  13631. {
  13632.   auto res = isl_multi_union_pw_aff_from_multi_pw_aff(mpa.release());
  13633.   ptr = res;
  13634. }
  13635.  
  13636. multi_union_pw_aff::multi_union_pw_aff(isl::union_pw_aff upa)
  13637. {
  13638.   auto res = isl_multi_union_pw_aff_from_union_pw_aff(upa.release());
  13639.   ptr = res;
  13640. }
  13641.  
  13642. multi_union_pw_aff::multi_union_pw_aff(isl::space space, isl::union_pw_aff_list list)
  13643. {
  13644.   auto res = isl_multi_union_pw_aff_from_union_pw_aff_list(space.release(), list.release());
  13645.   ptr = res;
  13646. }
  13647.  
  13648. multi_union_pw_aff::multi_union_pw_aff(isl::union_pw_multi_aff upma)
  13649. {
  13650.   auto res = isl_multi_union_pw_aff_from_union_pw_multi_aff(upma.release());
  13651.   ptr = res;
  13652. }
  13653.  
  13654. multi_union_pw_aff::multi_union_pw_aff(isl::ctx ctx, const std::string &str)
  13655. {
  13656.   auto res = isl_multi_union_pw_aff_read_from_str(ctx.release(), str.c_str());
  13657.   ptr = res;
  13658. }
  13659.  
  13660. multi_union_pw_aff &multi_union_pw_aff::operator=(multi_union_pw_aff obj) {
  13661.   std::swap(this->ptr, obj.ptr);
  13662.   return *this;
  13663. }
  13664.  
  13665. multi_union_pw_aff::~multi_union_pw_aff() {
  13666.   if (ptr)
  13667.     isl_multi_union_pw_aff_free(ptr);
  13668. }
  13669.  
  13670. __isl_give isl_multi_union_pw_aff *multi_union_pw_aff::copy() const & {
  13671.   return isl_multi_union_pw_aff_copy(ptr);
  13672. }
  13673.  
  13674. __isl_keep isl_multi_union_pw_aff *multi_union_pw_aff::get() const {
  13675.   return ptr;
  13676. }
  13677.  
  13678. __isl_give isl_multi_union_pw_aff *multi_union_pw_aff::release() {
  13679.   isl_multi_union_pw_aff *tmp = ptr;
  13680.   ptr = nullptr;
  13681.   return tmp;
  13682. }
  13683.  
  13684. bool multi_union_pw_aff::is_null() const {
  13685.   return ptr == nullptr;
  13686. }
  13687.  
  13688. isl::ctx multi_union_pw_aff::ctx() const {
  13689.   return isl::ctx(isl_multi_union_pw_aff_get_ctx(ptr));
  13690. }
  13691.  
  13692. isl::multi_union_pw_aff multi_union_pw_aff::add(isl::multi_union_pw_aff multi2) const
  13693. {
  13694.   auto res = isl_multi_union_pw_aff_add(copy(), multi2.release());
  13695.   return manage(res);
  13696. }
  13697.  
  13698. isl::union_pw_aff multi_union_pw_aff::at(int pos) const
  13699. {
  13700.   auto res = isl_multi_union_pw_aff_get_at(get(), pos);
  13701.   return manage(res);
  13702. }
  13703.  
  13704. isl::union_pw_aff multi_union_pw_aff::get_at(int pos) const
  13705. {
  13706.   return at(pos);
  13707. }
  13708.  
  13709. isl::union_set multi_union_pw_aff::bind(isl::multi_id tuple) const
  13710. {
  13711.   auto res = isl_multi_union_pw_aff_bind(copy(), tuple.release());
  13712.   return manage(res);
  13713. }
  13714.  
  13715. isl::multi_union_pw_aff multi_union_pw_aff::coalesce() const
  13716. {
  13717.   auto res = isl_multi_union_pw_aff_coalesce(copy());
  13718.   return manage(res);
  13719. }
  13720.  
  13721. class size multi_union_pw_aff::dim(isl::dim type) const
  13722. {
  13723.   auto res = isl_multi_union_pw_aff_dim(get(), static_cast<enum isl_dim_type>(type));
  13724.   return manage(res);
  13725. }
  13726.  
  13727. isl::union_set multi_union_pw_aff::domain() const
  13728. {
  13729.   auto res = isl_multi_union_pw_aff_domain(copy());
  13730.   return manage(res);
  13731. }
  13732.  
  13733. isl::multi_union_pw_aff multi_union_pw_aff::flat_range_product(isl::multi_union_pw_aff multi2) const
  13734. {
  13735.   auto res = isl_multi_union_pw_aff_flat_range_product(copy(), multi2.release());
  13736.   return manage(res);
  13737. }
  13738.  
  13739. isl::multi_union_pw_aff multi_union_pw_aff::from_union_map(isl::union_map umap)
  13740. {
  13741.   auto res = isl_multi_union_pw_aff_from_union_map(umap.release());
  13742.   return manage(res);
  13743. }
  13744.  
  13745. isl::multi_union_pw_aff multi_union_pw_aff::gist(isl::union_set context) const
  13746. {
  13747.   auto res = isl_multi_union_pw_aff_gist(copy(), context.release());
  13748.   return manage(res);
  13749. }
  13750.  
  13751. boolean multi_union_pw_aff::has_range_tuple_id() const
  13752. {
  13753.   auto res = isl_multi_union_pw_aff_has_range_tuple_id(get());
  13754.   return manage(res);
  13755. }
  13756.  
  13757. isl::multi_union_pw_aff multi_union_pw_aff::intersect_domain(isl::union_set uset) const
  13758. {
  13759.   auto res = isl_multi_union_pw_aff_intersect_domain(copy(), uset.release());
  13760.   return manage(res);
  13761. }
  13762.  
  13763. isl::multi_union_pw_aff multi_union_pw_aff::intersect_params(isl::set params) const
  13764. {
  13765.   auto res = isl_multi_union_pw_aff_intersect_params(copy(), params.release());
  13766.   return manage(res);
  13767. }
  13768.  
  13769. boolean multi_union_pw_aff::involves_nan() const
  13770. {
  13771.   auto res = isl_multi_union_pw_aff_involves_nan(get());
  13772.   return manage(res);
  13773. }
  13774.  
  13775. isl::union_pw_aff_list multi_union_pw_aff::list() const
  13776. {
  13777.   auto res = isl_multi_union_pw_aff_get_list(get());
  13778.   return manage(res);
  13779. }
  13780.  
  13781. isl::union_pw_aff_list multi_union_pw_aff::get_list() const
  13782. {
  13783.   return list();
  13784. }
  13785.  
  13786. isl::multi_union_pw_aff multi_union_pw_aff::neg() const
  13787. {
  13788.   auto res = isl_multi_union_pw_aff_neg(copy());
  13789.   return manage(res);
  13790. }
  13791.  
  13792. boolean multi_union_pw_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
  13793. {
  13794.   auto res = isl_multi_union_pw_aff_plain_is_equal(get(), multi2.get());
  13795.   return manage(res);
  13796. }
  13797.  
  13798. isl::multi_union_pw_aff multi_union_pw_aff::pullback(isl::union_pw_multi_aff upma) const
  13799. {
  13800.   auto res = isl_multi_union_pw_aff_pullback_union_pw_multi_aff(copy(), upma.release());
  13801.   return manage(res);
  13802. }
  13803.  
  13804. isl::multi_union_pw_aff multi_union_pw_aff::range_product(isl::multi_union_pw_aff multi2) const
  13805. {
  13806.   auto res = isl_multi_union_pw_aff_range_product(copy(), multi2.release());
  13807.   return manage(res);
  13808. }
  13809.  
  13810. isl::id multi_union_pw_aff::range_tuple_id() const
  13811. {
  13812.   auto res = isl_multi_union_pw_aff_get_range_tuple_id(get());
  13813.   return manage(res);
  13814. }
  13815.  
  13816. isl::id multi_union_pw_aff::get_range_tuple_id() const
  13817. {
  13818.   return range_tuple_id();
  13819. }
  13820.  
  13821. isl::multi_union_pw_aff multi_union_pw_aff::reset_range_tuple_id() const
  13822. {
  13823.   auto res = isl_multi_union_pw_aff_reset_range_tuple_id(copy());
  13824.   return manage(res);
  13825. }
  13826.  
  13827. isl::multi_union_pw_aff multi_union_pw_aff::reset_tuple_id(isl::dim type) const
  13828. {
  13829.   auto res = isl_multi_union_pw_aff_reset_tuple_id(copy(), static_cast<enum isl_dim_type>(type));
  13830.   return manage(res);
  13831. }
  13832.  
  13833. isl::multi_union_pw_aff multi_union_pw_aff::scale(isl::multi_val mv) const
  13834. {
  13835.   auto res = isl_multi_union_pw_aff_scale_multi_val(copy(), mv.release());
  13836.   return manage(res);
  13837. }
  13838.  
  13839. isl::multi_union_pw_aff multi_union_pw_aff::scale(isl::val v) const
  13840. {
  13841.   auto res = isl_multi_union_pw_aff_scale_val(copy(), v.release());
  13842.   return manage(res);
  13843. }
  13844.  
  13845. isl::multi_union_pw_aff multi_union_pw_aff::scale(long v) const
  13846. {
  13847.   return this->scale(isl::val(ctx(), v));
  13848. }
  13849.  
  13850. isl::multi_union_pw_aff multi_union_pw_aff::scale_down(isl::multi_val mv) const
  13851. {
  13852.   auto res = isl_multi_union_pw_aff_scale_down_multi_val(copy(), mv.release());
  13853.   return manage(res);
  13854. }
  13855.  
  13856. isl::multi_union_pw_aff multi_union_pw_aff::scale_down(isl::val v) const
  13857. {
  13858.   auto res = isl_multi_union_pw_aff_scale_down_val(copy(), v.release());
  13859.   return manage(res);
  13860. }
  13861.  
  13862. isl::multi_union_pw_aff multi_union_pw_aff::scale_down(long v) const
  13863. {
  13864.   return this->scale_down(isl::val(ctx(), v));
  13865. }
  13866.  
  13867. isl::multi_union_pw_aff multi_union_pw_aff::set_at(int pos, isl::union_pw_aff el) const
  13868. {
  13869.   auto res = isl_multi_union_pw_aff_set_at(copy(), pos, el.release());
  13870.   return manage(res);
  13871. }
  13872.  
  13873. isl::multi_union_pw_aff multi_union_pw_aff::set_range_tuple(isl::id id) const
  13874. {
  13875.   auto res = isl_multi_union_pw_aff_set_range_tuple_id(copy(), id.release());
  13876.   return manage(res);
  13877. }
  13878.  
  13879. isl::multi_union_pw_aff multi_union_pw_aff::set_range_tuple(const std::string &id) const
  13880. {
  13881.   return this->set_range_tuple(isl::id(ctx(), id));
  13882. }
  13883.  
  13884. isl::multi_union_pw_aff multi_union_pw_aff::set_union_pw_aff(int pos, isl::union_pw_aff el) const
  13885. {
  13886.   auto res = isl_multi_union_pw_aff_set_union_pw_aff(copy(), pos, el.release());
  13887.   return manage(res);
  13888. }
  13889.  
  13890. class size multi_union_pw_aff::size() const
  13891. {
  13892.   auto res = isl_multi_union_pw_aff_size(get());
  13893.   return manage(res);
  13894. }
  13895.  
  13896. isl::space multi_union_pw_aff::space() const
  13897. {
  13898.   auto res = isl_multi_union_pw_aff_get_space(get());
  13899.   return manage(res);
  13900. }
  13901.  
  13902. isl::space multi_union_pw_aff::get_space() const
  13903. {
  13904.   return space();
  13905. }
  13906.  
  13907. isl::multi_union_pw_aff multi_union_pw_aff::sub(isl::multi_union_pw_aff multi2) const
  13908. {
  13909.   auto res = isl_multi_union_pw_aff_sub(copy(), multi2.release());
  13910.   return manage(res);
  13911. }
  13912.  
  13913. isl::multi_union_pw_aff multi_union_pw_aff::union_add(isl::multi_union_pw_aff mupa2) const
  13914. {
  13915.   auto res = isl_multi_union_pw_aff_union_add(copy(), mupa2.release());
  13916.   return manage(res);
  13917. }
  13918.  
  13919. isl::multi_union_pw_aff multi_union_pw_aff::zero(isl::space space)
  13920. {
  13921.   auto res = isl_multi_union_pw_aff_zero(space.release());
  13922.   return manage(res);
  13923. }
  13924.  
  13925. inline std::ostream &operator<<(std::ostream &os, const multi_union_pw_aff &obj)
  13926. {
  13927.   char *str = isl_multi_union_pw_aff_to_str(obj.get());
  13928.   if (!str) {
  13929.     os.setstate(std::ios_base::badbit);
  13930.     return os;
  13931.   }
  13932.   os << str;
  13933.   free(str);
  13934.   return os;
  13935. }
  13936.  
  13937. // implementations for isl::multi_val
  13938. multi_val manage(__isl_take isl_multi_val *ptr) {
  13939.   return multi_val(ptr);
  13940. }
  13941. multi_val manage_copy(__isl_keep isl_multi_val *ptr) {
  13942.   ptr = isl_multi_val_copy(ptr);
  13943.   return multi_val(ptr);
  13944. }
  13945.  
  13946. multi_val::multi_val()
  13947.     : ptr(nullptr) {}
  13948.  
  13949. multi_val::multi_val(const multi_val &obj)
  13950.     : ptr(nullptr)
  13951. {
  13952.   ptr = obj.copy();
  13953. }
  13954.  
  13955. multi_val::multi_val(__isl_take isl_multi_val *ptr)
  13956.     : ptr(ptr) {}
  13957.  
  13958. multi_val::multi_val(isl::space space, isl::val_list list)
  13959. {
  13960.   auto res = isl_multi_val_from_val_list(space.release(), list.release());
  13961.   ptr = res;
  13962. }
  13963.  
  13964. multi_val::multi_val(isl::ctx ctx, const std::string &str)
  13965. {
  13966.   auto res = isl_multi_val_read_from_str(ctx.release(), str.c_str());
  13967.   ptr = res;
  13968. }
  13969.  
  13970. multi_val &multi_val::operator=(multi_val obj) {
  13971.   std::swap(this->ptr, obj.ptr);
  13972.   return *this;
  13973. }
  13974.  
  13975. multi_val::~multi_val() {
  13976.   if (ptr)
  13977.     isl_multi_val_free(ptr);
  13978. }
  13979.  
  13980. __isl_give isl_multi_val *multi_val::copy() const & {
  13981.   return isl_multi_val_copy(ptr);
  13982. }
  13983.  
  13984. __isl_keep isl_multi_val *multi_val::get() const {
  13985.   return ptr;
  13986. }
  13987.  
  13988. __isl_give isl_multi_val *multi_val::release() {
  13989.   isl_multi_val *tmp = ptr;
  13990.   ptr = nullptr;
  13991.   return tmp;
  13992. }
  13993.  
  13994. bool multi_val::is_null() const {
  13995.   return ptr == nullptr;
  13996. }
  13997.  
  13998. isl::ctx multi_val::ctx() const {
  13999.   return isl::ctx(isl_multi_val_get_ctx(ptr));
  14000. }
  14001.  
  14002. isl::multi_val multi_val::add(isl::multi_val multi2) const
  14003. {
  14004.   auto res = isl_multi_val_add(copy(), multi2.release());
  14005.   return manage(res);
  14006. }
  14007.  
  14008. isl::multi_val multi_val::add(isl::val v) const
  14009. {
  14010.   auto res = isl_multi_val_add_val(copy(), v.release());
  14011.   return manage(res);
  14012. }
  14013.  
  14014. isl::multi_val multi_val::add(long v) const
  14015. {
  14016.   return this->add(isl::val(ctx(), v));
  14017. }
  14018.  
  14019. isl::val multi_val::at(int pos) const
  14020. {
  14021.   auto res = isl_multi_val_get_at(get(), pos);
  14022.   return manage(res);
  14023. }
  14024.  
  14025. isl::val multi_val::get_at(int pos) const
  14026. {
  14027.   return at(pos);
  14028. }
  14029.  
  14030. class size multi_val::dim(isl::dim type) const
  14031. {
  14032.   auto res = isl_multi_val_dim(get(), static_cast<enum isl_dim_type>(type));
  14033.   return manage(res);
  14034. }
  14035.  
  14036. isl::multi_val multi_val::flat_range_product(isl::multi_val multi2) const
  14037. {
  14038.   auto res = isl_multi_val_flat_range_product(copy(), multi2.release());
  14039.   return manage(res);
  14040. }
  14041.  
  14042. boolean multi_val::has_range_tuple_id() const
  14043. {
  14044.   auto res = isl_multi_val_has_range_tuple_id(get());
  14045.   return manage(res);
  14046. }
  14047.  
  14048. boolean multi_val::involves_nan() const
  14049. {
  14050.   auto res = isl_multi_val_involves_nan(get());
  14051.   return manage(res);
  14052. }
  14053.  
  14054. isl::val_list multi_val::list() const
  14055. {
  14056.   auto res = isl_multi_val_get_list(get());
  14057.   return manage(res);
  14058. }
  14059.  
  14060. isl::val_list multi_val::get_list() const
  14061. {
  14062.   return list();
  14063. }
  14064.  
  14065. isl::multi_val multi_val::max(isl::multi_val multi2) const
  14066. {
  14067.   auto res = isl_multi_val_max(copy(), multi2.release());
  14068.   return manage(res);
  14069. }
  14070.  
  14071. isl::multi_val multi_val::min(isl::multi_val multi2) const
  14072. {
  14073.   auto res = isl_multi_val_min(copy(), multi2.release());
  14074.   return manage(res);
  14075. }
  14076.  
  14077. isl::multi_val multi_val::neg() const
  14078. {
  14079.   auto res = isl_multi_val_neg(copy());
  14080.   return manage(res);
  14081. }
  14082.  
  14083. boolean multi_val::plain_is_equal(const isl::multi_val &multi2) const
  14084. {
  14085.   auto res = isl_multi_val_plain_is_equal(get(), multi2.get());
  14086.   return manage(res);
  14087. }
  14088.  
  14089. isl::multi_val multi_val::product(isl::multi_val multi2) const
  14090. {
  14091.   auto res = isl_multi_val_product(copy(), multi2.release());
  14092.   return manage(res);
  14093. }
  14094.  
  14095. isl::multi_val multi_val::range_product(isl::multi_val multi2) const
  14096. {
  14097.   auto res = isl_multi_val_range_product(copy(), multi2.release());
  14098.   return manage(res);
  14099. }
  14100.  
  14101. isl::id multi_val::range_tuple_id() const
  14102. {
  14103.   auto res = isl_multi_val_get_range_tuple_id(get());
  14104.   return manage(res);
  14105. }
  14106.  
  14107. isl::id multi_val::get_range_tuple_id() const
  14108. {
  14109.   return range_tuple_id();
  14110. }
  14111.  
  14112. isl::multi_val multi_val::reset_range_tuple_id() const
  14113. {
  14114.   auto res = isl_multi_val_reset_range_tuple_id(copy());
  14115.   return manage(res);
  14116. }
  14117.  
  14118. isl::multi_val multi_val::reset_tuple_id(isl::dim type) const
  14119. {
  14120.   auto res = isl_multi_val_reset_tuple_id(copy(), static_cast<enum isl_dim_type>(type));
  14121.   return manage(res);
  14122. }
  14123.  
  14124. isl::multi_val multi_val::scale(isl::multi_val mv) const
  14125. {
  14126.   auto res = isl_multi_val_scale_multi_val(copy(), mv.release());
  14127.   return manage(res);
  14128. }
  14129.  
  14130. isl::multi_val multi_val::scale(isl::val v) const
  14131. {
  14132.   auto res = isl_multi_val_scale_val(copy(), v.release());
  14133.   return manage(res);
  14134. }
  14135.  
  14136. isl::multi_val multi_val::scale(long v) const
  14137. {
  14138.   return this->scale(isl::val(ctx(), v));
  14139. }
  14140.  
  14141. isl::multi_val multi_val::scale_down(isl::multi_val mv) const
  14142. {
  14143.   auto res = isl_multi_val_scale_down_multi_val(copy(), mv.release());
  14144.   return manage(res);
  14145. }
  14146.  
  14147. isl::multi_val multi_val::scale_down(isl::val v) const
  14148. {
  14149.   auto res = isl_multi_val_scale_down_val(copy(), v.release());
  14150.   return manage(res);
  14151. }
  14152.  
  14153. isl::multi_val multi_val::scale_down(long v) const
  14154. {
  14155.   return this->scale_down(isl::val(ctx(), v));
  14156. }
  14157.  
  14158. isl::multi_val multi_val::set_at(int pos, isl::val el) const
  14159. {
  14160.   auto res = isl_multi_val_set_at(copy(), pos, el.release());
  14161.   return manage(res);
  14162. }
  14163.  
  14164. isl::multi_val multi_val::set_at(int pos, long el) const
  14165. {
  14166.   return this->set_at(pos, isl::val(ctx(), el));
  14167. }
  14168.  
  14169. isl::multi_val multi_val::set_range_tuple(isl::id id) const
  14170. {
  14171.   auto res = isl_multi_val_set_range_tuple_id(copy(), id.release());
  14172.   return manage(res);
  14173. }
  14174.  
  14175. isl::multi_val multi_val::set_range_tuple(const std::string &id) const
  14176. {
  14177.   return this->set_range_tuple(isl::id(ctx(), id));
  14178. }
  14179.  
  14180. isl::multi_val multi_val::set_val(int pos, isl::val el) const
  14181. {
  14182.   auto res = isl_multi_val_set_val(copy(), pos, el.release());
  14183.   return manage(res);
  14184. }
  14185.  
  14186. isl::multi_val multi_val::set_val(int pos, long el) const
  14187. {
  14188.   return this->set_val(pos, isl::val(ctx(), el));
  14189. }
  14190.  
  14191. class size multi_val::size() const
  14192. {
  14193.   auto res = isl_multi_val_size(get());
  14194.   return manage(res);
  14195. }
  14196.  
  14197. isl::space multi_val::space() const
  14198. {
  14199.   auto res = isl_multi_val_get_space(get());
  14200.   return manage(res);
  14201. }
  14202.  
  14203. isl::space multi_val::get_space() const
  14204. {
  14205.   return space();
  14206. }
  14207.  
  14208. isl::multi_val multi_val::sub(isl::multi_val multi2) const
  14209. {
  14210.   auto res = isl_multi_val_sub(copy(), multi2.release());
  14211.   return manage(res);
  14212. }
  14213.  
  14214. isl::multi_val multi_val::zero(isl::space space)
  14215. {
  14216.   auto res = isl_multi_val_zero(space.release());
  14217.   return manage(res);
  14218. }
  14219.  
  14220. inline std::ostream &operator<<(std::ostream &os, const multi_val &obj)
  14221. {
  14222.   char *str = isl_multi_val_to_str(obj.get());
  14223.   if (!str) {
  14224.     os.setstate(std::ios_base::badbit);
  14225.     return os;
  14226.   }
  14227.   os << str;
  14228.   free(str);
  14229.   return os;
  14230. }
  14231.  
  14232. // implementations for isl::point
  14233. point manage(__isl_take isl_point *ptr) {
  14234.   return point(ptr);
  14235. }
  14236. point manage_copy(__isl_keep isl_point *ptr) {
  14237.   ptr = isl_point_copy(ptr);
  14238.   return point(ptr);
  14239. }
  14240.  
  14241. point::point()
  14242.     : ptr(nullptr) {}
  14243.  
  14244. point::point(const point &obj)
  14245.     : ptr(nullptr)
  14246. {
  14247.   ptr = obj.copy();
  14248. }
  14249.  
  14250. point::point(__isl_take isl_point *ptr)
  14251.     : ptr(ptr) {}
  14252.  
  14253. point::point(isl::space space)
  14254. {
  14255.   auto res = isl_point_zero(space.release());
  14256.   ptr = res;
  14257. }
  14258.  
  14259. point &point::operator=(point obj) {
  14260.   std::swap(this->ptr, obj.ptr);
  14261.   return *this;
  14262. }
  14263.  
  14264. point::~point() {
  14265.   if (ptr)
  14266.     isl_point_free(ptr);
  14267. }
  14268.  
  14269. __isl_give isl_point *point::copy() const & {
  14270.   return isl_point_copy(ptr);
  14271. }
  14272.  
  14273. __isl_keep isl_point *point::get() const {
  14274.   return ptr;
  14275. }
  14276.  
  14277. __isl_give isl_point *point::release() {
  14278.   isl_point *tmp = ptr;
  14279.   ptr = nullptr;
  14280.   return tmp;
  14281. }
  14282.  
  14283. bool point::is_null() const {
  14284.   return ptr == nullptr;
  14285. }
  14286.  
  14287. isl::ctx point::ctx() const {
  14288.   return isl::ctx(isl_point_get_ctx(ptr));
  14289. }
  14290.  
  14291. isl::set point::add_constraint(const isl::constraint &constraint) const
  14292. {
  14293.   return isl::basic_set(*this).add_constraint(constraint);
  14294. }
  14295.  
  14296. isl::set point::add_dims(isl::dim type, unsigned int n) const
  14297. {
  14298.   return isl::basic_set(*this).add_dims(type, n);
  14299. }
  14300.  
  14301. isl::basic_set point::affine_hull() const
  14302. {
  14303.   return isl::basic_set(*this).affine_hull();
  14304. }
  14305.  
  14306. isl::set point::align_params(const isl::space &model) const
  14307. {
  14308.   return isl::basic_set(*this).align_params(model);
  14309. }
  14310.  
  14311. isl::basic_set point::apply(const isl::basic_map &bmap) const
  14312. {
  14313.   return isl::basic_set(*this).apply(bmap);
  14314. }
  14315.  
  14316. isl::set point::apply(const isl::map &map) const
  14317. {
  14318.   return isl::basic_set(*this).apply(map);
  14319. }
  14320.  
  14321. isl::union_set point::apply(const isl::union_map &umap) const
  14322. {
  14323.   return isl::basic_set(*this).apply(umap);
  14324. }
  14325.  
  14326. isl::pw_multi_aff point::as_pw_multi_aff() const
  14327. {
  14328.   return isl::basic_set(*this).as_pw_multi_aff();
  14329. }
  14330.  
  14331. isl::set point::as_set() const
  14332. {
  14333.   return isl::basic_set(*this).as_set();
  14334. }
  14335.  
  14336. isl::basic_set_list point::basic_set_list() const
  14337. {
  14338.   return isl::basic_set(*this).basic_set_list();
  14339. }
  14340.  
  14341. isl::set point::bind(const isl::multi_id &tuple) const
  14342. {
  14343.   return isl::basic_set(*this).bind(tuple);
  14344. }
  14345.  
  14346. isl::set point::coalesce() const
  14347. {
  14348.   return isl::basic_set(*this).coalesce();
  14349. }
  14350.  
  14351. isl::set point::complement() const
  14352. {
  14353.   return isl::basic_set(*this).complement();
  14354. }
  14355.  
  14356. isl::union_set point::compute_divs() const
  14357. {
  14358.   return isl::basic_set(*this).compute_divs();
  14359. }
  14360.  
  14361. boolean point::contains(const isl::space &space) const
  14362. {
  14363.   return isl::basic_set(*this).contains(space);
  14364. }
  14365.  
  14366. isl::basic_set point::convex_hull() const
  14367. {
  14368.   return isl::basic_set(*this).convex_hull();
  14369. }
  14370.  
  14371. isl::val point::coordinate_val(isl::dim type, int pos) const
  14372. {
  14373.   auto res = isl_point_get_coordinate_val(get(), static_cast<enum isl_dim_type>(type), pos);
  14374.   return manage(res);
  14375. }
  14376.  
  14377. isl::val point::get_coordinate_val(isl::dim type, int pos) const
  14378. {
  14379.   return coordinate_val(type, pos);
  14380. }
  14381.  
  14382. isl::basic_set point::detect_equalities() const
  14383. {
  14384.   return isl::basic_set(*this).detect_equalities();
  14385. }
  14386.  
  14387. class size point::dim(isl::dim type) const
  14388. {
  14389.   return isl::basic_set(*this).dim(type);
  14390. }
  14391.  
  14392. boolean point::dim_has_any_lower_bound(isl::dim type, unsigned int pos) const
  14393. {
  14394.   return isl::basic_set(*this).dim_has_any_lower_bound(type, pos);
  14395. }
  14396.  
  14397. isl::id point::dim_id(isl::dim type, unsigned int pos) const
  14398. {
  14399.   return isl::basic_set(*this).dim_id(type, pos);
  14400. }
  14401.  
  14402. isl::pw_aff point::dim_max(int pos) const
  14403. {
  14404.   return isl::basic_set(*this).dim_max(pos);
  14405. }
  14406.  
  14407. isl::val point::dim_max_val(int pos) const
  14408. {
  14409.   return isl::basic_set(*this).dim_max_val(pos);
  14410. }
  14411.  
  14412. isl::pw_aff point::dim_min(int pos) const
  14413. {
  14414.   return isl::basic_set(*this).dim_min(pos);
  14415. }
  14416.  
  14417. isl::val point::dim_min_val(int pos) const
  14418. {
  14419.   return isl::basic_set(*this).dim_min_val(pos);
  14420. }
  14421.  
  14422. std::string point::dim_name(isl::dim type, unsigned int pos) const
  14423. {
  14424.   return isl::basic_set(*this).dim_name(type, pos);
  14425. }
  14426.  
  14427. isl::aff point::div(int pos) const
  14428. {
  14429.   return isl::basic_set(*this).div(pos);
  14430. }
  14431.  
  14432. isl::set point::drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const
  14433. {
  14434.   return isl::basic_set(*this).drop_constraints_involving_dims(type, first, n);
  14435. }
  14436.  
  14437. isl::set point::eliminate(isl::dim type, unsigned int first, unsigned int n) const
  14438. {
  14439.   return isl::basic_set(*this).eliminate(type, first, n);
  14440. }
  14441.  
  14442. boolean point::every_set(const std::function<boolean(isl::set)> &test) const
  14443. {
  14444.   return isl::basic_set(*this).every_set(test);
  14445. }
  14446.  
  14447. isl::set point::extract_set(const isl::space &space) const
  14448. {
  14449.   return isl::basic_set(*this).extract_set(space);
  14450. }
  14451.  
  14452. int point::find_dim_by_id(isl::dim type, const isl::id &id) const
  14453. {
  14454.   return isl::basic_set(*this).find_dim_by_id(type, id);
  14455. }
  14456.  
  14457. int point::find_dim_by_id(isl::dim type, const std::string &id) const
  14458. {
  14459.   return this->find_dim_by_id(type, isl::id(ctx(), id));
  14460. }
  14461.  
  14462. isl::basic_set point::fix_si(isl::dim type, unsigned int pos, int value) const
  14463. {
  14464.   return isl::basic_set(*this).fix_si(type, pos, value);
  14465. }
  14466.  
  14467. isl::basic_set point::fix_val(isl::dim type, unsigned int pos, const isl::val &v) const
  14468. {
  14469.   return isl::basic_set(*this).fix_val(type, pos, v);
  14470. }
  14471.  
  14472. isl::basic_set point::fix_val(isl::dim type, unsigned int pos, long v) const
  14473. {
  14474.   return this->fix_val(type, pos, isl::val(ctx(), v));
  14475. }
  14476.  
  14477. isl::basic_set point::flatten() const
  14478. {
  14479.   return isl::basic_set(*this).flatten();
  14480. }
  14481.  
  14482. stat point::foreach_basic_set(const std::function<stat(isl::basic_set)> &fn) const
  14483. {
  14484.   return isl::basic_set(*this).foreach_basic_set(fn);
  14485. }
  14486.  
  14487. stat point::foreach_point(const std::function<stat(isl::point)> &fn) const
  14488. {
  14489.   return isl::basic_set(*this).foreach_point(fn);
  14490. }
  14491.  
  14492. stat point::foreach_set(const std::function<stat(isl::set)> &fn) const
  14493. {
  14494.   return isl::basic_set(*this).foreach_set(fn);
  14495. }
  14496.  
  14497. isl::basic_set point::gist(const isl::basic_set &context) const
  14498. {
  14499.   return isl::basic_set(*this).gist(context);
  14500. }
  14501.  
  14502. isl::set point::gist(const isl::set &context) const
  14503. {
  14504.   return isl::basic_set(*this).gist(context);
  14505. }
  14506.  
  14507. isl::union_set point::gist(const isl::union_set &context) const
  14508. {
  14509.   return isl::basic_set(*this).gist(context);
  14510. }
  14511.  
  14512. isl::set point::gist_params(const isl::set &context) const
  14513. {
  14514.   return isl::basic_set(*this).gist_params(context);
  14515. }
  14516.  
  14517. boolean point::has_equal_space(const isl::set &set2) const
  14518. {
  14519.   return isl::basic_set(*this).has_equal_space(set2);
  14520. }
  14521.  
  14522. isl::map point::identity() const
  14523. {
  14524.   return isl::basic_set(*this).identity();
  14525. }
  14526.  
  14527. isl::union_pw_multi_aff point::identity_union_pw_multi_aff() const
  14528. {
  14529.   return isl::basic_set(*this).identity_union_pw_multi_aff();
  14530. }
  14531.  
  14532. isl::pw_aff point::indicator_function() const
  14533. {
  14534.   return isl::basic_set(*this).indicator_function();
  14535. }
  14536.  
  14537. isl::set point::insert_dims(isl::dim type, unsigned int pos, unsigned int n) const
  14538. {
  14539.   return isl::basic_set(*this).insert_dims(type, pos, n);
  14540. }
  14541.  
  14542. isl::map point::insert_domain(const isl::space &domain) const
  14543. {
  14544.   return isl::basic_set(*this).insert_domain(domain);
  14545. }
  14546.  
  14547. isl::basic_set point::intersect(const isl::basic_set &bset2) const
  14548. {
  14549.   return isl::basic_set(*this).intersect(bset2);
  14550. }
  14551.  
  14552. isl::set point::intersect(const isl::set &set2) const
  14553. {
  14554.   return isl::basic_set(*this).intersect(set2);
  14555. }
  14556.  
  14557. isl::union_set point::intersect(const isl::union_set &uset2) const
  14558. {
  14559.   return isl::basic_set(*this).intersect(uset2);
  14560. }
  14561.  
  14562. isl::basic_set point::intersect_params(const isl::basic_set &bset2) const
  14563. {
  14564.   return isl::basic_set(*this).intersect_params(bset2);
  14565. }
  14566.  
  14567. isl::set point::intersect_params(const isl::set &params) const
  14568. {
  14569.   return isl::basic_set(*this).intersect_params(params);
  14570. }
  14571.  
  14572. boolean point::involves_dims(isl::dim type, unsigned int first, unsigned int n) const
  14573. {
  14574.   return isl::basic_set(*this).involves_dims(type, first, n);
  14575. }
  14576.  
  14577. boolean point::involves_locals() const
  14578. {
  14579.   return isl::basic_set(*this).involves_locals();
  14580. }
  14581.  
  14582. boolean point::is_bounded() const
  14583. {
  14584.   return isl::basic_set(*this).is_bounded();
  14585. }
  14586.  
  14587. boolean point::is_disjoint(const isl::set &set2) const
  14588. {
  14589.   return isl::basic_set(*this).is_disjoint(set2);
  14590. }
  14591.  
  14592. boolean point::is_disjoint(const isl::union_set &uset2) const
  14593. {
  14594.   return isl::basic_set(*this).is_disjoint(uset2);
  14595. }
  14596.  
  14597. boolean point::is_empty() const
  14598. {
  14599.   return isl::basic_set(*this).is_empty();
  14600. }
  14601.  
  14602. boolean point::is_equal(const isl::basic_set &bset2) const
  14603. {
  14604.   return isl::basic_set(*this).is_equal(bset2);
  14605. }
  14606.  
  14607. boolean point::is_equal(const isl::set &set2) const
  14608. {
  14609.   return isl::basic_set(*this).is_equal(set2);
  14610. }
  14611.  
  14612. boolean point::is_equal(const isl::union_set &uset2) const
  14613. {
  14614.   return isl::basic_set(*this).is_equal(uset2);
  14615. }
  14616.  
  14617. boolean point::is_params() const
  14618. {
  14619.   return isl::basic_set(*this).is_params();
  14620. }
  14621.  
  14622. boolean point::is_singleton() const
  14623. {
  14624.   return isl::basic_set(*this).is_singleton();
  14625. }
  14626.  
  14627. boolean point::is_strict_subset(const isl::set &set2) const
  14628. {
  14629.   return isl::basic_set(*this).is_strict_subset(set2);
  14630. }
  14631.  
  14632. boolean point::is_strict_subset(const isl::union_set &uset2) const
  14633. {
  14634.   return isl::basic_set(*this).is_strict_subset(uset2);
  14635. }
  14636.  
  14637. boolean point::is_subset(const isl::basic_set &bset2) const
  14638. {
  14639.   return isl::basic_set(*this).is_subset(bset2);
  14640. }
  14641.  
  14642. boolean point::is_subset(const isl::set &set2) const
  14643. {
  14644.   return isl::basic_set(*this).is_subset(set2);
  14645. }
  14646.  
  14647. boolean point::is_subset(const isl::union_set &uset2) const
  14648. {
  14649.   return isl::basic_set(*this).is_subset(uset2);
  14650. }
  14651.  
  14652. boolean point::is_wrapping() const
  14653. {
  14654.   return isl::basic_set(*this).is_wrapping();
  14655. }
  14656.  
  14657. boolean point::isa_set() const
  14658. {
  14659.   return isl::basic_set(*this).isa_set();
  14660. }
  14661.  
  14662. isl::set point::lexmax() const
  14663. {
  14664.   return isl::basic_set(*this).lexmax();
  14665. }
  14666.  
  14667. isl::pw_multi_aff point::lexmax_pw_multi_aff() const
  14668. {
  14669.   return isl::basic_set(*this).lexmax_pw_multi_aff();
  14670. }
  14671.  
  14672. isl::set point::lexmin() const
  14673. {
  14674.   return isl::basic_set(*this).lexmin();
  14675. }
  14676.  
  14677. isl::pw_multi_aff point::lexmin_pw_multi_aff() const
  14678. {
  14679.   return isl::basic_set(*this).lexmin_pw_multi_aff();
  14680. }
  14681.  
  14682. isl::set point::lower_bound(const isl::multi_pw_aff &lower) const
  14683. {
  14684.   return isl::basic_set(*this).lower_bound(lower);
  14685. }
  14686.  
  14687. isl::set point::lower_bound(const isl::multi_val &lower) const
  14688. {
  14689.   return isl::basic_set(*this).lower_bound(lower);
  14690. }
  14691.  
  14692. isl::set point::lower_bound_si(isl::dim type, unsigned int pos, int value) const
  14693. {
  14694.   return isl::basic_set(*this).lower_bound_si(type, pos, value);
  14695. }
  14696.  
  14697. isl::set point::lower_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const
  14698. {
  14699.   return isl::basic_set(*this).lower_bound_val(type, pos, value);
  14700. }
  14701.  
  14702. isl::set point::lower_bound_val(isl::dim type, unsigned int pos, long value) const
  14703. {
  14704.   return this->lower_bound_val(type, pos, isl::val(ctx(), value));
  14705. }
  14706.  
  14707. isl::multi_pw_aff point::max_multi_pw_aff() const
  14708. {
  14709.   return isl::basic_set(*this).max_multi_pw_aff();
  14710. }
  14711.  
  14712. isl::val point::max_val(const isl::aff &obj) const
  14713. {
  14714.   return isl::basic_set(*this).max_val(obj);
  14715. }
  14716.  
  14717. isl::multi_pw_aff point::min_multi_pw_aff() const
  14718. {
  14719.   return isl::basic_set(*this).min_multi_pw_aff();
  14720. }
  14721.  
  14722. isl::val point::min_val(const isl::aff &obj) const
  14723. {
  14724.   return isl::basic_set(*this).min_val(obj);
  14725. }
  14726.  
  14727. isl::multi_val point::multi_val() const
  14728. {
  14729.   auto res = isl_point_get_multi_val(get());
  14730.   return manage(res);
  14731. }
  14732.  
  14733. isl::multi_val point::get_multi_val() const
  14734. {
  14735.   return multi_val();
  14736. }
  14737.  
  14738. class size point::n_basic_set() const
  14739. {
  14740.   return isl::basic_set(*this).n_basic_set();
  14741. }
  14742.  
  14743. isl::basic_set point::params() const
  14744. {
  14745.   return isl::basic_set(*this).params();
  14746. }
  14747.  
  14748. isl::val point::plain_get_val_if_fixed(isl::dim type, unsigned int pos) const
  14749. {
  14750.   return isl::basic_set(*this).plain_get_val_if_fixed(type, pos);
  14751. }
  14752.  
  14753. isl::multi_val point::plain_multi_val_if_fixed() const
  14754. {
  14755.   return isl::basic_set(*this).plain_multi_val_if_fixed();
  14756. }
  14757.  
  14758. isl::basic_set point::polyhedral_hull() const
  14759. {
  14760.   return isl::basic_set(*this).polyhedral_hull();
  14761. }
  14762.  
  14763. isl::set point::preimage(const isl::multi_aff &ma) const
  14764. {
  14765.   return isl::basic_set(*this).preimage(ma);
  14766. }
  14767.  
  14768. isl::set point::preimage(const isl::multi_pw_aff &mpa) const
  14769. {
  14770.   return isl::basic_set(*this).preimage(mpa);
  14771. }
  14772.  
  14773. isl::set point::preimage(const isl::pw_multi_aff &pma) const
  14774. {
  14775.   return isl::basic_set(*this).preimage(pma);
  14776. }
  14777.  
  14778. isl::union_set point::preimage(const isl::union_pw_multi_aff &upma) const
  14779. {
  14780.   return isl::basic_set(*this).preimage(upma);
  14781. }
  14782.  
  14783. isl::set point::product(const isl::set &set2) const
  14784. {
  14785.   return isl::basic_set(*this).product(set2);
  14786. }
  14787.  
  14788. isl::basic_set point::project_out(isl::dim type, unsigned int first, unsigned int n) const
  14789. {
  14790.   return isl::basic_set(*this).project_out(type, first, n);
  14791. }
  14792.  
  14793. isl::set point::project_out_all_params() const
  14794. {
  14795.   return isl::basic_set(*this).project_out_all_params();
  14796. }
  14797.  
  14798. isl::set point::project_out_param(const isl::id &id) const
  14799. {
  14800.   return isl::basic_set(*this).project_out_param(id);
  14801. }
  14802.  
  14803. isl::set point::project_out_param(const std::string &id) const
  14804. {
  14805.   return this->project_out_param(isl::id(ctx(), id));
  14806. }
  14807.  
  14808. isl::set point::project_out_param(const isl::id_list &list) const
  14809. {
  14810.   return isl::basic_set(*this).project_out_param(list);
  14811. }
  14812.  
  14813. isl::pw_multi_aff point::pw_multi_aff_on_domain(const isl::multi_val &mv) const
  14814. {
  14815.   return isl::basic_set(*this).pw_multi_aff_on_domain(mv);
  14816. }
  14817.  
  14818. isl::set point::remove_dims(isl::dim type, unsigned int first, unsigned int n) const
  14819. {
  14820.   return isl::basic_set(*this).remove_dims(type, first, n);
  14821. }
  14822.  
  14823. isl::set point::remove_divs() const
  14824. {
  14825.   return isl::basic_set(*this).remove_divs();
  14826. }
  14827.  
  14828. isl::set point::remove_redundancies() const
  14829. {
  14830.   return isl::basic_set(*this).remove_redundancies();
  14831. }
  14832.  
  14833. isl::set point::reset_tuple_id() const
  14834. {
  14835.   return isl::basic_set(*this).reset_tuple_id();
  14836. }
  14837.  
  14838. isl::basic_set point::sample() const
  14839. {
  14840.   return isl::basic_set(*this).sample();
  14841. }
  14842.  
  14843. isl::point point::sample_point() const
  14844. {
  14845.   return isl::basic_set(*this).sample_point();
  14846. }
  14847.  
  14848. isl::set point::set_dim_id(isl::dim type, unsigned int pos, const isl::id &id) const
  14849. {
  14850.   return isl::basic_set(*this).set_dim_id(type, pos, id);
  14851. }
  14852.  
  14853. isl::set point::set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const
  14854. {
  14855.   return this->set_dim_id(type, pos, isl::id(ctx(), id));
  14856. }
  14857.  
  14858. isl::set_list point::set_list() const
  14859. {
  14860.   return isl::basic_set(*this).set_list();
  14861. }
  14862.  
  14863. isl::set point::set_tuple_id(const isl::id &id) const
  14864. {
  14865.   return isl::basic_set(*this).set_tuple_id(id);
  14866. }
  14867.  
  14868. isl::set point::set_tuple_id(const std::string &id) const
  14869. {
  14870.   return this->set_tuple_id(isl::id(ctx(), id));
  14871. }
  14872.  
  14873. isl::fixed_box point::simple_fixed_box_hull() const
  14874. {
  14875.   return isl::basic_set(*this).simple_fixed_box_hull();
  14876. }
  14877.  
  14878. isl::basic_set point::simple_hull() const
  14879. {
  14880.   return isl::basic_set(*this).simple_hull();
  14881. }
  14882.  
  14883. isl::space point::space() const
  14884. {
  14885.   return isl::basic_set(*this).space();
  14886. }
  14887.  
  14888. isl::val point::stride(int pos) const
  14889. {
  14890.   return isl::basic_set(*this).stride(pos);
  14891. }
  14892.  
  14893. isl::set point::subtract(const isl::set &set2) const
  14894. {
  14895.   return isl::basic_set(*this).subtract(set2);
  14896. }
  14897.  
  14898. isl::union_set point::subtract(const isl::union_set &uset2) const
  14899. {
  14900.   return isl::basic_set(*this).subtract(uset2);
  14901. }
  14902.  
  14903. isl::basic_set_list point::to_list() const
  14904. {
  14905.   return isl::basic_set(*this).to_list();
  14906. }
  14907.  
  14908. isl::set point::to_set() const
  14909. {
  14910.   auto res = isl_point_to_set(copy());
  14911.   return manage(res);
  14912. }
  14913.  
  14914. isl::union_set point::to_union_set() const
  14915. {
  14916.   return isl::basic_set(*this).to_union_set();
  14917. }
  14918.  
  14919. isl::map point::translation() const
  14920. {
  14921.   return isl::basic_set(*this).translation();
  14922. }
  14923.  
  14924. class size point::tuple_dim() const
  14925. {
  14926.   return isl::basic_set(*this).tuple_dim();
  14927. }
  14928.  
  14929. isl::id point::tuple_id() const
  14930. {
  14931.   return isl::basic_set(*this).tuple_id();
  14932. }
  14933.  
  14934. std::string point::tuple_name() const
  14935. {
  14936.   return isl::basic_set(*this).tuple_name();
  14937. }
  14938.  
  14939. isl::set point::unbind_params(const isl::multi_id &tuple) const
  14940. {
  14941.   return isl::basic_set(*this).unbind_params(tuple);
  14942. }
  14943.  
  14944. isl::map point::unbind_params_insert_domain(const isl::multi_id &domain) const
  14945. {
  14946.   return isl::basic_set(*this).unbind_params_insert_domain(domain);
  14947. }
  14948.  
  14949. isl::set point::unite(const isl::basic_set &bset2) const
  14950. {
  14951.   return isl::basic_set(*this).unite(bset2);
  14952. }
  14953.  
  14954. isl::set point::unite(const isl::set &set2) const
  14955. {
  14956.   return isl::basic_set(*this).unite(set2);
  14957. }
  14958.  
  14959. isl::union_set point::unite(const isl::union_set &uset2) const
  14960. {
  14961.   return isl::basic_set(*this).unite(uset2);
  14962. }
  14963.  
  14964. isl::basic_set point::unshifted_simple_hull() const
  14965. {
  14966.   return isl::basic_set(*this).unshifted_simple_hull();
  14967. }
  14968.  
  14969. isl::map point::unwrap() const
  14970. {
  14971.   return isl::basic_set(*this).unwrap();
  14972. }
  14973.  
  14974. isl::set point::upper_bound(const isl::multi_pw_aff &upper) const
  14975. {
  14976.   return isl::basic_set(*this).upper_bound(upper);
  14977. }
  14978.  
  14979. isl::set point::upper_bound(const isl::multi_val &upper) const
  14980. {
  14981.   return isl::basic_set(*this).upper_bound(upper);
  14982. }
  14983.  
  14984. isl::set point::upper_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const
  14985. {
  14986.   return isl::basic_set(*this).upper_bound_val(type, pos, value);
  14987. }
  14988.  
  14989. isl::set point::upper_bound_val(isl::dim type, unsigned int pos, long value) const
  14990. {
  14991.   return this->upper_bound_val(type, pos, isl::val(ctx(), value));
  14992. }
  14993.  
  14994. inline std::ostream &operator<<(std::ostream &os, const point &obj)
  14995. {
  14996.   char *str = isl_point_to_str(obj.get());
  14997.   if (!str) {
  14998.     os.setstate(std::ios_base::badbit);
  14999.     return os;
  15000.   }
  15001.   os << str;
  15002.   free(str);
  15003.   return os;
  15004. }
  15005.  
  15006. // implementations for isl::pw_aff
  15007. pw_aff manage(__isl_take isl_pw_aff *ptr) {
  15008.   return pw_aff(ptr);
  15009. }
  15010. pw_aff manage_copy(__isl_keep isl_pw_aff *ptr) {
  15011.   ptr = isl_pw_aff_copy(ptr);
  15012.   return pw_aff(ptr);
  15013. }
  15014.  
  15015. pw_aff::pw_aff()
  15016.     : ptr(nullptr) {}
  15017.  
  15018. pw_aff::pw_aff(const pw_aff &obj)
  15019.     : ptr(nullptr)
  15020. {
  15021.   ptr = obj.copy();
  15022. }
  15023.  
  15024. pw_aff::pw_aff(__isl_take isl_pw_aff *ptr)
  15025.     : ptr(ptr) {}
  15026.  
  15027. pw_aff::pw_aff(isl::aff aff)
  15028. {
  15029.   auto res = isl_pw_aff_from_aff(aff.release());
  15030.   ptr = res;
  15031. }
  15032.  
  15033. pw_aff::pw_aff(isl::ctx ctx, const std::string &str)
  15034. {
  15035.   auto res = isl_pw_aff_read_from_str(ctx.release(), str.c_str());
  15036.   ptr = res;
  15037. }
  15038.  
  15039. pw_aff::pw_aff(isl::set domain, isl::val v)
  15040. {
  15041.   auto res = isl_pw_aff_val_on_domain(domain.release(), v.release());
  15042.   ptr = res;
  15043. }
  15044.  
  15045. pw_aff::pw_aff(isl::local_space ls)
  15046. {
  15047.   auto res = isl_pw_aff_zero_on_domain(ls.release());
  15048.   ptr = res;
  15049. }
  15050.  
  15051. pw_aff &pw_aff::operator=(pw_aff obj) {
  15052.   std::swap(this->ptr, obj.ptr);
  15053.   return *this;
  15054. }
  15055.  
  15056. pw_aff::~pw_aff() {
  15057.   if (ptr)
  15058.     isl_pw_aff_free(ptr);
  15059. }
  15060.  
  15061. __isl_give isl_pw_aff *pw_aff::copy() const & {
  15062.   return isl_pw_aff_copy(ptr);
  15063. }
  15064.  
  15065. __isl_keep isl_pw_aff *pw_aff::get() const {
  15066.   return ptr;
  15067. }
  15068.  
  15069. __isl_give isl_pw_aff *pw_aff::release() {
  15070.   isl_pw_aff *tmp = ptr;
  15071.   ptr = nullptr;
  15072.   return tmp;
  15073. }
  15074.  
  15075. bool pw_aff::is_null() const {
  15076.   return ptr == nullptr;
  15077. }
  15078.  
  15079. isl::ctx pw_aff::ctx() const {
  15080.   return isl::ctx(isl_pw_aff_get_ctx(ptr));
  15081. }
  15082.  
  15083. isl::multi_pw_aff pw_aff::add(const isl::multi_pw_aff &multi2) const
  15084. {
  15085.   return isl::pw_multi_aff(*this).add(multi2);
  15086. }
  15087.  
  15088. isl::multi_union_pw_aff pw_aff::add(const isl::multi_union_pw_aff &multi2) const
  15089. {
  15090.   return isl::union_pw_aff(*this).add(multi2);
  15091. }
  15092.  
  15093. isl::pw_aff pw_aff::add(isl::pw_aff pwaff2) const
  15094. {
  15095.   auto res = isl_pw_aff_add(copy(), pwaff2.release());
  15096.   return manage(res);
  15097. }
  15098.  
  15099. isl::pw_multi_aff pw_aff::add(const isl::pw_multi_aff &pma2) const
  15100. {
  15101.   return isl::pw_multi_aff(*this).add(pma2);
  15102. }
  15103.  
  15104. isl::union_pw_aff pw_aff::add(const isl::union_pw_aff &upa2) const
  15105. {
  15106.   return isl::union_pw_aff(*this).add(upa2);
  15107. }
  15108.  
  15109. isl::union_pw_multi_aff pw_aff::add(const isl::union_pw_multi_aff &upma2) const
  15110. {
  15111.   return isl::union_pw_aff(*this).add(upma2);
  15112. }
  15113.  
  15114. isl::pw_aff pw_aff::add(const isl::aff &pwaff2) const
  15115. {
  15116.   return this->add(isl::pw_aff(pwaff2));
  15117. }
  15118.  
  15119. isl::pw_aff pw_aff::add_constant(isl::val v) const
  15120. {
  15121.   auto res = isl_pw_aff_add_constant_val(copy(), v.release());
  15122.   return manage(res);
  15123. }
  15124.  
  15125. isl::pw_aff pw_aff::add_constant(long v) const
  15126. {
  15127.   return this->add_constant(isl::val(ctx(), v));
  15128. }
  15129.  
  15130. isl::pw_multi_aff pw_aff::add_constant(const isl::multi_val &mv) const
  15131. {
  15132.   return isl::pw_multi_aff(*this).add_constant(mv);
  15133. }
  15134.  
  15135. isl::pw_aff pw_aff::add_dims(isl::dim type, unsigned int n) const
  15136. {
  15137.   auto res = isl_pw_aff_add_dims(copy(), static_cast<enum isl_dim_type>(type), n);
  15138.   return manage(res);
  15139. }
  15140.  
  15141. isl::union_pw_multi_aff pw_aff::add_pw_multi_aff(const isl::pw_multi_aff &pma) const
  15142. {
  15143.   return isl::union_pw_aff(*this).add_pw_multi_aff(pma);
  15144. }
  15145.  
  15146. isl::union_pw_multi_aff pw_aff::apply(const isl::union_pw_multi_aff &upma2) const
  15147. {
  15148.   return isl::union_pw_aff(*this).apply(upma2);
  15149. }
  15150.  
  15151. isl::aff pw_aff::as_aff() const
  15152. {
  15153.   auto res = isl_pw_aff_as_aff(copy());
  15154.   return manage(res);
  15155. }
  15156.  
  15157. isl::map pw_aff::as_map() const
  15158. {
  15159.   auto res = isl_pw_aff_as_map(copy());
  15160.   return manage(res);
  15161. }
  15162.  
  15163. isl::multi_aff pw_aff::as_multi_aff() const
  15164. {
  15165.   return isl::pw_multi_aff(*this).as_multi_aff();
  15166. }
  15167.  
  15168. isl::multi_union_pw_aff pw_aff::as_multi_union_pw_aff() const
  15169. {
  15170.   return isl::union_pw_aff(*this).as_multi_union_pw_aff();
  15171. }
  15172.  
  15173. isl::pw_multi_aff pw_aff::as_pw_multi_aff() const
  15174. {
  15175.   return isl::union_pw_aff(*this).as_pw_multi_aff();
  15176. }
  15177.  
  15178. isl::set pw_aff::as_set() const
  15179. {
  15180.   return isl::pw_multi_aff(*this).as_set();
  15181. }
  15182.  
  15183. isl::union_map pw_aff::as_union_map() const
  15184. {
  15185.   return isl::union_pw_aff(*this).as_union_map();
  15186. }
  15187.  
  15188. isl::pw_aff pw_aff::at(int pos) const
  15189. {
  15190.   return isl::pw_multi_aff(*this).at(pos);
  15191. }
  15192.  
  15193. isl::set pw_aff::bind(const isl::multi_id &tuple) const
  15194. {
  15195.   return isl::multi_pw_aff(*this).bind(tuple);
  15196. }
  15197.  
  15198. isl::set pw_aff::bind(isl::id id) const
  15199. {
  15200.   auto res = isl_pw_aff_bind_id(copy(), id.release());
  15201.   return manage(res);
  15202. }
  15203.  
  15204. isl::set pw_aff::bind(const std::string &id) const
  15205. {
  15206.   return this->bind(isl::id(ctx(), id));
  15207. }
  15208.  
  15209. isl::pw_aff pw_aff::bind_domain(isl::multi_id tuple) const
  15210. {
  15211.   auto res = isl_pw_aff_bind_domain(copy(), tuple.release());
  15212.   return manage(res);
  15213. }
  15214.  
  15215. isl::pw_aff pw_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const
  15216. {
  15217.   auto res = isl_pw_aff_bind_domain_wrapped_domain(copy(), tuple.release());
  15218.   return manage(res);
  15219. }
  15220.  
  15221. isl::pw_aff pw_aff::ceil() const
  15222. {
  15223.   auto res = isl_pw_aff_ceil(copy());
  15224.   return manage(res);
  15225. }
  15226.  
  15227. isl::pw_aff pw_aff::coalesce() const
  15228. {
  15229.   auto res = isl_pw_aff_coalesce(copy());
  15230.   return manage(res);
  15231. }
  15232.  
  15233. isl::pw_aff pw_aff::cond(isl::pw_aff pwaff_true, isl::pw_aff pwaff_false) const
  15234. {
  15235.   auto res = isl_pw_aff_cond(copy(), pwaff_true.release(), pwaff_false.release());
  15236.   return manage(res);
  15237. }
  15238.  
  15239. class size pw_aff::dim(isl::dim type) const
  15240. {
  15241.   return isl::pw_multi_aff(*this).dim(type);
  15242. }
  15243.  
  15244. isl::id pw_aff::dim_id(isl::dim type, unsigned int pos) const
  15245. {
  15246.   auto res = isl_pw_aff_get_dim_id(get(), static_cast<enum isl_dim_type>(type), pos);
  15247.   return manage(res);
  15248. }
  15249.  
  15250. isl::id pw_aff::get_dim_id(isl::dim type, unsigned int pos) const
  15251. {
  15252.   return dim_id(type, pos);
  15253. }
  15254.  
  15255. isl::pw_aff pw_aff::div(isl::pw_aff pa2) const
  15256. {
  15257.   auto res = isl_pw_aff_div(copy(), pa2.release());
  15258.   return manage(res);
  15259. }
  15260.  
  15261. isl::set pw_aff::domain() const
  15262. {
  15263.   auto res = isl_pw_aff_domain(copy());
  15264.   return manage(res);
  15265. }
  15266.  
  15267. isl::space pw_aff::domain_space() const
  15268. {
  15269.   auto res = isl_pw_aff_get_domain_space(get());
  15270.   return manage(res);
  15271. }
  15272.  
  15273. isl::space pw_aff::get_domain_space() const
  15274. {
  15275.   return domain_space();
  15276. }
  15277.  
  15278. isl::pw_multi_aff pw_aff::drop_dims(isl::dim type, unsigned int first, unsigned int n) const
  15279. {
  15280.   return isl::pw_multi_aff(*this).drop_dims(type, first, n);
  15281. }
  15282.  
  15283. isl::set pw_aff::eq_set(isl::pw_aff pwaff2) const
  15284. {
  15285.   auto res = isl_pw_aff_eq_set(copy(), pwaff2.release());
  15286.   return manage(res);
  15287. }
  15288.  
  15289. isl::val pw_aff::eval(isl::point pnt) const
  15290. {
  15291.   auto res = isl_pw_aff_eval(copy(), pnt.release());
  15292.   return manage(res);
  15293. }
  15294.  
  15295. isl::pw_multi_aff pw_aff::extract_pw_multi_aff(const isl::space &space) const
  15296. {
  15297.   return isl::union_pw_aff(*this).extract_pw_multi_aff(space);
  15298. }
  15299.  
  15300. isl::multi_pw_aff pw_aff::flat_range_product(const isl::multi_pw_aff &multi2) const
  15301. {
  15302.   return isl::pw_multi_aff(*this).flat_range_product(multi2);
  15303. }
  15304.  
  15305. isl::multi_union_pw_aff pw_aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const
  15306. {
  15307.   return isl::union_pw_aff(*this).flat_range_product(multi2);
  15308. }
  15309.  
  15310. isl::pw_multi_aff pw_aff::flat_range_product(const isl::pw_multi_aff &pma2) const
  15311. {
  15312.   return isl::pw_multi_aff(*this).flat_range_product(pma2);
  15313. }
  15314.  
  15315. isl::union_pw_multi_aff pw_aff::flat_range_product(const isl::union_pw_multi_aff &upma2) const
  15316. {
  15317.   return isl::union_pw_aff(*this).flat_range_product(upma2);
  15318. }
  15319.  
  15320. isl::pw_aff pw_aff::floor() const
  15321. {
  15322.   auto res = isl_pw_aff_floor(copy());
  15323.   return manage(res);
  15324. }
  15325.  
  15326. stat pw_aff::foreach_piece(const std::function<stat(isl::set, isl::aff)> &fn) const
  15327. {
  15328.   struct fn_data {
  15329.     std::function<stat(isl::set, isl::aff)> func;
  15330.   } fn_data = { fn };
  15331.   auto fn_lambda = [](isl_set *arg_0, isl_aff *arg_1, void *arg_2) -> isl_stat {
  15332.     auto *data = static_cast<struct fn_data *>(arg_2);
  15333.     auto ret = (data->func)(manage(arg_0), manage(arg_1));
  15334.     return ret.release();
  15335.   };
  15336.   auto res = isl_pw_aff_foreach_piece(get(), fn_lambda, &fn_data);
  15337.   return manage(res);
  15338. }
  15339.  
  15340. stat pw_aff::foreach_piece(const std::function<stat(isl::set, isl::multi_aff)> &fn) const
  15341. {
  15342.   return isl::pw_multi_aff(*this).foreach_piece(fn);
  15343. }
  15344.  
  15345. stat pw_aff::foreach_pw_aff(const std::function<stat(isl::pw_aff)> &fn) const
  15346. {
  15347.   return isl::union_pw_aff(*this).foreach_pw_aff(fn);
  15348. }
  15349.  
  15350. isl::set pw_aff::ge_set(isl::pw_aff pwaff2) const
  15351. {
  15352.   auto res = isl_pw_aff_ge_set(copy(), pwaff2.release());
  15353.   return manage(res);
  15354. }
  15355.  
  15356. isl::pw_aff pw_aff::gist(isl::set context) const
  15357. {
  15358.   auto res = isl_pw_aff_gist(copy(), context.release());
  15359.   return manage(res);
  15360. }
  15361.  
  15362. isl::union_pw_aff pw_aff::gist(const isl::union_set &context) const
  15363. {
  15364.   return isl::union_pw_aff(*this).gist(context);
  15365. }
  15366.  
  15367. isl::pw_aff pw_aff::gist(const isl::basic_set &context) const
  15368. {
  15369.   return this->gist(isl::set(context));
  15370. }
  15371.  
  15372. isl::pw_aff pw_aff::gist(const isl::point &context) const
  15373. {
  15374.   return this->gist(isl::set(context));
  15375. }
  15376.  
  15377. isl::set pw_aff::gt_set(isl::pw_aff pwaff2) const
  15378. {
  15379.   auto res = isl_pw_aff_gt_set(copy(), pwaff2.release());
  15380.   return manage(res);
  15381. }
  15382.  
  15383. boolean pw_aff::has_range_tuple_id() const
  15384. {
  15385.   return isl::pw_multi_aff(*this).has_range_tuple_id();
  15386. }
  15387.  
  15388. isl::multi_pw_aff pw_aff::identity() const
  15389. {
  15390.   return isl::pw_multi_aff(*this).identity();
  15391. }
  15392.  
  15393. isl::pw_aff pw_aff::insert_domain(isl::space domain) const
  15394. {
  15395.   auto res = isl_pw_aff_insert_domain(copy(), domain.release());
  15396.   return manage(res);
  15397. }
  15398.  
  15399. isl::pw_aff pw_aff::intersect_domain(isl::set set) const
  15400. {
  15401.   auto res = isl_pw_aff_intersect_domain(copy(), set.release());
  15402.   return manage(res);
  15403. }
  15404.  
  15405. isl::union_pw_aff pw_aff::intersect_domain(const isl::space &space) const
  15406. {
  15407.   return isl::union_pw_aff(*this).intersect_domain(space);
  15408. }
  15409.  
  15410. isl::union_pw_aff pw_aff::intersect_domain(const isl::union_set &uset) const
  15411. {
  15412.   return isl::union_pw_aff(*this).intersect_domain(uset);
  15413. }
  15414.  
  15415. isl::pw_aff pw_aff::intersect_domain(const isl::basic_set &set) const
  15416. {
  15417.   return this->intersect_domain(isl::set(set));
  15418. }
  15419.  
  15420. isl::pw_aff pw_aff::intersect_domain(const isl::point &set) const
  15421. {
  15422.   return this->intersect_domain(isl::set(set));
  15423. }
  15424.  
  15425. isl::union_pw_aff pw_aff::intersect_domain_wrapped_domain(const isl::union_set &uset) const
  15426. {
  15427.   return isl::union_pw_aff(*this).intersect_domain_wrapped_domain(uset);
  15428. }
  15429.  
  15430. isl::union_pw_aff pw_aff::intersect_domain_wrapped_range(const isl::union_set &uset) const
  15431. {
  15432.   return isl::union_pw_aff(*this).intersect_domain_wrapped_range(uset);
  15433. }
  15434.  
  15435. isl::pw_aff pw_aff::intersect_params(isl::set set) const
  15436. {
  15437.   auto res = isl_pw_aff_intersect_params(copy(), set.release());
  15438.   return manage(res);
  15439. }
  15440.  
  15441. boolean pw_aff::involves_locals() const
  15442. {
  15443.   return isl::pw_multi_aff(*this).involves_locals();
  15444. }
  15445.  
  15446. boolean pw_aff::involves_nan() const
  15447. {
  15448.   return isl::multi_pw_aff(*this).involves_nan();
  15449. }
  15450.  
  15451. boolean pw_aff::involves_param(const isl::id &id) const
  15452. {
  15453.   return isl::pw_multi_aff(*this).involves_param(id);
  15454. }
  15455.  
  15456. boolean pw_aff::involves_param(const std::string &id) const
  15457. {
  15458.   return this->involves_param(isl::id(ctx(), id));
  15459. }
  15460.  
  15461. boolean pw_aff::involves_param(const isl::id_list &list) const
  15462. {
  15463.   return isl::pw_multi_aff(*this).involves_param(list);
  15464. }
  15465.  
  15466. boolean pw_aff::is_cst() const
  15467. {
  15468.   auto res = isl_pw_aff_is_cst(get());
  15469.   return manage(res);
  15470. }
  15471.  
  15472. boolean pw_aff::is_equal(const isl::pw_aff &pa2) const
  15473. {
  15474.   auto res = isl_pw_aff_is_equal(get(), pa2.get());
  15475.   return manage(res);
  15476. }
  15477.  
  15478. boolean pw_aff::isa_aff() const
  15479. {
  15480.   auto res = isl_pw_aff_isa_aff(get());
  15481.   return manage(res);
  15482. }
  15483.  
  15484. boolean pw_aff::isa_multi_aff() const
  15485. {
  15486.   return isl::pw_multi_aff(*this).isa_multi_aff();
  15487. }
  15488.  
  15489. boolean pw_aff::isa_pw_multi_aff() const
  15490. {
  15491.   return isl::union_pw_aff(*this).isa_pw_multi_aff();
  15492. }
  15493.  
  15494. isl::set pw_aff::le_set(isl::pw_aff pwaff2) const
  15495. {
  15496.   auto res = isl_pw_aff_le_set(copy(), pwaff2.release());
  15497.   return manage(res);
  15498. }
  15499.  
  15500. isl::pw_aff_list pw_aff::list() const
  15501. {
  15502.   return isl::multi_pw_aff(*this).list();
  15503. }
  15504.  
  15505. isl::set pw_aff::lt_set(isl::pw_aff pwaff2) const
  15506. {
  15507.   auto res = isl_pw_aff_lt_set(copy(), pwaff2.release());
  15508.   return manage(res);
  15509. }
  15510.  
  15511. isl::multi_pw_aff pw_aff::max(const isl::multi_pw_aff &multi2) const
  15512. {
  15513.   return isl::pw_multi_aff(*this).max(multi2);
  15514. }
  15515.  
  15516. isl::pw_aff pw_aff::max(isl::pw_aff pwaff2) const
  15517. {
  15518.   auto res = isl_pw_aff_max(copy(), pwaff2.release());
  15519.   return manage(res);
  15520. }
  15521.  
  15522. isl::pw_aff pw_aff::max(const isl::aff &pwaff2) const
  15523. {
  15524.   return this->max(isl::pw_aff(pwaff2));
  15525. }
  15526.  
  15527. isl::multi_val pw_aff::max_multi_val() const
  15528. {
  15529.   return isl::pw_multi_aff(*this).max_multi_val();
  15530. }
  15531.  
  15532. isl::multi_pw_aff pw_aff::min(const isl::multi_pw_aff &multi2) const
  15533. {
  15534.   return isl::pw_multi_aff(*this).min(multi2);
  15535. }
  15536.  
  15537. isl::pw_aff pw_aff::min(isl::pw_aff pwaff2) const
  15538. {
  15539.   auto res = isl_pw_aff_min(copy(), pwaff2.release());
  15540.   return manage(res);
  15541. }
  15542.  
  15543. isl::pw_aff pw_aff::min(const isl::aff &pwaff2) const
  15544. {
  15545.   return this->min(isl::pw_aff(pwaff2));
  15546. }
  15547.  
  15548. isl::multi_val pw_aff::min_multi_val() const
  15549. {
  15550.   return isl::pw_multi_aff(*this).min_multi_val();
  15551. }
  15552.  
  15553. isl::pw_aff pw_aff::mod(isl::val mod) const
  15554. {
  15555.   auto res = isl_pw_aff_mod_val(copy(), mod.release());
  15556.   return manage(res);
  15557. }
  15558.  
  15559. isl::pw_aff pw_aff::mod(long mod) const
  15560. {
  15561.   return this->mod(isl::val(ctx(), mod));
  15562. }
  15563.  
  15564. isl::pw_aff pw_aff::mul(isl::pw_aff pwaff2) const
  15565. {
  15566.   auto res = isl_pw_aff_mul(copy(), pwaff2.release());
  15567.   return manage(res);
  15568. }
  15569.  
  15570. class size pw_aff::n_piece() const
  15571. {
  15572.   return isl::pw_multi_aff(*this).n_piece();
  15573. }
  15574.  
  15575. isl::set pw_aff::ne_set(isl::pw_aff pwaff2) const
  15576. {
  15577.   auto res = isl_pw_aff_ne_set(copy(), pwaff2.release());
  15578.   return manage(res);
  15579. }
  15580.  
  15581. isl::pw_aff pw_aff::neg() const
  15582. {
  15583.   auto res = isl_pw_aff_neg(copy());
  15584.   return manage(res);
  15585. }
  15586.  
  15587. isl::pw_aff pw_aff::param_on_domain(isl::set domain, isl::id id)
  15588. {
  15589.   auto res = isl_pw_aff_param_on_domain_id(domain.release(), id.release());
  15590.   return manage(res);
  15591. }
  15592.  
  15593. boolean pw_aff::plain_is_empty() const
  15594. {
  15595.   return isl::union_pw_aff(*this).plain_is_empty();
  15596. }
  15597.  
  15598. boolean pw_aff::plain_is_equal(const isl::multi_pw_aff &multi2) const
  15599. {
  15600.   return isl::pw_multi_aff(*this).plain_is_equal(multi2);
  15601. }
  15602.  
  15603. boolean pw_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
  15604. {
  15605.   return isl::union_pw_aff(*this).plain_is_equal(multi2);
  15606. }
  15607.  
  15608. isl::pw_multi_aff pw_aff::preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const
  15609. {
  15610.   return isl::pw_multi_aff(*this).preimage_domain_wrapped_domain(pma2);
  15611. }
  15612.  
  15613. isl::union_pw_multi_aff pw_aff::preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const
  15614. {
  15615.   return isl::union_pw_aff(*this).preimage_domain_wrapped_domain(upma2);
  15616. }
  15617.  
  15618. isl::multi_pw_aff pw_aff::product(const isl::multi_pw_aff &multi2) const
  15619. {
  15620.   return isl::pw_multi_aff(*this).product(multi2);
  15621. }
  15622.  
  15623. isl::pw_multi_aff pw_aff::product(const isl::pw_multi_aff &pma2) const
  15624. {
  15625.   return isl::pw_multi_aff(*this).product(pma2);
  15626. }
  15627.  
  15628. isl::pw_aff pw_aff::pullback(isl::multi_aff ma) const
  15629. {
  15630.   auto res = isl_pw_aff_pullback_multi_aff(copy(), ma.release());
  15631.   return manage(res);
  15632. }
  15633.  
  15634. isl::pw_aff pw_aff::pullback(isl::multi_pw_aff mpa) const
  15635. {
  15636.   auto res = isl_pw_aff_pullback_multi_pw_aff(copy(), mpa.release());
  15637.   return manage(res);
  15638. }
  15639.  
  15640. isl::pw_aff pw_aff::pullback(isl::pw_multi_aff pma) const
  15641. {
  15642.   auto res = isl_pw_aff_pullback_pw_multi_aff(copy(), pma.release());
  15643.   return manage(res);
  15644. }
  15645.  
  15646. isl::union_pw_aff pw_aff::pullback(const isl::union_pw_multi_aff &upma) const
  15647. {
  15648.   return isl::union_pw_aff(*this).pullback(upma);
  15649. }
  15650.  
  15651. isl::pw_multi_aff_list pw_aff::pw_multi_aff_list() const
  15652. {
  15653.   return isl::union_pw_aff(*this).pw_multi_aff_list();
  15654. }
  15655.  
  15656. isl::pw_multi_aff pw_aff::range_factor_domain() const
  15657. {
  15658.   return isl::pw_multi_aff(*this).range_factor_domain();
  15659. }
  15660.  
  15661. isl::pw_multi_aff pw_aff::range_factor_range() const
  15662. {
  15663.   return isl::pw_multi_aff(*this).range_factor_range();
  15664. }
  15665.  
  15666. isl::multi_pw_aff pw_aff::range_product(const isl::multi_pw_aff &multi2) const
  15667. {
  15668.   return isl::pw_multi_aff(*this).range_product(multi2);
  15669. }
  15670.  
  15671. isl::multi_union_pw_aff pw_aff::range_product(const isl::multi_union_pw_aff &multi2) const
  15672. {
  15673.   return isl::union_pw_aff(*this).range_product(multi2);
  15674. }
  15675.  
  15676. isl::pw_multi_aff pw_aff::range_product(const isl::pw_multi_aff &pma2) const
  15677. {
  15678.   return isl::pw_multi_aff(*this).range_product(pma2);
  15679. }
  15680.  
  15681. isl::union_pw_multi_aff pw_aff::range_product(const isl::union_pw_multi_aff &upma2) const
  15682. {
  15683.   return isl::union_pw_aff(*this).range_product(upma2);
  15684. }
  15685.  
  15686. isl::id pw_aff::range_tuple_id() const
  15687. {
  15688.   return isl::pw_multi_aff(*this).range_tuple_id();
  15689. }
  15690.  
  15691. isl::multi_pw_aff pw_aff::reset_range_tuple_id() const
  15692. {
  15693.   return isl::multi_pw_aff(*this).reset_range_tuple_id();
  15694. }
  15695.  
  15696. isl::multi_pw_aff pw_aff::reset_tuple_id(isl::dim type) const
  15697. {
  15698.   return isl::multi_pw_aff(*this).reset_tuple_id(type);
  15699. }
  15700.  
  15701. isl::multi_pw_aff pw_aff::scale(const isl::multi_val &mv) const
  15702. {
  15703.   return isl::multi_pw_aff(*this).scale(mv);
  15704. }
  15705.  
  15706. isl::pw_aff pw_aff::scale(isl::val v) const
  15707. {
  15708.   auto res = isl_pw_aff_scale_val(copy(), v.release());
  15709.   return manage(res);
  15710. }
  15711.  
  15712. isl::pw_aff pw_aff::scale(long v) const
  15713. {
  15714.   return this->scale(isl::val(ctx(), v));
  15715. }
  15716.  
  15717. isl::multi_pw_aff pw_aff::scale_down(const isl::multi_val &mv) const
  15718. {
  15719.   return isl::multi_pw_aff(*this).scale_down(mv);
  15720. }
  15721.  
  15722. isl::pw_aff pw_aff::scale_down(isl::val f) const
  15723. {
  15724.   auto res = isl_pw_aff_scale_down_val(copy(), f.release());
  15725.   return manage(res);
  15726. }
  15727.  
  15728. isl::pw_aff pw_aff::scale_down(long f) const
  15729. {
  15730.   return this->scale_down(isl::val(ctx(), f));
  15731. }
  15732.  
  15733. isl::multi_pw_aff pw_aff::set_at(int pos, const isl::pw_aff &el) const
  15734. {
  15735.   return isl::pw_multi_aff(*this).set_at(pos, el);
  15736. }
  15737.  
  15738. isl::multi_union_pw_aff pw_aff::set_at(int pos, const isl::union_pw_aff &el) const
  15739. {
  15740.   return isl::union_pw_aff(*this).set_at(pos, el);
  15741. }
  15742.  
  15743. isl::multi_pw_aff pw_aff::set_pw_aff(int pos, const isl::pw_aff &el) const
  15744. {
  15745.   return isl::pw_multi_aff(*this).set_pw_aff(pos, el);
  15746. }
  15747.  
  15748. isl::pw_multi_aff pw_aff::set_pw_aff(unsigned int pos, const isl::pw_aff &pa) const
  15749. {
  15750.   return isl::pw_multi_aff(*this).set_pw_aff(pos, pa);
  15751. }
  15752.  
  15753. isl::pw_multi_aff pw_aff::set_range_tuple(const isl::id &id) const
  15754. {
  15755.   return isl::pw_multi_aff(*this).set_range_tuple(id);
  15756. }
  15757.  
  15758. isl::pw_multi_aff pw_aff::set_range_tuple(const std::string &id) const
  15759. {
  15760.   return this->set_range_tuple(isl::id(ctx(), id));
  15761. }
  15762.  
  15763. isl::pw_aff pw_aff::set_tuple_id(isl::dim type, isl::id id) const
  15764. {
  15765.   auto res = isl_pw_aff_set_tuple_id(copy(), static_cast<enum isl_dim_type>(type), id.release());
  15766.   return manage(res);
  15767. }
  15768.  
  15769. isl::pw_aff pw_aff::set_tuple_id(isl::dim type, const std::string &id) const
  15770. {
  15771.   return this->set_tuple_id(type, isl::id(ctx(), id));
  15772. }
  15773.  
  15774. isl::multi_union_pw_aff pw_aff::set_union_pw_aff(int pos, const isl::union_pw_aff &el) const
  15775. {
  15776.   return isl::union_pw_aff(*this).set_union_pw_aff(pos, el);
  15777. }
  15778.  
  15779. class size pw_aff::size() const
  15780. {
  15781.   return isl::multi_pw_aff(*this).size();
  15782. }
  15783.  
  15784. isl::space pw_aff::space() const
  15785. {
  15786.   auto res = isl_pw_aff_get_space(get());
  15787.   return manage(res);
  15788. }
  15789.  
  15790. isl::space pw_aff::get_space() const
  15791. {
  15792.   return space();
  15793. }
  15794.  
  15795. isl::multi_pw_aff pw_aff::sub(const isl::multi_pw_aff &multi2) const
  15796. {
  15797.   return isl::pw_multi_aff(*this).sub(multi2);
  15798. }
  15799.  
  15800. isl::multi_union_pw_aff pw_aff::sub(const isl::multi_union_pw_aff &multi2) const
  15801. {
  15802.   return isl::union_pw_aff(*this).sub(multi2);
  15803. }
  15804.  
  15805. isl::pw_aff pw_aff::sub(isl::pw_aff pwaff2) const
  15806. {
  15807.   auto res = isl_pw_aff_sub(copy(), pwaff2.release());
  15808.   return manage(res);
  15809. }
  15810.  
  15811. isl::pw_multi_aff pw_aff::sub(const isl::pw_multi_aff &pma2) const
  15812. {
  15813.   return isl::pw_multi_aff(*this).sub(pma2);
  15814. }
  15815.  
  15816. isl::union_pw_aff pw_aff::sub(const isl::union_pw_aff &upa2) const
  15817. {
  15818.   return isl::union_pw_aff(*this).sub(upa2);
  15819. }
  15820.  
  15821. isl::union_pw_multi_aff pw_aff::sub(const isl::union_pw_multi_aff &upma2) const
  15822. {
  15823.   return isl::union_pw_aff(*this).sub(upma2);
  15824. }
  15825.  
  15826. isl::pw_aff pw_aff::sub(const isl::aff &pwaff2) const
  15827. {
  15828.   return this->sub(isl::pw_aff(pwaff2));
  15829. }
  15830.  
  15831. isl::pw_aff pw_aff::subtract_domain(isl::set set) const
  15832. {
  15833.   auto res = isl_pw_aff_subtract_domain(copy(), set.release());
  15834.   return manage(res);
  15835. }
  15836.  
  15837. isl::union_pw_aff pw_aff::subtract_domain(const isl::space &space) const
  15838. {
  15839.   return isl::union_pw_aff(*this).subtract_domain(space);
  15840. }
  15841.  
  15842. isl::union_pw_aff pw_aff::subtract_domain(const isl::union_set &uset) const
  15843. {
  15844.   return isl::union_pw_aff(*this).subtract_domain(uset);
  15845. }
  15846.  
  15847. isl::pw_aff pw_aff::subtract_domain(const isl::basic_set &set) const
  15848. {
  15849.   return this->subtract_domain(isl::set(set));
  15850. }
  15851.  
  15852. isl::pw_aff pw_aff::subtract_domain(const isl::point &set) const
  15853. {
  15854.   return this->subtract_domain(isl::set(set));
  15855. }
  15856.  
  15857. isl::pw_aff pw_aff::tdiv_q(isl::pw_aff pa2) const
  15858. {
  15859.   auto res = isl_pw_aff_tdiv_q(copy(), pa2.release());
  15860.   return manage(res);
  15861. }
  15862.  
  15863. isl::pw_aff pw_aff::tdiv_r(isl::pw_aff pa2) const
  15864. {
  15865.   auto res = isl_pw_aff_tdiv_r(copy(), pa2.release());
  15866.   return manage(res);
  15867. }
  15868.  
  15869. isl::pw_aff_list pw_aff::to_list() const
  15870. {
  15871.   auto res = isl_pw_aff_to_list(copy());
  15872.   return manage(res);
  15873. }
  15874.  
  15875. isl::multi_pw_aff pw_aff::to_multi_pw_aff() const
  15876. {
  15877.   return isl::pw_multi_aff(*this).to_multi_pw_aff();
  15878. }
  15879.  
  15880. isl::union_pw_aff pw_aff::to_union_pw_aff() const
  15881. {
  15882.   auto res = isl_pw_aff_to_union_pw_aff(copy());
  15883.   return manage(res);
  15884. }
  15885.  
  15886. isl::union_pw_multi_aff pw_aff::to_union_pw_multi_aff() const
  15887. {
  15888.   return isl::pw_multi_aff(*this).to_union_pw_multi_aff();
  15889. }
  15890.  
  15891. isl::id pw_aff::tuple_id(isl::dim type) const
  15892. {
  15893.   auto res = isl_pw_aff_get_tuple_id(get(), static_cast<enum isl_dim_type>(type));
  15894.   return manage(res);
  15895. }
  15896.  
  15897. isl::id pw_aff::get_tuple_id(isl::dim type) const
  15898. {
  15899.   return tuple_id(type);
  15900. }
  15901.  
  15902. isl::multi_pw_aff pw_aff::unbind_params_insert_domain(const isl::multi_id &domain) const
  15903. {
  15904.   return isl::pw_multi_aff(*this).unbind_params_insert_domain(domain);
  15905. }
  15906.  
  15907. isl::multi_pw_aff pw_aff::union_add(const isl::multi_pw_aff &mpa2) const
  15908. {
  15909.   return isl::pw_multi_aff(*this).union_add(mpa2);
  15910. }
  15911.  
  15912. isl::multi_union_pw_aff pw_aff::union_add(const isl::multi_union_pw_aff &mupa2) const
  15913. {
  15914.   return isl::union_pw_aff(*this).union_add(mupa2);
  15915. }
  15916.  
  15917. isl::pw_aff pw_aff::union_add(isl::pw_aff pwaff2) const
  15918. {
  15919.   auto res = isl_pw_aff_union_add(copy(), pwaff2.release());
  15920.   return manage(res);
  15921. }
  15922.  
  15923. isl::pw_multi_aff pw_aff::union_add(const isl::pw_multi_aff &pma2) const
  15924. {
  15925.   return isl::pw_multi_aff(*this).union_add(pma2);
  15926. }
  15927.  
  15928. isl::union_pw_aff pw_aff::union_add(const isl::union_pw_aff &upa2) const
  15929. {
  15930.   return isl::union_pw_aff(*this).union_add(upa2);
  15931. }
  15932.  
  15933. isl::union_pw_multi_aff pw_aff::union_add(const isl::union_pw_multi_aff &upma2) const
  15934. {
  15935.   return isl::union_pw_aff(*this).union_add(upma2);
  15936. }
  15937.  
  15938. isl::pw_aff pw_aff::union_add(const isl::aff &pwaff2) const
  15939. {
  15940.   return this->union_add(isl::pw_aff(pwaff2));
  15941. }
  15942.  
  15943. isl::pw_aff pw_aff::var_on_domain(isl::local_space ls, isl::dim type, unsigned int pos)
  15944. {
  15945.   auto res = isl_pw_aff_var_on_domain(ls.release(), static_cast<enum isl_dim_type>(type), pos);
  15946.   return manage(res);
  15947. }
  15948.  
  15949. inline std::ostream &operator<<(std::ostream &os, const pw_aff &obj)
  15950. {
  15951.   char *str = isl_pw_aff_to_str(obj.get());
  15952.   if (!str) {
  15953.     os.setstate(std::ios_base::badbit);
  15954.     return os;
  15955.   }
  15956.   os << str;
  15957.   free(str);
  15958.   return os;
  15959. }
  15960.  
  15961. // implementations for isl::pw_aff_list
  15962. pw_aff_list manage(__isl_take isl_pw_aff_list *ptr) {
  15963.   return pw_aff_list(ptr);
  15964. }
  15965. pw_aff_list manage_copy(__isl_keep isl_pw_aff_list *ptr) {
  15966.   ptr = isl_pw_aff_list_copy(ptr);
  15967.   return pw_aff_list(ptr);
  15968. }
  15969.  
  15970. pw_aff_list::pw_aff_list()
  15971.     : ptr(nullptr) {}
  15972.  
  15973. pw_aff_list::pw_aff_list(const pw_aff_list &obj)
  15974.     : ptr(nullptr)
  15975. {
  15976.   ptr = obj.copy();
  15977. }
  15978.  
  15979. pw_aff_list::pw_aff_list(__isl_take isl_pw_aff_list *ptr)
  15980.     : ptr(ptr) {}
  15981.  
  15982. pw_aff_list::pw_aff_list(isl::ctx ctx, int n)
  15983. {
  15984.   auto res = isl_pw_aff_list_alloc(ctx.release(), n);
  15985.   ptr = res;
  15986. }
  15987.  
  15988. pw_aff_list::pw_aff_list(isl::pw_aff el)
  15989. {
  15990.   auto res = isl_pw_aff_list_from_pw_aff(el.release());
  15991.   ptr = res;
  15992. }
  15993.  
  15994. pw_aff_list::pw_aff_list(isl::ctx ctx, const std::string &str)
  15995. {
  15996.   auto res = isl_pw_aff_list_read_from_str(ctx.release(), str.c_str());
  15997.   ptr = res;
  15998. }
  15999.  
  16000. pw_aff_list &pw_aff_list::operator=(pw_aff_list obj) {
  16001.   std::swap(this->ptr, obj.ptr);
  16002.   return *this;
  16003. }
  16004.  
  16005. pw_aff_list::~pw_aff_list() {
  16006.   if (ptr)
  16007.     isl_pw_aff_list_free(ptr);
  16008. }
  16009.  
  16010. __isl_give isl_pw_aff_list *pw_aff_list::copy() const & {
  16011.   return isl_pw_aff_list_copy(ptr);
  16012. }
  16013.  
  16014. __isl_keep isl_pw_aff_list *pw_aff_list::get() const {
  16015.   return ptr;
  16016. }
  16017.  
  16018. __isl_give isl_pw_aff_list *pw_aff_list::release() {
  16019.   isl_pw_aff_list *tmp = ptr;
  16020.   ptr = nullptr;
  16021.   return tmp;
  16022. }
  16023.  
  16024. bool pw_aff_list::is_null() const {
  16025.   return ptr == nullptr;
  16026. }
  16027.  
  16028. isl::ctx pw_aff_list::ctx() const {
  16029.   return isl::ctx(isl_pw_aff_list_get_ctx(ptr));
  16030. }
  16031.  
  16032. isl::pw_aff_list pw_aff_list::add(isl::pw_aff el) const
  16033. {
  16034.   auto res = isl_pw_aff_list_add(copy(), el.release());
  16035.   return manage(res);
  16036. }
  16037.  
  16038. isl::pw_aff pw_aff_list::at(int index) const
  16039. {
  16040.   auto res = isl_pw_aff_list_get_at(get(), index);
  16041.   return manage(res);
  16042. }
  16043.  
  16044. isl::pw_aff pw_aff_list::get_at(int index) const
  16045. {
  16046.   return at(index);
  16047. }
  16048.  
  16049. isl::pw_aff_list pw_aff_list::clear() const
  16050. {
  16051.   auto res = isl_pw_aff_list_clear(copy());
  16052.   return manage(res);
  16053. }
  16054.  
  16055. isl::pw_aff_list pw_aff_list::concat(isl::pw_aff_list list2) const
  16056. {
  16057.   auto res = isl_pw_aff_list_concat(copy(), list2.release());
  16058.   return manage(res);
  16059. }
  16060.  
  16061. isl::pw_aff_list pw_aff_list::drop(unsigned int first, unsigned int n) const
  16062. {
  16063.   auto res = isl_pw_aff_list_drop(copy(), first, n);
  16064.   return manage(res);
  16065. }
  16066.  
  16067. stat pw_aff_list::foreach(const std::function<stat(isl::pw_aff)> &fn) const
  16068. {
  16069.   struct fn_data {
  16070.     std::function<stat(isl::pw_aff)> func;
  16071.   } fn_data = { fn };
  16072.   auto fn_lambda = [](isl_pw_aff *arg_0, void *arg_1) -> isl_stat {
  16073.     auto *data = static_cast<struct fn_data *>(arg_1);
  16074.     auto ret = (data->func)(manage(arg_0));
  16075.     return ret.release();
  16076.   };
  16077.   auto res = isl_pw_aff_list_foreach(get(), fn_lambda, &fn_data);
  16078.   return manage(res);
  16079. }
  16080.  
  16081. isl::pw_aff_list pw_aff_list::insert(unsigned int pos, isl::pw_aff el) const
  16082. {
  16083.   auto res = isl_pw_aff_list_insert(copy(), pos, el.release());
  16084.   return manage(res);
  16085. }
  16086.  
  16087. class size pw_aff_list::size() const
  16088. {
  16089.   auto res = isl_pw_aff_list_size(get());
  16090.   return manage(res);
  16091. }
  16092.  
  16093. inline std::ostream &operator<<(std::ostream &os, const pw_aff_list &obj)
  16094. {
  16095.   char *str = isl_pw_aff_list_to_str(obj.get());
  16096.   if (!str) {
  16097.     os.setstate(std::ios_base::badbit);
  16098.     return os;
  16099.   }
  16100.   os << str;
  16101.   free(str);
  16102.   return os;
  16103. }
  16104.  
  16105. // implementations for isl::pw_multi_aff
  16106. pw_multi_aff manage(__isl_take isl_pw_multi_aff *ptr) {
  16107.   return pw_multi_aff(ptr);
  16108. }
  16109. pw_multi_aff manage_copy(__isl_keep isl_pw_multi_aff *ptr) {
  16110.   ptr = isl_pw_multi_aff_copy(ptr);
  16111.   return pw_multi_aff(ptr);
  16112. }
  16113.  
  16114. pw_multi_aff::pw_multi_aff()
  16115.     : ptr(nullptr) {}
  16116.  
  16117. pw_multi_aff::pw_multi_aff(const pw_multi_aff &obj)
  16118.     : ptr(nullptr)
  16119. {
  16120.   ptr = obj.copy();
  16121. }
  16122.  
  16123. pw_multi_aff::pw_multi_aff(__isl_take isl_pw_multi_aff *ptr)
  16124.     : ptr(ptr) {}
  16125.  
  16126. pw_multi_aff::pw_multi_aff(isl::multi_aff ma)
  16127. {
  16128.   auto res = isl_pw_multi_aff_from_multi_aff(ma.release());
  16129.   ptr = res;
  16130. }
  16131.  
  16132. pw_multi_aff::pw_multi_aff(isl::pw_aff pa)
  16133. {
  16134.   auto res = isl_pw_multi_aff_from_pw_aff(pa.release());
  16135.   ptr = res;
  16136. }
  16137.  
  16138. pw_multi_aff::pw_multi_aff(isl::ctx ctx, const std::string &str)
  16139. {
  16140.   auto res = isl_pw_multi_aff_read_from_str(ctx.release(), str.c_str());
  16141.   ptr = res;
  16142. }
  16143.  
  16144. pw_multi_aff &pw_multi_aff::operator=(pw_multi_aff obj) {
  16145.   std::swap(this->ptr, obj.ptr);
  16146.   return *this;
  16147. }
  16148.  
  16149. pw_multi_aff::~pw_multi_aff() {
  16150.   if (ptr)
  16151.     isl_pw_multi_aff_free(ptr);
  16152. }
  16153.  
  16154. __isl_give isl_pw_multi_aff *pw_multi_aff::copy() const & {
  16155.   return isl_pw_multi_aff_copy(ptr);
  16156. }
  16157.  
  16158. __isl_keep isl_pw_multi_aff *pw_multi_aff::get() const {
  16159.   return ptr;
  16160. }
  16161.  
  16162. __isl_give isl_pw_multi_aff *pw_multi_aff::release() {
  16163.   isl_pw_multi_aff *tmp = ptr;
  16164.   ptr = nullptr;
  16165.   return tmp;
  16166. }
  16167.  
  16168. bool pw_multi_aff::is_null() const {
  16169.   return ptr == nullptr;
  16170. }
  16171.  
  16172. isl::ctx pw_multi_aff::ctx() const {
  16173.   return isl::ctx(isl_pw_multi_aff_get_ctx(ptr));
  16174. }
  16175.  
  16176. isl::multi_pw_aff pw_multi_aff::add(const isl::multi_pw_aff &multi2) const
  16177. {
  16178.   return isl::multi_pw_aff(*this).add(multi2);
  16179. }
  16180.  
  16181. isl::multi_union_pw_aff pw_multi_aff::add(const isl::multi_union_pw_aff &multi2) const
  16182. {
  16183.   return isl::multi_pw_aff(*this).add(multi2);
  16184. }
  16185.  
  16186. isl::pw_multi_aff pw_multi_aff::add(isl::pw_multi_aff pma2) const
  16187. {
  16188.   auto res = isl_pw_multi_aff_add(copy(), pma2.release());
  16189.   return manage(res);
  16190. }
  16191.  
  16192. isl::union_pw_multi_aff pw_multi_aff::add(const isl::union_pw_multi_aff &upma2) const
  16193. {
  16194.   return isl::union_pw_multi_aff(*this).add(upma2);
  16195. }
  16196.  
  16197. isl::pw_multi_aff pw_multi_aff::add(const isl::multi_aff &pma2) const
  16198. {
  16199.   return this->add(isl::pw_multi_aff(pma2));
  16200. }
  16201.  
  16202. isl::pw_multi_aff pw_multi_aff::add(const isl::pw_aff &pma2) const
  16203. {
  16204.   return this->add(isl::pw_multi_aff(pma2));
  16205. }
  16206.  
  16207. isl::pw_multi_aff pw_multi_aff::add_constant(isl::multi_val mv) const
  16208. {
  16209.   auto res = isl_pw_multi_aff_add_constant_multi_val(copy(), mv.release());
  16210.   return manage(res);
  16211. }
  16212.  
  16213. isl::pw_multi_aff pw_multi_aff::add_constant(isl::val v) const
  16214. {
  16215.   auto res = isl_pw_multi_aff_add_constant_val(copy(), v.release());
  16216.   return manage(res);
  16217. }
  16218.  
  16219. isl::pw_multi_aff pw_multi_aff::add_constant(long v) const
  16220. {
  16221.   return this->add_constant(isl::val(ctx(), v));
  16222. }
  16223.  
  16224. isl::union_pw_multi_aff pw_multi_aff::add_pw_multi_aff(const isl::pw_multi_aff &pma) const
  16225. {
  16226.   return isl::union_pw_multi_aff(*this).add_pw_multi_aff(pma);
  16227. }
  16228.  
  16229. isl::union_pw_multi_aff pw_multi_aff::apply(const isl::union_pw_multi_aff &upma2) const
  16230. {
  16231.   return isl::union_pw_multi_aff(*this).apply(upma2);
  16232. }
  16233.  
  16234. isl::map pw_multi_aff::as_map() const
  16235. {
  16236.   auto res = isl_pw_multi_aff_as_map(copy());
  16237.   return manage(res);
  16238. }
  16239.  
  16240. isl::multi_aff pw_multi_aff::as_multi_aff() const
  16241. {
  16242.   auto res = isl_pw_multi_aff_as_multi_aff(copy());
  16243.   return manage(res);
  16244. }
  16245.  
  16246. isl::multi_union_pw_aff pw_multi_aff::as_multi_union_pw_aff() const
  16247. {
  16248.   return isl::union_pw_multi_aff(*this).as_multi_union_pw_aff();
  16249. }
  16250.  
  16251. isl::pw_multi_aff pw_multi_aff::as_pw_multi_aff() const
  16252. {
  16253.   return isl::union_pw_multi_aff(*this).as_pw_multi_aff();
  16254. }
  16255.  
  16256. isl::set pw_multi_aff::as_set() const
  16257. {
  16258.   auto res = isl_pw_multi_aff_as_set(copy());
  16259.   return manage(res);
  16260. }
  16261.  
  16262. isl::union_map pw_multi_aff::as_union_map() const
  16263. {
  16264.   return isl::union_pw_multi_aff(*this).as_union_map();
  16265. }
  16266.  
  16267. isl::pw_aff pw_multi_aff::at(int pos) const
  16268. {
  16269.   auto res = isl_pw_multi_aff_get_at(get(), pos);
  16270.   return manage(res);
  16271. }
  16272.  
  16273. isl::pw_aff pw_multi_aff::get_at(int pos) const
  16274. {
  16275.   return at(pos);
  16276. }
  16277.  
  16278. isl::set pw_multi_aff::bind(const isl::multi_id &tuple) const
  16279. {
  16280.   return isl::multi_pw_aff(*this).bind(tuple);
  16281. }
  16282.  
  16283. isl::pw_multi_aff pw_multi_aff::bind_domain(isl::multi_id tuple) const
  16284. {
  16285.   auto res = isl_pw_multi_aff_bind_domain(copy(), tuple.release());
  16286.   return manage(res);
  16287. }
  16288.  
  16289. isl::pw_multi_aff pw_multi_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const
  16290. {
  16291.   auto res = isl_pw_multi_aff_bind_domain_wrapped_domain(copy(), tuple.release());
  16292.   return manage(res);
  16293. }
  16294.  
  16295. isl::pw_multi_aff pw_multi_aff::coalesce() const
  16296. {
  16297.   auto res = isl_pw_multi_aff_coalesce(copy());
  16298.   return manage(res);
  16299. }
  16300.  
  16301. class size pw_multi_aff::dim(isl::dim type) const
  16302. {
  16303.   auto res = isl_pw_multi_aff_dim(get(), static_cast<enum isl_dim_type>(type));
  16304.   return manage(res);
  16305. }
  16306.  
  16307. isl::set pw_multi_aff::domain() const
  16308. {
  16309.   auto res = isl_pw_multi_aff_domain(copy());
  16310.   return manage(res);
  16311. }
  16312.  
  16313. isl::pw_multi_aff pw_multi_aff::domain_map(isl::space space)
  16314. {
  16315.   auto res = isl_pw_multi_aff_domain_map(space.release());
  16316.   return manage(res);
  16317. }
  16318.  
  16319. isl::pw_multi_aff pw_multi_aff::drop_dims(isl::dim type, unsigned int first, unsigned int n) const
  16320. {
  16321.   auto res = isl_pw_multi_aff_drop_dims(copy(), static_cast<enum isl_dim_type>(type), first, n);
  16322.   return manage(res);
  16323. }
  16324.  
  16325. isl::pw_multi_aff pw_multi_aff::extract_pw_multi_aff(const isl::space &space) const
  16326. {
  16327.   return isl::union_pw_multi_aff(*this).extract_pw_multi_aff(space);
  16328. }
  16329.  
  16330. isl::multi_pw_aff pw_multi_aff::flat_range_product(const isl::multi_pw_aff &multi2) const
  16331. {
  16332.   return isl::multi_pw_aff(*this).flat_range_product(multi2);
  16333. }
  16334.  
  16335. isl::multi_union_pw_aff pw_multi_aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const
  16336. {
  16337.   return isl::multi_pw_aff(*this).flat_range_product(multi2);
  16338. }
  16339.  
  16340. isl::pw_multi_aff pw_multi_aff::flat_range_product(isl::pw_multi_aff pma2) const
  16341. {
  16342.   auto res = isl_pw_multi_aff_flat_range_product(copy(), pma2.release());
  16343.   return manage(res);
  16344. }
  16345.  
  16346. isl::union_pw_multi_aff pw_multi_aff::flat_range_product(const isl::union_pw_multi_aff &upma2) const
  16347. {
  16348.   return isl::union_pw_multi_aff(*this).flat_range_product(upma2);
  16349. }
  16350.  
  16351. isl::pw_multi_aff pw_multi_aff::flat_range_product(const isl::multi_aff &pma2) const
  16352. {
  16353.   return this->flat_range_product(isl::pw_multi_aff(pma2));
  16354. }
  16355.  
  16356. isl::pw_multi_aff pw_multi_aff::flat_range_product(const isl::pw_aff &pma2) const
  16357. {
  16358.   return this->flat_range_product(isl::pw_multi_aff(pma2));
  16359. }
  16360.  
  16361. stat pw_multi_aff::foreach_piece(const std::function<stat(isl::set, isl::multi_aff)> &fn) const
  16362. {
  16363.   struct fn_data {
  16364.     std::function<stat(isl::set, isl::multi_aff)> func;
  16365.   } fn_data = { fn };
  16366.   auto fn_lambda = [](isl_set *arg_0, isl_multi_aff *arg_1, void *arg_2) -> isl_stat {
  16367.     auto *data = static_cast<struct fn_data *>(arg_2);
  16368.     auto ret = (data->func)(manage(arg_0), manage(arg_1));
  16369.     return ret.release();
  16370.   };
  16371.   auto res = isl_pw_multi_aff_foreach_piece(get(), fn_lambda, &fn_data);
  16372.   return manage(res);
  16373. }
  16374.  
  16375. isl::pw_multi_aff pw_multi_aff::from_map(isl::map map)
  16376. {
  16377.   auto res = isl_pw_multi_aff_from_map(map.release());
  16378.   return manage(res);
  16379. }
  16380.  
  16381. isl::pw_multi_aff pw_multi_aff::gist(isl::set set) const
  16382. {
  16383.   auto res = isl_pw_multi_aff_gist(copy(), set.release());
  16384.   return manage(res);
  16385. }
  16386.  
  16387. isl::union_pw_multi_aff pw_multi_aff::gist(const isl::union_set &context) const
  16388. {
  16389.   return isl::union_pw_multi_aff(*this).gist(context);
  16390. }
  16391.  
  16392. isl::pw_multi_aff pw_multi_aff::gist(const isl::basic_set &set) const
  16393. {
  16394.   return this->gist(isl::set(set));
  16395. }
  16396.  
  16397. isl::pw_multi_aff pw_multi_aff::gist(const isl::point &set) const
  16398. {
  16399.   return this->gist(isl::set(set));
  16400. }
  16401.  
  16402. boolean pw_multi_aff::has_range_tuple_id() const
  16403. {
  16404.   auto res = isl_pw_multi_aff_has_range_tuple_id(get());
  16405.   return manage(res);
  16406. }
  16407.  
  16408. isl::multi_pw_aff pw_multi_aff::identity() const
  16409. {
  16410.   return isl::multi_pw_aff(*this).identity();
  16411. }
  16412.  
  16413. isl::pw_multi_aff pw_multi_aff::identity_on_domain(isl::space space)
  16414. {
  16415.   auto res = isl_pw_multi_aff_identity_on_domain_space(space.release());
  16416.   return manage(res);
  16417. }
  16418.  
  16419. isl::pw_multi_aff pw_multi_aff::insert_domain(isl::space domain) const
  16420. {
  16421.   auto res = isl_pw_multi_aff_insert_domain(copy(), domain.release());
  16422.   return manage(res);
  16423. }
  16424.  
  16425. isl::pw_multi_aff pw_multi_aff::intersect_domain(isl::set set) const
  16426. {
  16427.   auto res = isl_pw_multi_aff_intersect_domain(copy(), set.release());
  16428.   return manage(res);
  16429. }
  16430.  
  16431. isl::union_pw_multi_aff pw_multi_aff::intersect_domain(const isl::space &space) const
  16432. {
  16433.   return isl::union_pw_multi_aff(*this).intersect_domain(space);
  16434. }
  16435.  
  16436. isl::union_pw_multi_aff pw_multi_aff::intersect_domain(const isl::union_set &uset) const
  16437. {
  16438.   return isl::union_pw_multi_aff(*this).intersect_domain(uset);
  16439. }
  16440.  
  16441. isl::pw_multi_aff pw_multi_aff::intersect_domain(const isl::basic_set &set) const
  16442. {
  16443.   return this->intersect_domain(isl::set(set));
  16444. }
  16445.  
  16446. isl::pw_multi_aff pw_multi_aff::intersect_domain(const isl::point &set) const
  16447. {
  16448.   return this->intersect_domain(isl::set(set));
  16449. }
  16450.  
  16451. isl::union_pw_multi_aff pw_multi_aff::intersect_domain_wrapped_domain(const isl::union_set &uset) const
  16452. {
  16453.   return isl::union_pw_multi_aff(*this).intersect_domain_wrapped_domain(uset);
  16454. }
  16455.  
  16456. isl::union_pw_multi_aff pw_multi_aff::intersect_domain_wrapped_range(const isl::union_set &uset) const
  16457. {
  16458.   return isl::union_pw_multi_aff(*this).intersect_domain_wrapped_range(uset);
  16459. }
  16460.  
  16461. isl::pw_multi_aff pw_multi_aff::intersect_params(isl::set set) const
  16462. {
  16463.   auto res = isl_pw_multi_aff_intersect_params(copy(), set.release());
  16464.   return manage(res);
  16465. }
  16466.  
  16467. boolean pw_multi_aff::involves_locals() const
  16468. {
  16469.   auto res = isl_pw_multi_aff_involves_locals(get());
  16470.   return manage(res);
  16471. }
  16472.  
  16473. boolean pw_multi_aff::involves_nan() const
  16474. {
  16475.   return isl::multi_pw_aff(*this).involves_nan();
  16476. }
  16477.  
  16478. boolean pw_multi_aff::involves_param(const isl::id &id) const
  16479. {
  16480.   return isl::multi_pw_aff(*this).involves_param(id);
  16481. }
  16482.  
  16483. boolean pw_multi_aff::involves_param(const std::string &id) const
  16484. {
  16485.   return this->involves_param(isl::id(ctx(), id));
  16486. }
  16487.  
  16488. boolean pw_multi_aff::involves_param(const isl::id_list &list) const
  16489. {
  16490.   return isl::multi_pw_aff(*this).involves_param(list);
  16491. }
  16492.  
  16493. boolean pw_multi_aff::isa_multi_aff() const
  16494. {
  16495.   auto res = isl_pw_multi_aff_isa_multi_aff(get());
  16496.   return manage(res);
  16497. }
  16498.  
  16499. boolean pw_multi_aff::isa_pw_multi_aff() const
  16500. {
  16501.   return isl::union_pw_multi_aff(*this).isa_pw_multi_aff();
  16502. }
  16503.  
  16504. isl::pw_aff_list pw_multi_aff::list() const
  16505. {
  16506.   return isl::multi_pw_aff(*this).list();
  16507. }
  16508.  
  16509. isl::multi_pw_aff pw_multi_aff::max(const isl::multi_pw_aff &multi2) const
  16510. {
  16511.   return isl::multi_pw_aff(*this).max(multi2);
  16512. }
  16513.  
  16514. isl::multi_val pw_multi_aff::max_multi_val() const
  16515. {
  16516.   auto res = isl_pw_multi_aff_max_multi_val(copy());
  16517.   return manage(res);
  16518. }
  16519.  
  16520. isl::multi_pw_aff pw_multi_aff::min(const isl::multi_pw_aff &multi2) const
  16521. {
  16522.   return isl::multi_pw_aff(*this).min(multi2);
  16523. }
  16524.  
  16525. isl::multi_val pw_multi_aff::min_multi_val() const
  16526. {
  16527.   auto res = isl_pw_multi_aff_min_multi_val(copy());
  16528.   return manage(res);
  16529. }
  16530.  
  16531. isl::pw_multi_aff pw_multi_aff::multi_val_on_domain(isl::set domain, isl::multi_val mv)
  16532. {
  16533.   auto res = isl_pw_multi_aff_multi_val_on_domain(domain.release(), mv.release());
  16534.   return manage(res);
  16535. }
  16536.  
  16537. class size pw_multi_aff::n_piece() const
  16538. {
  16539.   auto res = isl_pw_multi_aff_n_piece(get());
  16540.   return manage(res);
  16541. }
  16542.  
  16543. isl::multi_pw_aff pw_multi_aff::neg() const
  16544. {
  16545.   return isl::multi_pw_aff(*this).neg();
  16546. }
  16547.  
  16548. boolean pw_multi_aff::plain_is_empty() const
  16549. {
  16550.   return isl::union_pw_multi_aff(*this).plain_is_empty();
  16551. }
  16552.  
  16553. boolean pw_multi_aff::plain_is_equal(const isl::multi_pw_aff &multi2) const
  16554. {
  16555.   return isl::multi_pw_aff(*this).plain_is_equal(multi2);
  16556. }
  16557.  
  16558. boolean pw_multi_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
  16559. {
  16560.   return isl::multi_pw_aff(*this).plain_is_equal(multi2);
  16561. }
  16562.  
  16563. isl::pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(isl::pw_multi_aff pma2) const
  16564. {
  16565.   auto res = isl_pw_multi_aff_preimage_domain_wrapped_domain_pw_multi_aff(copy(), pma2.release());
  16566.   return manage(res);
  16567. }
  16568.  
  16569. isl::union_pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const
  16570. {
  16571.   return isl::union_pw_multi_aff(*this).preimage_domain_wrapped_domain(upma2);
  16572. }
  16573.  
  16574. isl::pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(const isl::multi_aff &pma2) const
  16575. {
  16576.   return this->preimage_domain_wrapped_domain(isl::pw_multi_aff(pma2));
  16577. }
  16578.  
  16579. isl::pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(const isl::pw_aff &pma2) const
  16580. {
  16581.   return this->preimage_domain_wrapped_domain(isl::pw_multi_aff(pma2));
  16582. }
  16583.  
  16584. isl::multi_pw_aff pw_multi_aff::product(const isl::multi_pw_aff &multi2) const
  16585. {
  16586.   return isl::multi_pw_aff(*this).product(multi2);
  16587. }
  16588.  
  16589. isl::pw_multi_aff pw_multi_aff::product(isl::pw_multi_aff pma2) const
  16590. {
  16591.   auto res = isl_pw_multi_aff_product(copy(), pma2.release());
  16592.   return manage(res);
  16593. }
  16594.  
  16595. isl::pw_multi_aff pw_multi_aff::product(const isl::multi_aff &pma2) const
  16596. {
  16597.   return this->product(isl::pw_multi_aff(pma2));
  16598. }
  16599.  
  16600. isl::pw_multi_aff pw_multi_aff::product(const isl::pw_aff &pma2) const
  16601. {
  16602.   return this->product(isl::pw_multi_aff(pma2));
  16603. }
  16604.  
  16605. isl::pw_multi_aff pw_multi_aff::project_out_map(isl::space space, isl::dim type, unsigned int first, unsigned int n)
  16606. {
  16607.   auto res = isl_pw_multi_aff_project_out_map(space.release(), static_cast<enum isl_dim_type>(type), first, n);
  16608.   return manage(res);
  16609. }
  16610.  
  16611. isl::multi_pw_aff pw_multi_aff::pullback(const isl::multi_pw_aff &mpa2) const
  16612. {
  16613.   return isl::multi_pw_aff(*this).pullback(mpa2);
  16614. }
  16615.  
  16616. isl::pw_multi_aff pw_multi_aff::pullback(isl::multi_aff ma) const
  16617. {
  16618.   auto res = isl_pw_multi_aff_pullback_multi_aff(copy(), ma.release());
  16619.   return manage(res);
  16620. }
  16621.  
  16622. isl::pw_multi_aff pw_multi_aff::pullback(isl::pw_multi_aff pma2) const
  16623. {
  16624.   auto res = isl_pw_multi_aff_pullback_pw_multi_aff(copy(), pma2.release());
  16625.   return manage(res);
  16626. }
  16627.  
  16628. isl::union_pw_multi_aff pw_multi_aff::pullback(const isl::union_pw_multi_aff &upma2) const
  16629. {
  16630.   return isl::union_pw_multi_aff(*this).pullback(upma2);
  16631. }
  16632.  
  16633. isl::pw_multi_aff_list pw_multi_aff::pw_multi_aff_list() const
  16634. {
  16635.   return isl::union_pw_multi_aff(*this).pw_multi_aff_list();
  16636. }
  16637.  
  16638. isl::pw_multi_aff pw_multi_aff::range_factor_domain() const
  16639. {
  16640.   auto res = isl_pw_multi_aff_range_factor_domain(copy());
  16641.   return manage(res);
  16642. }
  16643.  
  16644. isl::pw_multi_aff pw_multi_aff::range_factor_range() const
  16645. {
  16646.   auto res = isl_pw_multi_aff_range_factor_range(copy());
  16647.   return manage(res);
  16648. }
  16649.  
  16650. isl::pw_multi_aff pw_multi_aff::range_map(isl::space space)
  16651. {
  16652.   auto res = isl_pw_multi_aff_range_map(space.release());
  16653.   return manage(res);
  16654. }
  16655.  
  16656. isl::multi_pw_aff pw_multi_aff::range_product(const isl::multi_pw_aff &multi2) const
  16657. {
  16658.   return isl::multi_pw_aff(*this).range_product(multi2);
  16659. }
  16660.  
  16661. isl::multi_union_pw_aff pw_multi_aff::range_product(const isl::multi_union_pw_aff &multi2) const
  16662. {
  16663.   return isl::multi_pw_aff(*this).range_product(multi2);
  16664. }
  16665.  
  16666. isl::pw_multi_aff pw_multi_aff::range_product(isl::pw_multi_aff pma2) const
  16667. {
  16668.   auto res = isl_pw_multi_aff_range_product(copy(), pma2.release());
  16669.   return manage(res);
  16670. }
  16671.  
  16672. isl::union_pw_multi_aff pw_multi_aff::range_product(const isl::union_pw_multi_aff &upma2) const
  16673. {
  16674.   return isl::union_pw_multi_aff(*this).range_product(upma2);
  16675. }
  16676.  
  16677. isl::pw_multi_aff pw_multi_aff::range_product(const isl::multi_aff &pma2) const
  16678. {
  16679.   return this->range_product(isl::pw_multi_aff(pma2));
  16680. }
  16681.  
  16682. isl::pw_multi_aff pw_multi_aff::range_product(const isl::pw_aff &pma2) const
  16683. {
  16684.   return this->range_product(isl::pw_multi_aff(pma2));
  16685. }
  16686.  
  16687. isl::id pw_multi_aff::range_tuple_id() const
  16688. {
  16689.   auto res = isl_pw_multi_aff_get_range_tuple_id(get());
  16690.   return manage(res);
  16691. }
  16692.  
  16693. isl::id pw_multi_aff::get_range_tuple_id() const
  16694. {
  16695.   return range_tuple_id();
  16696. }
  16697.  
  16698. isl::multi_pw_aff pw_multi_aff::reset_range_tuple_id() const
  16699. {
  16700.   return isl::multi_pw_aff(*this).reset_range_tuple_id();
  16701. }
  16702.  
  16703. isl::multi_pw_aff pw_multi_aff::reset_tuple_id(isl::dim type) const
  16704. {
  16705.   return isl::multi_pw_aff(*this).reset_tuple_id(type);
  16706. }
  16707.  
  16708. isl::multi_pw_aff pw_multi_aff::scale(const isl::multi_val &mv) const
  16709. {
  16710.   return isl::multi_pw_aff(*this).scale(mv);
  16711. }
  16712.  
  16713. isl::pw_multi_aff pw_multi_aff::scale(isl::val v) const
  16714. {
  16715.   auto res = isl_pw_multi_aff_scale_val(copy(), v.release());
  16716.   return manage(res);
  16717. }
  16718.  
  16719. isl::pw_multi_aff pw_multi_aff::scale(long v) const
  16720. {
  16721.   return this->scale(isl::val(ctx(), v));
  16722. }
  16723.  
  16724. isl::multi_pw_aff pw_multi_aff::scale_down(const isl::multi_val &mv) const
  16725. {
  16726.   return isl::multi_pw_aff(*this).scale_down(mv);
  16727. }
  16728.  
  16729. isl::pw_multi_aff pw_multi_aff::scale_down(isl::val v) const
  16730. {
  16731.   auto res = isl_pw_multi_aff_scale_down_val(copy(), v.release());
  16732.   return manage(res);
  16733. }
  16734.  
  16735. isl::pw_multi_aff pw_multi_aff::scale_down(long v) const
  16736. {
  16737.   return this->scale_down(isl::val(ctx(), v));
  16738. }
  16739.  
  16740. isl::multi_pw_aff pw_multi_aff::set_at(int pos, const isl::pw_aff &el) const
  16741. {
  16742.   return isl::multi_pw_aff(*this).set_at(pos, el);
  16743. }
  16744.  
  16745. isl::multi_union_pw_aff pw_multi_aff::set_at(int pos, const isl::union_pw_aff &el) const
  16746. {
  16747.   return isl::multi_pw_aff(*this).set_at(pos, el);
  16748. }
  16749.  
  16750. isl::multi_pw_aff pw_multi_aff::set_pw_aff(int pos, const isl::pw_aff &el) const
  16751. {
  16752.   return isl::multi_pw_aff(*this).set_pw_aff(pos, el);
  16753. }
  16754.  
  16755. isl::pw_multi_aff pw_multi_aff::set_pw_aff(unsigned int pos, isl::pw_aff pa) const
  16756. {
  16757.   auto res = isl_pw_multi_aff_set_pw_aff(copy(), pos, pa.release());
  16758.   return manage(res);
  16759. }
  16760.  
  16761. isl::pw_multi_aff pw_multi_aff::set_range_tuple(isl::id id) const
  16762. {
  16763.   auto res = isl_pw_multi_aff_set_range_tuple_id(copy(), id.release());
  16764.   return manage(res);
  16765. }
  16766.  
  16767. isl::pw_multi_aff pw_multi_aff::set_range_tuple(const std::string &id) const
  16768. {
  16769.   return this->set_range_tuple(isl::id(ctx(), id));
  16770. }
  16771.  
  16772. isl::multi_union_pw_aff pw_multi_aff::set_union_pw_aff(int pos, const isl::union_pw_aff &el) const
  16773. {
  16774.   return isl::multi_pw_aff(*this).set_union_pw_aff(pos, el);
  16775. }
  16776.  
  16777. class size pw_multi_aff::size() const
  16778. {
  16779.   return isl::multi_pw_aff(*this).size();
  16780. }
  16781.  
  16782. isl::space pw_multi_aff::space() const
  16783. {
  16784.   auto res = isl_pw_multi_aff_get_space(get());
  16785.   return manage(res);
  16786. }
  16787.  
  16788. isl::space pw_multi_aff::get_space() const
  16789. {
  16790.   return space();
  16791. }
  16792.  
  16793. isl::multi_pw_aff pw_multi_aff::sub(const isl::multi_pw_aff &multi2) const
  16794. {
  16795.   return isl::multi_pw_aff(*this).sub(multi2);
  16796. }
  16797.  
  16798. isl::multi_union_pw_aff pw_multi_aff::sub(const isl::multi_union_pw_aff &multi2) const
  16799. {
  16800.   return isl::multi_pw_aff(*this).sub(multi2);
  16801. }
  16802.  
  16803. isl::pw_multi_aff pw_multi_aff::sub(isl::pw_multi_aff pma2) const
  16804. {
  16805.   auto res = isl_pw_multi_aff_sub(copy(), pma2.release());
  16806.   return manage(res);
  16807. }
  16808.  
  16809. isl::union_pw_multi_aff pw_multi_aff::sub(const isl::union_pw_multi_aff &upma2) const
  16810. {
  16811.   return isl::union_pw_multi_aff(*this).sub(upma2);
  16812. }
  16813.  
  16814. isl::pw_multi_aff pw_multi_aff::sub(const isl::multi_aff &pma2) const
  16815. {
  16816.   return this->sub(isl::pw_multi_aff(pma2));
  16817. }
  16818.  
  16819. isl::pw_multi_aff pw_multi_aff::sub(const isl::pw_aff &pma2) const
  16820. {
  16821.   return this->sub(isl::pw_multi_aff(pma2));
  16822. }
  16823.  
  16824. isl::pw_multi_aff pw_multi_aff::subtract_domain(isl::set set) const
  16825. {
  16826.   auto res = isl_pw_multi_aff_subtract_domain(copy(), set.release());
  16827.   return manage(res);
  16828. }
  16829.  
  16830. isl::union_pw_multi_aff pw_multi_aff::subtract_domain(const isl::space &space) const
  16831. {
  16832.   return isl::union_pw_multi_aff(*this).subtract_domain(space);
  16833. }
  16834.  
  16835. isl::union_pw_multi_aff pw_multi_aff::subtract_domain(const isl::union_set &uset) const
  16836. {
  16837.   return isl::union_pw_multi_aff(*this).subtract_domain(uset);
  16838. }
  16839.  
  16840. isl::pw_multi_aff pw_multi_aff::subtract_domain(const isl::basic_set &set) const
  16841. {
  16842.   return this->subtract_domain(isl::set(set));
  16843. }
  16844.  
  16845. isl::pw_multi_aff pw_multi_aff::subtract_domain(const isl::point &set) const
  16846. {
  16847.   return this->subtract_domain(isl::set(set));
  16848. }
  16849.  
  16850. isl::pw_multi_aff_list pw_multi_aff::to_list() const
  16851. {
  16852.   auto res = isl_pw_multi_aff_to_list(copy());
  16853.   return manage(res);
  16854. }
  16855.  
  16856. isl::multi_pw_aff pw_multi_aff::to_multi_pw_aff() const
  16857. {
  16858.   auto res = isl_pw_multi_aff_to_multi_pw_aff(copy());
  16859.   return manage(res);
  16860. }
  16861.  
  16862. isl::union_pw_multi_aff pw_multi_aff::to_union_pw_multi_aff() const
  16863. {
  16864.   auto res = isl_pw_multi_aff_to_union_pw_multi_aff(copy());
  16865.   return manage(res);
  16866. }
  16867.  
  16868. isl::id pw_multi_aff::tuple_id(isl::dim type) const
  16869. {
  16870.   auto res = isl_pw_multi_aff_get_tuple_id(get(), static_cast<enum isl_dim_type>(type));
  16871.   return manage(res);
  16872. }
  16873.  
  16874. isl::id pw_multi_aff::get_tuple_id(isl::dim type) const
  16875. {
  16876.   return tuple_id(type);
  16877. }
  16878.  
  16879. isl::multi_pw_aff pw_multi_aff::unbind_params_insert_domain(const isl::multi_id &domain) const
  16880. {
  16881.   return isl::multi_pw_aff(*this).unbind_params_insert_domain(domain);
  16882. }
  16883.  
  16884. isl::multi_pw_aff pw_multi_aff::union_add(const isl::multi_pw_aff &mpa2) const
  16885. {
  16886.   return isl::multi_pw_aff(*this).union_add(mpa2);
  16887. }
  16888.  
  16889. isl::multi_union_pw_aff pw_multi_aff::union_add(const isl::multi_union_pw_aff &mupa2) const
  16890. {
  16891.   return isl::multi_pw_aff(*this).union_add(mupa2);
  16892. }
  16893.  
  16894. isl::pw_multi_aff pw_multi_aff::union_add(isl::pw_multi_aff pma2) const
  16895. {
  16896.   auto res = isl_pw_multi_aff_union_add(copy(), pma2.release());
  16897.   return manage(res);
  16898. }
  16899.  
  16900. isl::union_pw_multi_aff pw_multi_aff::union_add(const isl::union_pw_multi_aff &upma2) const
  16901. {
  16902.   return isl::union_pw_multi_aff(*this).union_add(upma2);
  16903. }
  16904.  
  16905. isl::pw_multi_aff pw_multi_aff::union_add(const isl::multi_aff &pma2) const
  16906. {
  16907.   return this->union_add(isl::pw_multi_aff(pma2));
  16908. }
  16909.  
  16910. isl::pw_multi_aff pw_multi_aff::union_add(const isl::pw_aff &pma2) const
  16911. {
  16912.   return this->union_add(isl::pw_multi_aff(pma2));
  16913. }
  16914.  
  16915. isl::pw_multi_aff pw_multi_aff::zero(isl::space space)
  16916. {
  16917.   auto res = isl_pw_multi_aff_zero(space.release());
  16918.   return manage(res);
  16919. }
  16920.  
  16921. inline std::ostream &operator<<(std::ostream &os, const pw_multi_aff &obj)
  16922. {
  16923.   char *str = isl_pw_multi_aff_to_str(obj.get());
  16924.   if (!str) {
  16925.     os.setstate(std::ios_base::badbit);
  16926.     return os;
  16927.   }
  16928.   os << str;
  16929.   free(str);
  16930.   return os;
  16931. }
  16932.  
  16933. // implementations for isl::pw_multi_aff_list
  16934. pw_multi_aff_list manage(__isl_take isl_pw_multi_aff_list *ptr) {
  16935.   return pw_multi_aff_list(ptr);
  16936. }
  16937. pw_multi_aff_list manage_copy(__isl_keep isl_pw_multi_aff_list *ptr) {
  16938.   ptr = isl_pw_multi_aff_list_copy(ptr);
  16939.   return pw_multi_aff_list(ptr);
  16940. }
  16941.  
  16942. pw_multi_aff_list::pw_multi_aff_list()
  16943.     : ptr(nullptr) {}
  16944.  
  16945. pw_multi_aff_list::pw_multi_aff_list(const pw_multi_aff_list &obj)
  16946.     : ptr(nullptr)
  16947. {
  16948.   ptr = obj.copy();
  16949. }
  16950.  
  16951. pw_multi_aff_list::pw_multi_aff_list(__isl_take isl_pw_multi_aff_list *ptr)
  16952.     : ptr(ptr) {}
  16953.  
  16954. pw_multi_aff_list::pw_multi_aff_list(isl::ctx ctx, int n)
  16955. {
  16956.   auto res = isl_pw_multi_aff_list_alloc(ctx.release(), n);
  16957.   ptr = res;
  16958. }
  16959.  
  16960. pw_multi_aff_list::pw_multi_aff_list(isl::pw_multi_aff el)
  16961. {
  16962.   auto res = isl_pw_multi_aff_list_from_pw_multi_aff(el.release());
  16963.   ptr = res;
  16964. }
  16965.  
  16966. pw_multi_aff_list::pw_multi_aff_list(isl::ctx ctx, const std::string &str)
  16967. {
  16968.   auto res = isl_pw_multi_aff_list_read_from_str(ctx.release(), str.c_str());
  16969.   ptr = res;
  16970. }
  16971.  
  16972. pw_multi_aff_list &pw_multi_aff_list::operator=(pw_multi_aff_list obj) {
  16973.   std::swap(this->ptr, obj.ptr);
  16974.   return *this;
  16975. }
  16976.  
  16977. pw_multi_aff_list::~pw_multi_aff_list() {
  16978.   if (ptr)
  16979.     isl_pw_multi_aff_list_free(ptr);
  16980. }
  16981.  
  16982. __isl_give isl_pw_multi_aff_list *pw_multi_aff_list::copy() const & {
  16983.   return isl_pw_multi_aff_list_copy(ptr);
  16984. }
  16985.  
  16986. __isl_keep isl_pw_multi_aff_list *pw_multi_aff_list::get() const {
  16987.   return ptr;
  16988. }
  16989.  
  16990. __isl_give isl_pw_multi_aff_list *pw_multi_aff_list::release() {
  16991.   isl_pw_multi_aff_list *tmp = ptr;
  16992.   ptr = nullptr;
  16993.   return tmp;
  16994. }
  16995.  
  16996. bool pw_multi_aff_list::is_null() const {
  16997.   return ptr == nullptr;
  16998. }
  16999.  
  17000. isl::ctx pw_multi_aff_list::ctx() const {
  17001.   return isl::ctx(isl_pw_multi_aff_list_get_ctx(ptr));
  17002. }
  17003.  
  17004. isl::pw_multi_aff_list pw_multi_aff_list::add(isl::pw_multi_aff el) const
  17005. {
  17006.   auto res = isl_pw_multi_aff_list_add(copy(), el.release());
  17007.   return manage(res);
  17008. }
  17009.  
  17010. isl::pw_multi_aff pw_multi_aff_list::at(int index) const
  17011. {
  17012.   auto res = isl_pw_multi_aff_list_get_at(get(), index);
  17013.   return manage(res);
  17014. }
  17015.  
  17016. isl::pw_multi_aff pw_multi_aff_list::get_at(int index) const
  17017. {
  17018.   return at(index);
  17019. }
  17020.  
  17021. isl::pw_multi_aff_list pw_multi_aff_list::clear() const
  17022. {
  17023.   auto res = isl_pw_multi_aff_list_clear(copy());
  17024.   return manage(res);
  17025. }
  17026.  
  17027. isl::pw_multi_aff_list pw_multi_aff_list::concat(isl::pw_multi_aff_list list2) const
  17028. {
  17029.   auto res = isl_pw_multi_aff_list_concat(copy(), list2.release());
  17030.   return manage(res);
  17031. }
  17032.  
  17033. isl::pw_multi_aff_list pw_multi_aff_list::drop(unsigned int first, unsigned int n) const
  17034. {
  17035.   auto res = isl_pw_multi_aff_list_drop(copy(), first, n);
  17036.   return manage(res);
  17037. }
  17038.  
  17039. stat pw_multi_aff_list::foreach(const std::function<stat(isl::pw_multi_aff)> &fn) const
  17040. {
  17041.   struct fn_data {
  17042.     std::function<stat(isl::pw_multi_aff)> func;
  17043.   } fn_data = { fn };
  17044.   auto fn_lambda = [](isl_pw_multi_aff *arg_0, void *arg_1) -> isl_stat {
  17045.     auto *data = static_cast<struct fn_data *>(arg_1);
  17046.     auto ret = (data->func)(manage(arg_0));
  17047.     return ret.release();
  17048.   };
  17049.   auto res = isl_pw_multi_aff_list_foreach(get(), fn_lambda, &fn_data);
  17050.   return manage(res);
  17051. }
  17052.  
  17053. isl::pw_multi_aff_list pw_multi_aff_list::insert(unsigned int pos, isl::pw_multi_aff el) const
  17054. {
  17055.   auto res = isl_pw_multi_aff_list_insert(copy(), pos, el.release());
  17056.   return manage(res);
  17057. }
  17058.  
  17059. class size pw_multi_aff_list::size() const
  17060. {
  17061.   auto res = isl_pw_multi_aff_list_size(get());
  17062.   return manage(res);
  17063. }
  17064.  
  17065. inline std::ostream &operator<<(std::ostream &os, const pw_multi_aff_list &obj)
  17066. {
  17067.   char *str = isl_pw_multi_aff_list_to_str(obj.get());
  17068.   if (!str) {
  17069.     os.setstate(std::ios_base::badbit);
  17070.     return os;
  17071.   }
  17072.   os << str;
  17073.   free(str);
  17074.   return os;
  17075. }
  17076.  
  17077. // implementations for isl::schedule
  17078. schedule manage(__isl_take isl_schedule *ptr) {
  17079.   return schedule(ptr);
  17080. }
  17081. schedule manage_copy(__isl_keep isl_schedule *ptr) {
  17082.   ptr = isl_schedule_copy(ptr);
  17083.   return schedule(ptr);
  17084. }
  17085.  
  17086. schedule::schedule()
  17087.     : ptr(nullptr) {}
  17088.  
  17089. schedule::schedule(const schedule &obj)
  17090.     : ptr(nullptr)
  17091. {
  17092.   ptr = obj.copy();
  17093. }
  17094.  
  17095. schedule::schedule(__isl_take isl_schedule *ptr)
  17096.     : ptr(ptr) {}
  17097.  
  17098. schedule::schedule(isl::ctx ctx, const std::string &str)
  17099. {
  17100.   auto res = isl_schedule_read_from_str(ctx.release(), str.c_str());
  17101.   ptr = res;
  17102. }
  17103.  
  17104. schedule &schedule::operator=(schedule obj) {
  17105.   std::swap(this->ptr, obj.ptr);
  17106.   return *this;
  17107. }
  17108.  
  17109. schedule::~schedule() {
  17110.   if (ptr)
  17111.     isl_schedule_free(ptr);
  17112. }
  17113.  
  17114. __isl_give isl_schedule *schedule::copy() const & {
  17115.   return isl_schedule_copy(ptr);
  17116. }
  17117.  
  17118. __isl_keep isl_schedule *schedule::get() const {
  17119.   return ptr;
  17120. }
  17121.  
  17122. __isl_give isl_schedule *schedule::release() {
  17123.   isl_schedule *tmp = ptr;
  17124.   ptr = nullptr;
  17125.   return tmp;
  17126. }
  17127.  
  17128. bool schedule::is_null() const {
  17129.   return ptr == nullptr;
  17130. }
  17131.  
  17132. isl::ctx schedule::ctx() const {
  17133.   return isl::ctx(isl_schedule_get_ctx(ptr));
  17134. }
  17135.  
  17136. isl::schedule schedule::align_params(isl::space space) const
  17137. {
  17138.   auto res = isl_schedule_align_params(copy(), space.release());
  17139.   return manage(res);
  17140. }
  17141.  
  17142. isl::union_set schedule::domain() const
  17143. {
  17144.   auto res = isl_schedule_get_domain(get());
  17145.   return manage(res);
  17146. }
  17147.  
  17148. isl::union_set schedule::get_domain() const
  17149. {
  17150.   return domain();
  17151. }
  17152.  
  17153. isl::schedule schedule::from_domain(isl::union_set domain)
  17154. {
  17155.   auto res = isl_schedule_from_domain(domain.release());
  17156.   return manage(res);
  17157. }
  17158.  
  17159. isl::schedule schedule::gist_domain_params(isl::set context) const
  17160. {
  17161.   auto res = isl_schedule_gist_domain_params(copy(), context.release());
  17162.   return manage(res);
  17163. }
  17164.  
  17165. isl::schedule schedule::insert_partial_schedule(isl::multi_union_pw_aff partial) const
  17166. {
  17167.   auto res = isl_schedule_insert_partial_schedule(copy(), partial.release());
  17168.   return manage(res);
  17169. }
  17170.  
  17171. isl::schedule schedule::intersect_domain(isl::union_set domain) const
  17172. {
  17173.   auto res = isl_schedule_intersect_domain(copy(), domain.release());
  17174.   return manage(res);
  17175. }
  17176.  
  17177. isl::union_map schedule::map() const
  17178. {
  17179.   auto res = isl_schedule_get_map(get());
  17180.   return manage(res);
  17181. }
  17182.  
  17183. isl::union_map schedule::get_map() const
  17184. {
  17185.   return map();
  17186. }
  17187.  
  17188. isl::schedule schedule::pullback(isl::union_pw_multi_aff upma) const
  17189. {
  17190.   auto res = isl_schedule_pullback_union_pw_multi_aff(copy(), upma.release());
  17191.   return manage(res);
  17192. }
  17193.  
  17194. isl::schedule_node schedule::root() const
  17195. {
  17196.   auto res = isl_schedule_get_root(get());
  17197.   return manage(res);
  17198. }
  17199.  
  17200. isl::schedule_node schedule::get_root() const
  17201. {
  17202.   return root();
  17203. }
  17204.  
  17205. isl::schedule schedule::sequence(isl::schedule schedule2) const
  17206. {
  17207.   auto res = isl_schedule_sequence(copy(), schedule2.release());
  17208.   return manage(res);
  17209. }
  17210.  
  17211. inline std::ostream &operator<<(std::ostream &os, const schedule &obj)
  17212. {
  17213.   char *str = isl_schedule_to_str(obj.get());
  17214.   if (!str) {
  17215.     os.setstate(std::ios_base::badbit);
  17216.     return os;
  17217.   }
  17218.   os << str;
  17219.   free(str);
  17220.   return os;
  17221. }
  17222.  
  17223. // implementations for isl::schedule_constraints
  17224. schedule_constraints manage(__isl_take isl_schedule_constraints *ptr) {
  17225.   return schedule_constraints(ptr);
  17226. }
  17227. schedule_constraints manage_copy(__isl_keep isl_schedule_constraints *ptr) {
  17228.   ptr = isl_schedule_constraints_copy(ptr);
  17229.   return schedule_constraints(ptr);
  17230. }
  17231.  
  17232. schedule_constraints::schedule_constraints()
  17233.     : ptr(nullptr) {}
  17234.  
  17235. schedule_constraints::schedule_constraints(const schedule_constraints &obj)
  17236.     : ptr(nullptr)
  17237. {
  17238.   ptr = obj.copy();
  17239. }
  17240.  
  17241. schedule_constraints::schedule_constraints(__isl_take isl_schedule_constraints *ptr)
  17242.     : ptr(ptr) {}
  17243.  
  17244. schedule_constraints::schedule_constraints(isl::ctx ctx, const std::string &str)
  17245. {
  17246.   auto res = isl_schedule_constraints_read_from_str(ctx.release(), str.c_str());
  17247.   ptr = res;
  17248. }
  17249.  
  17250. schedule_constraints &schedule_constraints::operator=(schedule_constraints obj) {
  17251.   std::swap(this->ptr, obj.ptr);
  17252.   return *this;
  17253. }
  17254.  
  17255. schedule_constraints::~schedule_constraints() {
  17256.   if (ptr)
  17257.     isl_schedule_constraints_free(ptr);
  17258. }
  17259.  
  17260. __isl_give isl_schedule_constraints *schedule_constraints::copy() const & {
  17261.   return isl_schedule_constraints_copy(ptr);
  17262. }
  17263.  
  17264. __isl_keep isl_schedule_constraints *schedule_constraints::get() const {
  17265.   return ptr;
  17266. }
  17267.  
  17268. __isl_give isl_schedule_constraints *schedule_constraints::release() {
  17269.   isl_schedule_constraints *tmp = ptr;
  17270.   ptr = nullptr;
  17271.   return tmp;
  17272. }
  17273.  
  17274. bool schedule_constraints::is_null() const {
  17275.   return ptr == nullptr;
  17276. }
  17277.  
  17278. isl::ctx schedule_constraints::ctx() const {
  17279.   return isl::ctx(isl_schedule_constraints_get_ctx(ptr));
  17280. }
  17281.  
  17282. isl::union_map schedule_constraints::coincidence() const
  17283. {
  17284.   auto res = isl_schedule_constraints_get_coincidence(get());
  17285.   return manage(res);
  17286. }
  17287.  
  17288. isl::union_map schedule_constraints::get_coincidence() const
  17289. {
  17290.   return coincidence();
  17291. }
  17292.  
  17293. isl::schedule schedule_constraints::compute_schedule() const
  17294. {
  17295.   auto res = isl_schedule_constraints_compute_schedule(copy());
  17296.   return manage(res);
  17297. }
  17298.  
  17299. isl::union_map schedule_constraints::conditional_validity() const
  17300. {
  17301.   auto res = isl_schedule_constraints_get_conditional_validity(get());
  17302.   return manage(res);
  17303. }
  17304.  
  17305. isl::union_map schedule_constraints::get_conditional_validity() const
  17306. {
  17307.   return conditional_validity();
  17308. }
  17309.  
  17310. isl::union_map schedule_constraints::conditional_validity_condition() const
  17311. {
  17312.   auto res = isl_schedule_constraints_get_conditional_validity_condition(get());
  17313.   return manage(res);
  17314. }
  17315.  
  17316. isl::union_map schedule_constraints::get_conditional_validity_condition() const
  17317. {
  17318.   return conditional_validity_condition();
  17319. }
  17320.  
  17321. isl::set schedule_constraints::context() const
  17322. {
  17323.   auto res = isl_schedule_constraints_get_context(get());
  17324.   return manage(res);
  17325. }
  17326.  
  17327. isl::set schedule_constraints::get_context() const
  17328. {
  17329.   return context();
  17330. }
  17331.  
  17332. isl::union_set schedule_constraints::domain() const
  17333. {
  17334.   auto res = isl_schedule_constraints_get_domain(get());
  17335.   return manage(res);
  17336. }
  17337.  
  17338. isl::union_set schedule_constraints::get_domain() const
  17339. {
  17340.   return domain();
  17341. }
  17342.  
  17343. isl::schedule_constraints schedule_constraints::on_domain(isl::union_set domain)
  17344. {
  17345.   auto res = isl_schedule_constraints_on_domain(domain.release());
  17346.   return manage(res);
  17347. }
  17348.  
  17349. isl::union_map schedule_constraints::proximity() const
  17350. {
  17351.   auto res = isl_schedule_constraints_get_proximity(get());
  17352.   return manage(res);
  17353. }
  17354.  
  17355. isl::union_map schedule_constraints::get_proximity() const
  17356. {
  17357.   return proximity();
  17358. }
  17359.  
  17360. isl::schedule_constraints schedule_constraints::set_coincidence(isl::union_map coincidence) const
  17361. {
  17362.   auto res = isl_schedule_constraints_set_coincidence(copy(), coincidence.release());
  17363.   return manage(res);
  17364. }
  17365.  
  17366. isl::schedule_constraints schedule_constraints::set_conditional_validity(isl::union_map condition, isl::union_map validity) const
  17367. {
  17368.   auto res = isl_schedule_constraints_set_conditional_validity(copy(), condition.release(), validity.release());
  17369.   return manage(res);
  17370. }
  17371.  
  17372. isl::schedule_constraints schedule_constraints::set_context(isl::set context) const
  17373. {
  17374.   auto res = isl_schedule_constraints_set_context(copy(), context.release());
  17375.   return manage(res);
  17376. }
  17377.  
  17378. isl::schedule_constraints schedule_constraints::set_proximity(isl::union_map proximity) const
  17379. {
  17380.   auto res = isl_schedule_constraints_set_proximity(copy(), proximity.release());
  17381.   return manage(res);
  17382. }
  17383.  
  17384. isl::schedule_constraints schedule_constraints::set_validity(isl::union_map validity) const
  17385. {
  17386.   auto res = isl_schedule_constraints_set_validity(copy(), validity.release());
  17387.   return manage(res);
  17388. }
  17389.  
  17390. isl::union_map schedule_constraints::validity() const
  17391. {
  17392.   auto res = isl_schedule_constraints_get_validity(get());
  17393.   return manage(res);
  17394. }
  17395.  
  17396. isl::union_map schedule_constraints::get_validity() const
  17397. {
  17398.   return validity();
  17399. }
  17400.  
  17401. inline std::ostream &operator<<(std::ostream &os, const schedule_constraints &obj)
  17402. {
  17403.   char *str = isl_schedule_constraints_to_str(obj.get());
  17404.   if (!str) {
  17405.     os.setstate(std::ios_base::badbit);
  17406.     return os;
  17407.   }
  17408.   os << str;
  17409.   free(str);
  17410.   return os;
  17411. }
  17412.  
  17413. // implementations for isl::schedule_node
  17414. schedule_node manage(__isl_take isl_schedule_node *ptr) {
  17415.   return schedule_node(ptr);
  17416. }
  17417. schedule_node manage_copy(__isl_keep isl_schedule_node *ptr) {
  17418.   ptr = isl_schedule_node_copy(ptr);
  17419.   return schedule_node(ptr);
  17420. }
  17421.  
  17422. schedule_node::schedule_node()
  17423.     : ptr(nullptr) {}
  17424.  
  17425. schedule_node::schedule_node(const schedule_node &obj)
  17426.     : ptr(nullptr)
  17427. {
  17428.   ptr = obj.copy();
  17429. }
  17430.  
  17431. schedule_node::schedule_node(__isl_take isl_schedule_node *ptr)
  17432.     : ptr(ptr) {}
  17433.  
  17434. schedule_node &schedule_node::operator=(schedule_node obj) {
  17435.   std::swap(this->ptr, obj.ptr);
  17436.   return *this;
  17437. }
  17438.  
  17439. schedule_node::~schedule_node() {
  17440.   if (ptr)
  17441.     isl_schedule_node_free(ptr);
  17442. }
  17443.  
  17444. __isl_give isl_schedule_node *schedule_node::copy() const & {
  17445.   return isl_schedule_node_copy(ptr);
  17446. }
  17447.  
  17448. __isl_keep isl_schedule_node *schedule_node::get() const {
  17449.   return ptr;
  17450. }
  17451.  
  17452. __isl_give isl_schedule_node *schedule_node::release() {
  17453.   isl_schedule_node *tmp = ptr;
  17454.   ptr = nullptr;
  17455.   return tmp;
  17456. }
  17457.  
  17458. bool schedule_node::is_null() const {
  17459.   return ptr == nullptr;
  17460. }
  17461.  
  17462. template <typename T, typename>
  17463. boolean schedule_node::isa_type(T subtype) const
  17464. {
  17465.   if (is_null())
  17466.     return boolean();
  17467.   return isl_schedule_node_get_type(get()) == subtype;
  17468. }
  17469. template <class T>
  17470. boolean schedule_node::isa() const
  17471. {
  17472.   return isa_type<decltype(T::type)>(T::type);
  17473. }
  17474. template <class T>
  17475. T schedule_node::as() const
  17476. {
  17477.  if (isa<T>().is_false())
  17478.     isl_die(ctx().get(), isl_error_invalid, "not an object of the requested subtype", return T());
  17479.   return T(copy());
  17480. }
  17481.  
  17482. isl::ctx schedule_node::ctx() const {
  17483.   return isl::ctx(isl_schedule_node_get_ctx(ptr));
  17484. }
  17485.  
  17486. isl::schedule_node schedule_node::ancestor(int generation) const
  17487. {
  17488.   auto res = isl_schedule_node_ancestor(copy(), generation);
  17489.   return manage(res);
  17490. }
  17491.  
  17492. class size schedule_node::ancestor_child_position(const isl::schedule_node &ancestor) const
  17493. {
  17494.   auto res = isl_schedule_node_get_ancestor_child_position(get(), ancestor.get());
  17495.   return manage(res);
  17496. }
  17497.  
  17498. class size schedule_node::get_ancestor_child_position(const isl::schedule_node &ancestor) const
  17499. {
  17500.   return ancestor_child_position(ancestor);
  17501. }
  17502.  
  17503. isl::schedule_node schedule_node::child(int pos) const
  17504. {
  17505.   auto res = isl_schedule_node_child(copy(), pos);
  17506.   return manage(res);
  17507. }
  17508.  
  17509. class size schedule_node::child_position() const
  17510. {
  17511.   auto res = isl_schedule_node_get_child_position(get());
  17512.   return manage(res);
  17513. }
  17514.  
  17515. class size schedule_node::get_child_position() const
  17516. {
  17517.   return child_position();
  17518. }
  17519.  
  17520. isl::union_set schedule_node::domain() const
  17521. {
  17522.   auto res = isl_schedule_node_get_domain(get());
  17523.   return manage(res);
  17524. }
  17525.  
  17526. isl::union_set schedule_node::get_domain() const
  17527. {
  17528.   return domain();
  17529. }
  17530.  
  17531. boolean schedule_node::every_descendant(const std::function<boolean(isl::schedule_node)> &test) const
  17532. {
  17533.   struct test_data {
  17534.     std::function<boolean(isl::schedule_node)> func;
  17535.   } test_data = { test };
  17536.   auto test_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_bool {
  17537.     auto *data = static_cast<struct test_data *>(arg_1);
  17538.     auto ret = (data->func)(manage_copy(arg_0));
  17539.     return ret.release();
  17540.   };
  17541.   auto res = isl_schedule_node_every_descendant(get(), test_lambda, &test_data);
  17542.   return manage(res);
  17543. }
  17544.  
  17545. isl::schedule_node schedule_node::first_child() const
  17546. {
  17547.   auto res = isl_schedule_node_first_child(copy());
  17548.   return manage(res);
  17549. }
  17550.  
  17551. stat schedule_node::foreach_ancestor_top_down(const std::function<stat(isl::schedule_node)> &fn) const
  17552. {
  17553.   struct fn_data {
  17554.     std::function<stat(isl::schedule_node)> func;
  17555.   } fn_data = { fn };
  17556.   auto fn_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_stat {
  17557.     auto *data = static_cast<struct fn_data *>(arg_1);
  17558.     auto ret = (data->func)(manage_copy(arg_0));
  17559.     return ret.release();
  17560.   };
  17561.   auto res = isl_schedule_node_foreach_ancestor_top_down(get(), fn_lambda, &fn_data);
  17562.   return manage(res);
  17563. }
  17564.  
  17565. stat schedule_node::foreach_descendant_top_down(const std::function<boolean(isl::schedule_node)> &fn) const
  17566. {
  17567.   struct fn_data {
  17568.     std::function<boolean(isl::schedule_node)> func;
  17569.   } fn_data = { fn };
  17570.   auto fn_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_bool {
  17571.     auto *data = static_cast<struct fn_data *>(arg_1);
  17572.     auto ret = (data->func)(manage_copy(arg_0));
  17573.     return ret.release();
  17574.   };
  17575.   auto res = isl_schedule_node_foreach_descendant_top_down(get(), fn_lambda, &fn_data);
  17576.   return manage(res);
  17577. }
  17578.  
  17579. isl::schedule_node schedule_node::from_domain(isl::union_set domain)
  17580. {
  17581.   auto res = isl_schedule_node_from_domain(domain.release());
  17582.   return manage(res);
  17583. }
  17584.  
  17585. isl::schedule_node schedule_node::from_extension(isl::union_map extension)
  17586. {
  17587.   auto res = isl_schedule_node_from_extension(extension.release());
  17588.   return manage(res);
  17589. }
  17590.  
  17591. isl::schedule_node schedule_node::graft_after(isl::schedule_node graft) const
  17592. {
  17593.   auto res = isl_schedule_node_graft_after(copy(), graft.release());
  17594.   return manage(res);
  17595. }
  17596.  
  17597. isl::schedule_node schedule_node::graft_before(isl::schedule_node graft) const
  17598. {
  17599.   auto res = isl_schedule_node_graft_before(copy(), graft.release());
  17600.   return manage(res);
  17601. }
  17602.  
  17603. boolean schedule_node::has_children() const
  17604. {
  17605.   auto res = isl_schedule_node_has_children(get());
  17606.   return manage(res);
  17607. }
  17608.  
  17609. boolean schedule_node::has_next_sibling() const
  17610. {
  17611.   auto res = isl_schedule_node_has_next_sibling(get());
  17612.   return manage(res);
  17613. }
  17614.  
  17615. boolean schedule_node::has_parent() const
  17616. {
  17617.   auto res = isl_schedule_node_has_parent(get());
  17618.   return manage(res);
  17619. }
  17620.  
  17621. boolean schedule_node::has_previous_sibling() const
  17622. {
  17623.   auto res = isl_schedule_node_has_previous_sibling(get());
  17624.   return manage(res);
  17625. }
  17626.  
  17627. isl::schedule_node schedule_node::insert_context(isl::set context) const
  17628. {
  17629.   auto res = isl_schedule_node_insert_context(copy(), context.release());
  17630.   return manage(res);
  17631. }
  17632.  
  17633. isl::schedule_node schedule_node::insert_filter(isl::union_set filter) const
  17634. {
  17635.   auto res = isl_schedule_node_insert_filter(copy(), filter.release());
  17636.   return manage(res);
  17637. }
  17638.  
  17639. isl::schedule_node schedule_node::insert_guard(isl::set context) const
  17640. {
  17641.   auto res = isl_schedule_node_insert_guard(copy(), context.release());
  17642.   return manage(res);
  17643. }
  17644.  
  17645. isl::schedule_node schedule_node::insert_mark(isl::id mark) const
  17646. {
  17647.   auto res = isl_schedule_node_insert_mark(copy(), mark.release());
  17648.   return manage(res);
  17649. }
  17650.  
  17651. isl::schedule_node schedule_node::insert_mark(const std::string &mark) const
  17652. {
  17653.   return this->insert_mark(isl::id(ctx(), mark));
  17654. }
  17655.  
  17656. isl::schedule_node schedule_node::insert_partial_schedule(isl::multi_union_pw_aff schedule) const
  17657. {
  17658.   auto res = isl_schedule_node_insert_partial_schedule(copy(), schedule.release());
  17659.   return manage(res);
  17660. }
  17661.  
  17662. isl::schedule_node schedule_node::insert_sequence(isl::union_set_list filters) const
  17663. {
  17664.   auto res = isl_schedule_node_insert_sequence(copy(), filters.release());
  17665.   return manage(res);
  17666. }
  17667.  
  17668. isl::schedule_node schedule_node::insert_set(isl::union_set_list filters) const
  17669. {
  17670.   auto res = isl_schedule_node_insert_set(copy(), filters.release());
  17671.   return manage(res);
  17672. }
  17673.  
  17674. boolean schedule_node::is_equal(const isl::schedule_node &node2) const
  17675. {
  17676.   auto res = isl_schedule_node_is_equal(get(), node2.get());
  17677.   return manage(res);
  17678. }
  17679.  
  17680. boolean schedule_node::is_subtree_anchored() const
  17681. {
  17682.   auto res = isl_schedule_node_is_subtree_anchored(get());
  17683.   return manage(res);
  17684. }
  17685.  
  17686. isl::schedule_node schedule_node::map_descendant_bottom_up(const std::function<isl::schedule_node(isl::schedule_node)> &fn) const
  17687. {
  17688.   struct fn_data {
  17689.     std::function<isl::schedule_node(isl::schedule_node)> func;
  17690.   } fn_data = { fn };
  17691.   auto fn_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_schedule_node * {
  17692.     auto *data = static_cast<struct fn_data *>(arg_1);
  17693.     auto ret = (data->func)(manage(arg_0));
  17694.     return ret.release();
  17695.   };
  17696.   auto res = isl_schedule_node_map_descendant_bottom_up(copy(), fn_lambda, &fn_data);
  17697.   return manage(res);
  17698. }
  17699.  
  17700. class size schedule_node::n_children() const
  17701. {
  17702.   auto res = isl_schedule_node_n_children(get());
  17703.   return manage(res);
  17704. }
  17705.  
  17706. isl::schedule_node schedule_node::next_sibling() const
  17707. {
  17708.   auto res = isl_schedule_node_next_sibling(copy());
  17709.   return manage(res);
  17710. }
  17711.  
  17712. isl::schedule_node schedule_node::order_after(isl::union_set filter) const
  17713. {
  17714.   auto res = isl_schedule_node_order_after(copy(), filter.release());
  17715.   return manage(res);
  17716. }
  17717.  
  17718. isl::schedule_node schedule_node::order_before(isl::union_set filter) const
  17719. {
  17720.   auto res = isl_schedule_node_order_before(copy(), filter.release());
  17721.   return manage(res);
  17722. }
  17723.  
  17724. isl::schedule_node schedule_node::parent() const
  17725. {
  17726.   auto res = isl_schedule_node_parent(copy());
  17727.   return manage(res);
  17728. }
  17729.  
  17730. isl::multi_union_pw_aff schedule_node::prefix_schedule_multi_union_pw_aff() const
  17731. {
  17732.   auto res = isl_schedule_node_get_prefix_schedule_multi_union_pw_aff(get());
  17733.   return manage(res);
  17734. }
  17735.  
  17736. isl::multi_union_pw_aff schedule_node::get_prefix_schedule_multi_union_pw_aff() const
  17737. {
  17738.   return prefix_schedule_multi_union_pw_aff();
  17739. }
  17740.  
  17741. isl::union_map schedule_node::prefix_schedule_relation() const
  17742. {
  17743.   auto res = isl_schedule_node_get_prefix_schedule_relation(get());
  17744.   return manage(res);
  17745. }
  17746.  
  17747. isl::union_map schedule_node::get_prefix_schedule_relation() const
  17748. {
  17749.   return prefix_schedule_relation();
  17750. }
  17751.  
  17752. isl::union_map schedule_node::prefix_schedule_union_map() const
  17753. {
  17754.   auto res = isl_schedule_node_get_prefix_schedule_union_map(get());
  17755.   return manage(res);
  17756. }
  17757.  
  17758. isl::union_map schedule_node::get_prefix_schedule_union_map() const
  17759. {
  17760.   return prefix_schedule_union_map();
  17761. }
  17762.  
  17763. isl::union_pw_multi_aff schedule_node::prefix_schedule_union_pw_multi_aff() const
  17764. {
  17765.   auto res = isl_schedule_node_get_prefix_schedule_union_pw_multi_aff(get());
  17766.   return manage(res);
  17767. }
  17768.  
  17769. isl::union_pw_multi_aff schedule_node::get_prefix_schedule_union_pw_multi_aff() const
  17770. {
  17771.   return prefix_schedule_union_pw_multi_aff();
  17772. }
  17773.  
  17774. isl::schedule_node schedule_node::previous_sibling() const
  17775. {
  17776.   auto res = isl_schedule_node_previous_sibling(copy());
  17777.   return manage(res);
  17778. }
  17779.  
  17780. isl::schedule_node schedule_node::root() const
  17781. {
  17782.   auto res = isl_schedule_node_root(copy());
  17783.   return manage(res);
  17784. }
  17785.  
  17786. isl::schedule schedule_node::schedule() const
  17787. {
  17788.   auto res = isl_schedule_node_get_schedule(get());
  17789.   return manage(res);
  17790. }
  17791.  
  17792. isl::schedule schedule_node::get_schedule() const
  17793. {
  17794.   return schedule();
  17795. }
  17796.  
  17797. class size schedule_node::schedule_depth() const
  17798. {
  17799.   auto res = isl_schedule_node_get_schedule_depth(get());
  17800.   return manage(res);
  17801. }
  17802.  
  17803. class size schedule_node::get_schedule_depth() const
  17804. {
  17805.   return schedule_depth();
  17806. }
  17807.  
  17808. isl::schedule_node schedule_node::shared_ancestor(const isl::schedule_node &node2) const
  17809. {
  17810.   auto res = isl_schedule_node_get_shared_ancestor(get(), node2.get());
  17811.   return manage(res);
  17812. }
  17813.  
  17814. isl::schedule_node schedule_node::get_shared_ancestor(const isl::schedule_node &node2) const
  17815. {
  17816.   return shared_ancestor(node2);
  17817. }
  17818.  
  17819. class size schedule_node::tree_depth() const
  17820. {
  17821.   auto res = isl_schedule_node_get_tree_depth(get());
  17822.   return manage(res);
  17823. }
  17824.  
  17825. class size schedule_node::get_tree_depth() const
  17826. {
  17827.   return tree_depth();
  17828. }
  17829.  
  17830. isl::union_set schedule_node::universe_domain() const
  17831. {
  17832.   auto res = isl_schedule_node_get_universe_domain(get());
  17833.   return manage(res);
  17834. }
  17835.  
  17836. isl::union_set schedule_node::get_universe_domain() const
  17837. {
  17838.   return universe_domain();
  17839. }
  17840.  
  17841. inline std::ostream &operator<<(std::ostream &os, const schedule_node &obj)
  17842. {
  17843.   char *str = isl_schedule_node_to_str(obj.get());
  17844.   if (!str) {
  17845.     os.setstate(std::ios_base::badbit);
  17846.     return os;
  17847.   }
  17848.   os << str;
  17849.   free(str);
  17850.   return os;
  17851. }
  17852.  
  17853. // implementations for isl::schedule_node_band
  17854. schedule_node_band::schedule_node_band()
  17855.     : schedule_node() {}
  17856.  
  17857. schedule_node_band::schedule_node_band(const schedule_node_band &obj)
  17858.     : schedule_node(obj)
  17859. {
  17860. }
  17861.  
  17862. schedule_node_band::schedule_node_band(__isl_take isl_schedule_node *ptr)
  17863.     : schedule_node(ptr) {}
  17864.  
  17865. schedule_node_band &schedule_node_band::operator=(schedule_node_band obj) {
  17866.   std::swap(this->ptr, obj.ptr);
  17867.   return *this;
  17868. }
  17869.  
  17870. isl::ctx schedule_node_band::ctx() const {
  17871.   return isl::ctx(isl_schedule_node_get_ctx(ptr));
  17872. }
  17873.  
  17874. isl::union_set schedule_node_band::ast_build_options() const
  17875. {
  17876.   auto res = isl_schedule_node_band_get_ast_build_options(get());
  17877.   return manage(res);
  17878. }
  17879.  
  17880. isl::union_set schedule_node_band::get_ast_build_options() const
  17881. {
  17882.   return ast_build_options();
  17883. }
  17884.  
  17885. isl::set schedule_node_band::ast_isolate_option() const
  17886. {
  17887.   auto res = isl_schedule_node_band_get_ast_isolate_option(get());
  17888.   return manage(res);
  17889. }
  17890.  
  17891. isl::set schedule_node_band::get_ast_isolate_option() const
  17892. {
  17893.   return ast_isolate_option();
  17894. }
  17895.  
  17896. boolean schedule_node_band::member_get_coincident(int pos) const
  17897. {
  17898.   auto res = isl_schedule_node_band_member_get_coincident(get(), pos);
  17899.   return manage(res);
  17900. }
  17901.  
  17902. schedule_node_band schedule_node_band::member_set_coincident(int pos, int coincident) const
  17903. {
  17904.   auto res = isl_schedule_node_band_member_set_coincident(copy(), pos, coincident);
  17905.   return manage(res).as<schedule_node_band>();
  17906. }
  17907.  
  17908. schedule_node_band schedule_node_band::mod(isl::multi_val mv) const
  17909. {
  17910.   auto res = isl_schedule_node_band_mod(copy(), mv.release());
  17911.   return manage(res).as<schedule_node_band>();
  17912. }
  17913.  
  17914. class size schedule_node_band::n_member() const
  17915. {
  17916.   auto res = isl_schedule_node_band_n_member(get());
  17917.   return manage(res);
  17918. }
  17919.  
  17920. isl::multi_union_pw_aff schedule_node_band::partial_schedule() const
  17921. {
  17922.   auto res = isl_schedule_node_band_get_partial_schedule(get());
  17923.   return manage(res);
  17924. }
  17925.  
  17926. isl::multi_union_pw_aff schedule_node_band::get_partial_schedule() const
  17927. {
  17928.   return partial_schedule();
  17929. }
  17930.  
  17931. boolean schedule_node_band::permutable() const
  17932. {
  17933.   auto res = isl_schedule_node_band_get_permutable(get());
  17934.   return manage(res);
  17935. }
  17936.  
  17937. boolean schedule_node_band::get_permutable() const
  17938. {
  17939.   return permutable();
  17940. }
  17941.  
  17942. schedule_node_band schedule_node_band::scale(isl::multi_val mv) const
  17943. {
  17944.   auto res = isl_schedule_node_band_scale(copy(), mv.release());
  17945.   return manage(res).as<schedule_node_band>();
  17946. }
  17947.  
  17948. schedule_node_band schedule_node_band::scale_down(isl::multi_val mv) const
  17949. {
  17950.   auto res = isl_schedule_node_band_scale_down(copy(), mv.release());
  17951.   return manage(res).as<schedule_node_band>();
  17952. }
  17953.  
  17954. schedule_node_band schedule_node_band::set_ast_build_options(isl::union_set options) const
  17955. {
  17956.   auto res = isl_schedule_node_band_set_ast_build_options(copy(), options.release());
  17957.   return manage(res).as<schedule_node_band>();
  17958. }
  17959.  
  17960. schedule_node_band schedule_node_band::set_permutable(int permutable) const
  17961. {
  17962.   auto res = isl_schedule_node_band_set_permutable(copy(), permutable);
  17963.   return manage(res).as<schedule_node_band>();
  17964. }
  17965.  
  17966. schedule_node_band schedule_node_band::shift(isl::multi_union_pw_aff shift) const
  17967. {
  17968.   auto res = isl_schedule_node_band_shift(copy(), shift.release());
  17969.   return manage(res).as<schedule_node_band>();
  17970. }
  17971.  
  17972. schedule_node_band schedule_node_band::split(int pos) const
  17973. {
  17974.   auto res = isl_schedule_node_band_split(copy(), pos);
  17975.   return manage(res).as<schedule_node_band>();
  17976. }
  17977.  
  17978. schedule_node_band schedule_node_band::tile(isl::multi_val sizes) const
  17979. {
  17980.   auto res = isl_schedule_node_band_tile(copy(), sizes.release());
  17981.   return manage(res).as<schedule_node_band>();
  17982. }
  17983.  
  17984. schedule_node_band schedule_node_band::member_set_ast_loop_default(int pos) const
  17985. {
  17986.   auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_default);
  17987.   return manage(res).as<schedule_node_band>();
  17988. }
  17989.  
  17990. schedule_node_band schedule_node_band::member_set_ast_loop_atomic(int pos) const
  17991. {
  17992.   auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_atomic);
  17993.   return manage(res).as<schedule_node_band>();
  17994. }
  17995.  
  17996. schedule_node_band schedule_node_band::member_set_ast_loop_unroll(int pos) const
  17997. {
  17998.   auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_unroll);
  17999.   return manage(res).as<schedule_node_band>();
  18000. }
  18001.  
  18002. schedule_node_band schedule_node_band::member_set_ast_loop_separate(int pos) const
  18003. {
  18004.   auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_separate);
  18005.   return manage(res).as<schedule_node_band>();
  18006. }
  18007.  
  18008. inline std::ostream &operator<<(std::ostream &os, const schedule_node_band &obj)
  18009. {
  18010.   char *str = isl_schedule_node_to_str(obj.get());
  18011.   if (!str) {
  18012.     os.setstate(std::ios_base::badbit);
  18013.     return os;
  18014.   }
  18015.   os << str;
  18016.   free(str);
  18017.   return os;
  18018. }
  18019.  
  18020. // implementations for isl::schedule_node_context
  18021. schedule_node_context::schedule_node_context()
  18022.     : schedule_node() {}
  18023.  
  18024. schedule_node_context::schedule_node_context(const schedule_node_context &obj)
  18025.     : schedule_node(obj)
  18026. {
  18027. }
  18028.  
  18029. schedule_node_context::schedule_node_context(__isl_take isl_schedule_node *ptr)
  18030.     : schedule_node(ptr) {}
  18031.  
  18032. schedule_node_context &schedule_node_context::operator=(schedule_node_context obj) {
  18033.   std::swap(this->ptr, obj.ptr);
  18034.   return *this;
  18035. }
  18036.  
  18037. isl::ctx schedule_node_context::ctx() const {
  18038.   return isl::ctx(isl_schedule_node_get_ctx(ptr));
  18039. }
  18040.  
  18041. isl::set schedule_node_context::context() const
  18042. {
  18043.   auto res = isl_schedule_node_context_get_context(get());
  18044.   return manage(res);
  18045. }
  18046.  
  18047. isl::set schedule_node_context::get_context() const
  18048. {
  18049.   return context();
  18050. }
  18051.  
  18052. inline std::ostream &operator<<(std::ostream &os, const schedule_node_context &obj)
  18053. {
  18054.   char *str = isl_schedule_node_to_str(obj.get());
  18055.   if (!str) {
  18056.     os.setstate(std::ios_base::badbit);
  18057.     return os;
  18058.   }
  18059.   os << str;
  18060.   free(str);
  18061.   return os;
  18062. }
  18063.  
  18064. // implementations for isl::schedule_node_domain
  18065. schedule_node_domain::schedule_node_domain()
  18066.     : schedule_node() {}
  18067.  
  18068. schedule_node_domain::schedule_node_domain(const schedule_node_domain &obj)
  18069.     : schedule_node(obj)
  18070. {
  18071. }
  18072.  
  18073. schedule_node_domain::schedule_node_domain(__isl_take isl_schedule_node *ptr)
  18074.     : schedule_node(ptr) {}
  18075.  
  18076. schedule_node_domain &schedule_node_domain::operator=(schedule_node_domain obj) {
  18077.   std::swap(this->ptr, obj.ptr);
  18078.   return *this;
  18079. }
  18080.  
  18081. isl::ctx schedule_node_domain::ctx() const {
  18082.   return isl::ctx(isl_schedule_node_get_ctx(ptr));
  18083. }
  18084.  
  18085. isl::union_set schedule_node_domain::domain() const
  18086. {
  18087.   auto res = isl_schedule_node_domain_get_domain(get());
  18088.   return manage(res);
  18089. }
  18090.  
  18091. isl::union_set schedule_node_domain::get_domain() const
  18092. {
  18093.   return domain();
  18094. }
  18095.  
  18096. inline std::ostream &operator<<(std::ostream &os, const schedule_node_domain &obj)
  18097. {
  18098.   char *str = isl_schedule_node_to_str(obj.get());
  18099.   if (!str) {
  18100.     os.setstate(std::ios_base::badbit);
  18101.     return os;
  18102.   }
  18103.   os << str;
  18104.   free(str);
  18105.   return os;
  18106. }
  18107.  
  18108. // implementations for isl::schedule_node_expansion
  18109. schedule_node_expansion::schedule_node_expansion()
  18110.     : schedule_node() {}
  18111.  
  18112. schedule_node_expansion::schedule_node_expansion(const schedule_node_expansion &obj)
  18113.     : schedule_node(obj)
  18114. {
  18115. }
  18116.  
  18117. schedule_node_expansion::schedule_node_expansion(__isl_take isl_schedule_node *ptr)
  18118.     : schedule_node(ptr) {}
  18119.  
  18120. schedule_node_expansion &schedule_node_expansion::operator=(schedule_node_expansion obj) {
  18121.   std::swap(this->ptr, obj.ptr);
  18122.   return *this;
  18123. }
  18124.  
  18125. isl::ctx schedule_node_expansion::ctx() const {
  18126.   return isl::ctx(isl_schedule_node_get_ctx(ptr));
  18127. }
  18128.  
  18129. isl::union_pw_multi_aff schedule_node_expansion::contraction() const
  18130. {
  18131.   auto res = isl_schedule_node_expansion_get_contraction(get());
  18132.   return manage(res);
  18133. }
  18134.  
  18135. isl::union_pw_multi_aff schedule_node_expansion::get_contraction() const
  18136. {
  18137.   return contraction();
  18138. }
  18139.  
  18140. isl::union_map schedule_node_expansion::expansion() const
  18141. {
  18142.   auto res = isl_schedule_node_expansion_get_expansion(get());
  18143.   return manage(res);
  18144. }
  18145.  
  18146. isl::union_map schedule_node_expansion::get_expansion() const
  18147. {
  18148.   return expansion();
  18149. }
  18150.  
  18151. inline std::ostream &operator<<(std::ostream &os, const schedule_node_expansion &obj)
  18152. {
  18153.   char *str = isl_schedule_node_to_str(obj.get());
  18154.   if (!str) {
  18155.     os.setstate(std::ios_base::badbit);
  18156.     return os;
  18157.   }
  18158.   os << str;
  18159.   free(str);
  18160.   return os;
  18161. }
  18162.  
  18163. // implementations for isl::schedule_node_extension
  18164. schedule_node_extension::schedule_node_extension()
  18165.     : schedule_node() {}
  18166.  
  18167. schedule_node_extension::schedule_node_extension(const schedule_node_extension &obj)
  18168.     : schedule_node(obj)
  18169. {
  18170. }
  18171.  
  18172. schedule_node_extension::schedule_node_extension(__isl_take isl_schedule_node *ptr)
  18173.     : schedule_node(ptr) {}
  18174.  
  18175. schedule_node_extension &schedule_node_extension::operator=(schedule_node_extension obj) {
  18176.   std::swap(this->ptr, obj.ptr);
  18177.   return *this;
  18178. }
  18179.  
  18180. isl::ctx schedule_node_extension::ctx() const {
  18181.   return isl::ctx(isl_schedule_node_get_ctx(ptr));
  18182. }
  18183.  
  18184. isl::union_map schedule_node_extension::extension() const
  18185. {
  18186.   auto res = isl_schedule_node_extension_get_extension(get());
  18187.   return manage(res);
  18188. }
  18189.  
  18190. isl::union_map schedule_node_extension::get_extension() const
  18191. {
  18192.   return extension();
  18193. }
  18194.  
  18195. inline std::ostream &operator<<(std::ostream &os, const schedule_node_extension &obj)
  18196. {
  18197.   char *str = isl_schedule_node_to_str(obj.get());
  18198.   if (!str) {
  18199.     os.setstate(std::ios_base::badbit);
  18200.     return os;
  18201.   }
  18202.   os << str;
  18203.   free(str);
  18204.   return os;
  18205. }
  18206.  
  18207. // implementations for isl::schedule_node_filter
  18208. schedule_node_filter::schedule_node_filter()
  18209.     : schedule_node() {}
  18210.  
  18211. schedule_node_filter::schedule_node_filter(const schedule_node_filter &obj)
  18212.     : schedule_node(obj)
  18213. {
  18214. }
  18215.  
  18216. schedule_node_filter::schedule_node_filter(__isl_take isl_schedule_node *ptr)
  18217.     : schedule_node(ptr) {}
  18218.  
  18219. schedule_node_filter &schedule_node_filter::operator=(schedule_node_filter obj) {
  18220.   std::swap(this->ptr, obj.ptr);
  18221.   return *this;
  18222. }
  18223.  
  18224. isl::ctx schedule_node_filter::ctx() const {
  18225.   return isl::ctx(isl_schedule_node_get_ctx(ptr));
  18226. }
  18227.  
  18228. isl::union_set schedule_node_filter::filter() const
  18229. {
  18230.   auto res = isl_schedule_node_filter_get_filter(get());
  18231.   return manage(res);
  18232. }
  18233.  
  18234. isl::union_set schedule_node_filter::get_filter() const
  18235. {
  18236.   return filter();
  18237. }
  18238.  
  18239. inline std::ostream &operator<<(std::ostream &os, const schedule_node_filter &obj)
  18240. {
  18241.   char *str = isl_schedule_node_to_str(obj.get());
  18242.   if (!str) {
  18243.     os.setstate(std::ios_base::badbit);
  18244.     return os;
  18245.   }
  18246.   os << str;
  18247.   free(str);
  18248.   return os;
  18249. }
  18250.  
  18251. // implementations for isl::schedule_node_guard
  18252. schedule_node_guard::schedule_node_guard()
  18253.     : schedule_node() {}
  18254.  
  18255. schedule_node_guard::schedule_node_guard(const schedule_node_guard &obj)
  18256.     : schedule_node(obj)
  18257. {
  18258. }
  18259.  
  18260. schedule_node_guard::schedule_node_guard(__isl_take isl_schedule_node *ptr)
  18261.     : schedule_node(ptr) {}
  18262.  
  18263. schedule_node_guard &schedule_node_guard::operator=(schedule_node_guard obj) {
  18264.   std::swap(this->ptr, obj.ptr);
  18265.   return *this;
  18266. }
  18267.  
  18268. isl::ctx schedule_node_guard::ctx() const {
  18269.   return isl::ctx(isl_schedule_node_get_ctx(ptr));
  18270. }
  18271.  
  18272. isl::set schedule_node_guard::guard() const
  18273. {
  18274.   auto res = isl_schedule_node_guard_get_guard(get());
  18275.   return manage(res);
  18276. }
  18277.  
  18278. isl::set schedule_node_guard::get_guard() const
  18279. {
  18280.   return guard();
  18281. }
  18282.  
  18283. inline std::ostream &operator<<(std::ostream &os, const schedule_node_guard &obj)
  18284. {
  18285.   char *str = isl_schedule_node_to_str(obj.get());
  18286.   if (!str) {
  18287.     os.setstate(std::ios_base::badbit);
  18288.     return os;
  18289.   }
  18290.   os << str;
  18291.   free(str);
  18292.   return os;
  18293. }
  18294.  
  18295. // implementations for isl::schedule_node_leaf
  18296. schedule_node_leaf::schedule_node_leaf()
  18297.     : schedule_node() {}
  18298.  
  18299. schedule_node_leaf::schedule_node_leaf(const schedule_node_leaf &obj)
  18300.     : schedule_node(obj)
  18301. {
  18302. }
  18303.  
  18304. schedule_node_leaf::schedule_node_leaf(__isl_take isl_schedule_node *ptr)
  18305.     : schedule_node(ptr) {}
  18306.  
  18307. schedule_node_leaf &schedule_node_leaf::operator=(schedule_node_leaf obj) {
  18308.   std::swap(this->ptr, obj.ptr);
  18309.   return *this;
  18310. }
  18311.  
  18312. isl::ctx schedule_node_leaf::ctx() const {
  18313.   return isl::ctx(isl_schedule_node_get_ctx(ptr));
  18314. }
  18315.  
  18316. inline std::ostream &operator<<(std::ostream &os, const schedule_node_leaf &obj)
  18317. {
  18318.   char *str = isl_schedule_node_to_str(obj.get());
  18319.   if (!str) {
  18320.     os.setstate(std::ios_base::badbit);
  18321.     return os;
  18322.   }
  18323.   os << str;
  18324.   free(str);
  18325.   return os;
  18326. }
  18327.  
  18328. // implementations for isl::schedule_node_mark
  18329. schedule_node_mark::schedule_node_mark()
  18330.     : schedule_node() {}
  18331.  
  18332. schedule_node_mark::schedule_node_mark(const schedule_node_mark &obj)
  18333.     : schedule_node(obj)
  18334. {
  18335. }
  18336.  
  18337. schedule_node_mark::schedule_node_mark(__isl_take isl_schedule_node *ptr)
  18338.     : schedule_node(ptr) {}
  18339.  
  18340. schedule_node_mark &schedule_node_mark::operator=(schedule_node_mark obj) {
  18341.   std::swap(this->ptr, obj.ptr);
  18342.   return *this;
  18343. }
  18344.  
  18345. isl::ctx schedule_node_mark::ctx() const {
  18346.   return isl::ctx(isl_schedule_node_get_ctx(ptr));
  18347. }
  18348.  
  18349. isl::id schedule_node_mark::id() const
  18350. {
  18351.   auto res = isl_schedule_node_mark_get_id(get());
  18352.   return manage(res);
  18353. }
  18354.  
  18355. isl::id schedule_node_mark::get_id() const
  18356. {
  18357.   return id();
  18358. }
  18359.  
  18360. inline std::ostream &operator<<(std::ostream &os, const schedule_node_mark &obj)
  18361. {
  18362.   char *str = isl_schedule_node_to_str(obj.get());
  18363.   if (!str) {
  18364.     os.setstate(std::ios_base::badbit);
  18365.     return os;
  18366.   }
  18367.   os << str;
  18368.   free(str);
  18369.   return os;
  18370. }
  18371.  
  18372. // implementations for isl::schedule_node_sequence
  18373. schedule_node_sequence::schedule_node_sequence()
  18374.     : schedule_node() {}
  18375.  
  18376. schedule_node_sequence::schedule_node_sequence(const schedule_node_sequence &obj)
  18377.     : schedule_node(obj)
  18378. {
  18379. }
  18380.  
  18381. schedule_node_sequence::schedule_node_sequence(__isl_take isl_schedule_node *ptr)
  18382.     : schedule_node(ptr) {}
  18383.  
  18384. schedule_node_sequence &schedule_node_sequence::operator=(schedule_node_sequence obj) {
  18385.   std::swap(this->ptr, obj.ptr);
  18386.   return *this;
  18387. }
  18388.  
  18389. isl::ctx schedule_node_sequence::ctx() const {
  18390.   return isl::ctx(isl_schedule_node_get_ctx(ptr));
  18391. }
  18392.  
  18393. inline std::ostream &operator<<(std::ostream &os, const schedule_node_sequence &obj)
  18394. {
  18395.   char *str = isl_schedule_node_to_str(obj.get());
  18396.   if (!str) {
  18397.     os.setstate(std::ios_base::badbit);
  18398.     return os;
  18399.   }
  18400.   os << str;
  18401.   free(str);
  18402.   return os;
  18403. }
  18404.  
  18405. // implementations for isl::schedule_node_set
  18406. schedule_node_set::schedule_node_set()
  18407.     : schedule_node() {}
  18408.  
  18409. schedule_node_set::schedule_node_set(const schedule_node_set &obj)
  18410.     : schedule_node(obj)
  18411. {
  18412. }
  18413.  
  18414. schedule_node_set::schedule_node_set(__isl_take isl_schedule_node *ptr)
  18415.     : schedule_node(ptr) {}
  18416.  
  18417. schedule_node_set &schedule_node_set::operator=(schedule_node_set obj) {
  18418.   std::swap(this->ptr, obj.ptr);
  18419.   return *this;
  18420. }
  18421.  
  18422. isl::ctx schedule_node_set::ctx() const {
  18423.   return isl::ctx(isl_schedule_node_get_ctx(ptr));
  18424. }
  18425.  
  18426. inline std::ostream &operator<<(std::ostream &os, const schedule_node_set &obj)
  18427. {
  18428.   char *str = isl_schedule_node_to_str(obj.get());
  18429.   if (!str) {
  18430.     os.setstate(std::ios_base::badbit);
  18431.     return os;
  18432.   }
  18433.   os << str;
  18434.   free(str);
  18435.   return os;
  18436. }
  18437.  
  18438. // implementations for isl::set
  18439. set manage(__isl_take isl_set *ptr) {
  18440.   return set(ptr);
  18441. }
  18442. set manage_copy(__isl_keep isl_set *ptr) {
  18443.   ptr = isl_set_copy(ptr);
  18444.   return set(ptr);
  18445. }
  18446.  
  18447. set::set()
  18448.     : ptr(nullptr) {}
  18449.  
  18450. set::set(const set &obj)
  18451.     : ptr(nullptr)
  18452. {
  18453.   ptr = obj.copy();
  18454. }
  18455.  
  18456. set::set(__isl_take isl_set *ptr)
  18457.     : ptr(ptr) {}
  18458.  
  18459. set::set(isl::basic_set bset)
  18460. {
  18461.   auto res = isl_set_from_basic_set(bset.release());
  18462.   ptr = res;
  18463. }
  18464.  
  18465. set::set(isl::point pnt)
  18466. {
  18467.   auto res = isl_set_from_point(pnt.release());
  18468.   ptr = res;
  18469. }
  18470.  
  18471. set::set(isl::union_set uset)
  18472. {
  18473.   auto res = isl_set_from_union_set(uset.release());
  18474.   ptr = res;
  18475. }
  18476.  
  18477. set::set(isl::ctx ctx, const std::string &str)
  18478. {
  18479.   auto res = isl_set_read_from_str(ctx.release(), str.c_str());
  18480.   ptr = res;
  18481. }
  18482.  
  18483. set &set::operator=(set obj) {
  18484.   std::swap(this->ptr, obj.ptr);
  18485.   return *this;
  18486. }
  18487.  
  18488. set::~set() {
  18489.   if (ptr)
  18490.     isl_set_free(ptr);
  18491. }
  18492.  
  18493. __isl_give isl_set *set::copy() const & {
  18494.   return isl_set_copy(ptr);
  18495. }
  18496.  
  18497. __isl_keep isl_set *set::get() const {
  18498.   return ptr;
  18499. }
  18500.  
  18501. __isl_give isl_set *set::release() {
  18502.   isl_set *tmp = ptr;
  18503.   ptr = nullptr;
  18504.   return tmp;
  18505. }
  18506.  
  18507. bool set::is_null() const {
  18508.   return ptr == nullptr;
  18509. }
  18510.  
  18511. isl::ctx set::ctx() const {
  18512.   return isl::ctx(isl_set_get_ctx(ptr));
  18513. }
  18514.  
  18515. isl::set set::add_constraint(isl::constraint constraint) const
  18516. {
  18517.   auto res = isl_set_add_constraint(copy(), constraint.release());
  18518.   return manage(res);
  18519. }
  18520.  
  18521. isl::set set::add_dims(isl::dim type, unsigned int n) const
  18522. {
  18523.   auto res = isl_set_add_dims(copy(), static_cast<enum isl_dim_type>(type), n);
  18524.   return manage(res);
  18525. }
  18526.  
  18527. isl::basic_set set::affine_hull() const
  18528. {
  18529.   auto res = isl_set_affine_hull(copy());
  18530.   return manage(res);
  18531. }
  18532.  
  18533. isl::set set::align_params(isl::space model) const
  18534. {
  18535.   auto res = isl_set_align_params(copy(), model.release());
  18536.   return manage(res);
  18537. }
  18538.  
  18539. isl::set set::apply(isl::map map) const
  18540. {
  18541.   auto res = isl_set_apply(copy(), map.release());
  18542.   return manage(res);
  18543. }
  18544.  
  18545. isl::union_set set::apply(const isl::union_map &umap) const
  18546. {
  18547.   return isl::union_set(*this).apply(umap);
  18548. }
  18549.  
  18550. isl::set set::apply(const isl::basic_map &map) const
  18551. {
  18552.   return this->apply(isl::map(map));
  18553. }
  18554.  
  18555. isl::pw_multi_aff set::as_pw_multi_aff() const
  18556. {
  18557.   auto res = isl_set_as_pw_multi_aff(copy());
  18558.   return manage(res);
  18559. }
  18560.  
  18561. isl::set set::as_set() const
  18562. {
  18563.   return isl::union_set(*this).as_set();
  18564. }
  18565.  
  18566. isl::basic_set_list set::basic_set_list() const
  18567. {
  18568.   auto res = isl_set_get_basic_set_list(get());
  18569.   return manage(res);
  18570. }
  18571.  
  18572. isl::basic_set_list set::get_basic_set_list() const
  18573. {
  18574.   return basic_set_list();
  18575. }
  18576.  
  18577. isl::set set::bind(isl::multi_id tuple) const
  18578. {
  18579.   auto res = isl_set_bind(copy(), tuple.release());
  18580.   return manage(res);
  18581. }
  18582.  
  18583. isl::set set::coalesce() const
  18584. {
  18585.   auto res = isl_set_coalesce(copy());
  18586.   return manage(res);
  18587. }
  18588.  
  18589. isl::set set::complement() const
  18590. {
  18591.   auto res = isl_set_complement(copy());
  18592.   return manage(res);
  18593. }
  18594.  
  18595. isl::union_set set::compute_divs() const
  18596. {
  18597.   return isl::union_set(*this).compute_divs();
  18598. }
  18599.  
  18600. boolean set::contains(const isl::space &space) const
  18601. {
  18602.   return isl::union_set(*this).contains(space);
  18603. }
  18604.  
  18605. isl::basic_set set::convex_hull() const
  18606. {
  18607.   auto res = isl_set_convex_hull(copy());
  18608.   return manage(res);
  18609. }
  18610.  
  18611. isl::set set::detect_equalities() const
  18612. {
  18613.   auto res = isl_set_detect_equalities(copy());
  18614.   return manage(res);
  18615. }
  18616.  
  18617. class size set::dim(isl::dim type) const
  18618. {
  18619.   auto res = isl_set_dim(get(), static_cast<enum isl_dim_type>(type));
  18620.   return manage(res);
  18621. }
  18622.  
  18623. boolean set::dim_has_any_lower_bound(isl::dim type, unsigned int pos) const
  18624. {
  18625.   auto res = isl_set_dim_has_any_lower_bound(get(), static_cast<enum isl_dim_type>(type), pos);
  18626.   return manage(res);
  18627. }
  18628.  
  18629. isl::id set::dim_id(isl::dim type, unsigned int pos) const
  18630. {
  18631.   auto res = isl_set_get_dim_id(get(), static_cast<enum isl_dim_type>(type), pos);
  18632.   return manage(res);
  18633. }
  18634.  
  18635. isl::id set::get_dim_id(isl::dim type, unsigned int pos) const
  18636. {
  18637.   return dim_id(type, pos);
  18638. }
  18639.  
  18640. isl::pw_aff set::dim_max(int pos) const
  18641. {
  18642.   auto res = isl_set_dim_max(copy(), pos);
  18643.   return manage(res);
  18644. }
  18645.  
  18646. isl::val set::dim_max_val(int pos) const
  18647. {
  18648.   auto res = isl_set_dim_max_val(copy(), pos);
  18649.   return manage(res);
  18650. }
  18651.  
  18652. isl::pw_aff set::dim_min(int pos) const
  18653. {
  18654.   auto res = isl_set_dim_min(copy(), pos);
  18655.   return manage(res);
  18656. }
  18657.  
  18658. isl::val set::dim_min_val(int pos) const
  18659. {
  18660.   auto res = isl_set_dim_min_val(copy(), pos);
  18661.   return manage(res);
  18662. }
  18663.  
  18664. std::string set::dim_name(isl::dim type, unsigned int pos) const
  18665. {
  18666.   auto res = isl_set_get_dim_name(get(), static_cast<enum isl_dim_type>(type), pos);
  18667.   std::string tmp(res);
  18668.   return tmp;
  18669. }
  18670.  
  18671. std::string set::get_dim_name(isl::dim type, unsigned int pos) const
  18672. {
  18673.   return dim_name(type, pos);
  18674. }
  18675.  
  18676. isl::set set::drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const
  18677. {
  18678.   auto res = isl_set_drop_constraints_involving_dims(copy(), static_cast<enum isl_dim_type>(type), first, n);
  18679.   return manage(res);
  18680. }
  18681.  
  18682. isl::set set::eliminate(isl::dim type, unsigned int first, unsigned int n) const
  18683. {
  18684.   auto res = isl_set_eliminate(copy(), static_cast<enum isl_dim_type>(type), first, n);
  18685.   return manage(res);
  18686. }
  18687.  
  18688. isl::set set::empty(isl::space space)
  18689. {
  18690.   auto res = isl_set_empty(space.release());
  18691.   return manage(res);
  18692. }
  18693.  
  18694. boolean set::every_set(const std::function<boolean(isl::set)> &test) const
  18695. {
  18696.   return isl::union_set(*this).every_set(test);
  18697. }
  18698.  
  18699. isl::set set::extract_set(const isl::space &space) const
  18700. {
  18701.   return isl::union_set(*this).extract_set(space);
  18702. }
  18703.  
  18704. int set::find_dim_by_id(isl::dim type, const isl::id &id) const
  18705. {
  18706.   auto res = isl_set_find_dim_by_id(get(), static_cast<enum isl_dim_type>(type), id.get());
  18707.   return res;
  18708. }
  18709.  
  18710. int set::find_dim_by_id(isl::dim type, const std::string &id) const
  18711. {
  18712.   return this->find_dim_by_id(type, isl::id(ctx(), id));
  18713. }
  18714.  
  18715. isl::set set::fix_si(isl::dim type, unsigned int pos, int value) const
  18716. {
  18717.   auto res = isl_set_fix_si(copy(), static_cast<enum isl_dim_type>(type), pos, value);
  18718.   return manage(res);
  18719. }
  18720.  
  18721. isl::set set::flatten() const
  18722. {
  18723.   auto res = isl_set_flatten(copy());
  18724.   return manage(res);
  18725. }
  18726.  
  18727. stat set::foreach_basic_set(const std::function<stat(isl::basic_set)> &fn) const
  18728. {
  18729.   struct fn_data {
  18730.     std::function<stat(isl::basic_set)> func;
  18731.   } fn_data = { fn };
  18732.   auto fn_lambda = [](isl_basic_set *arg_0, void *arg_1) -> isl_stat {
  18733.     auto *data = static_cast<struct fn_data *>(arg_1);
  18734.     auto ret = (data->func)(manage(arg_0));
  18735.     return ret.release();
  18736.   };
  18737.   auto res = isl_set_foreach_basic_set(get(), fn_lambda, &fn_data);
  18738.   return manage(res);
  18739. }
  18740.  
  18741. stat set::foreach_point(const std::function<stat(isl::point)> &fn) const
  18742. {
  18743.   struct fn_data {
  18744.     std::function<stat(isl::point)> func;
  18745.   } fn_data = { fn };
  18746.   auto fn_lambda = [](isl_point *arg_0, void *arg_1) -> isl_stat {
  18747.     auto *data = static_cast<struct fn_data *>(arg_1);
  18748.     auto ret = (data->func)(manage(arg_0));
  18749.     return ret.release();
  18750.   };
  18751.   auto res = isl_set_foreach_point(get(), fn_lambda, &fn_data);
  18752.   return manage(res);
  18753. }
  18754.  
  18755. stat set::foreach_set(const std::function<stat(isl::set)> &fn) const
  18756. {
  18757.   return isl::union_set(*this).foreach_set(fn);
  18758. }
  18759.  
  18760. isl::set set::gist(isl::set context) const
  18761. {
  18762.   auto res = isl_set_gist(copy(), context.release());
  18763.   return manage(res);
  18764. }
  18765.  
  18766. isl::union_set set::gist(const isl::union_set &context) const
  18767. {
  18768.   return isl::union_set(*this).gist(context);
  18769. }
  18770.  
  18771. isl::set set::gist(const isl::basic_set &context) const
  18772. {
  18773.   return this->gist(isl::set(context));
  18774. }
  18775.  
  18776. isl::set set::gist(const isl::point &context) const
  18777. {
  18778.   return this->gist(isl::set(context));
  18779. }
  18780.  
  18781. isl::set set::gist_params(isl::set context) const
  18782. {
  18783.   auto res = isl_set_gist_params(copy(), context.release());
  18784.   return manage(res);
  18785. }
  18786.  
  18787. boolean set::has_equal_space(const isl::set &set2) const
  18788. {
  18789.   auto res = isl_set_has_equal_space(get(), set2.get());
  18790.   return manage(res);
  18791. }
  18792.  
  18793. isl::map set::identity() const
  18794. {
  18795.   auto res = isl_set_identity(copy());
  18796.   return manage(res);
  18797. }
  18798.  
  18799. isl::union_pw_multi_aff set::identity_union_pw_multi_aff() const
  18800. {
  18801.   return isl::union_set(*this).identity_union_pw_multi_aff();
  18802. }
  18803.  
  18804. isl::pw_aff set::indicator_function() const
  18805. {
  18806.   auto res = isl_set_indicator_function(copy());
  18807.   return manage(res);
  18808. }
  18809.  
  18810. isl::set set::insert_dims(isl::dim type, unsigned int pos, unsigned int n) const
  18811. {
  18812.   auto res = isl_set_insert_dims(copy(), static_cast<enum isl_dim_type>(type), pos, n);
  18813.   return manage(res);
  18814. }
  18815.  
  18816. isl::map set::insert_domain(isl::space domain) const
  18817. {
  18818.   auto res = isl_set_insert_domain(copy(), domain.release());
  18819.   return manage(res);
  18820. }
  18821.  
  18822. isl::set set::intersect(isl::set set2) const
  18823. {
  18824.   auto res = isl_set_intersect(copy(), set2.release());
  18825.   return manage(res);
  18826. }
  18827.  
  18828. isl::union_set set::intersect(const isl::union_set &uset2) const
  18829. {
  18830.   return isl::union_set(*this).intersect(uset2);
  18831. }
  18832.  
  18833. isl::set set::intersect(const isl::basic_set &set2) const
  18834. {
  18835.   return this->intersect(isl::set(set2));
  18836. }
  18837.  
  18838. isl::set set::intersect(const isl::point &set2) const
  18839. {
  18840.   return this->intersect(isl::set(set2));
  18841. }
  18842.  
  18843. isl::set set::intersect_params(isl::set params) const
  18844. {
  18845.   auto res = isl_set_intersect_params(copy(), params.release());
  18846.   return manage(res);
  18847. }
  18848.  
  18849. boolean set::involves_dims(isl::dim type, unsigned int first, unsigned int n) const
  18850. {
  18851.   auto res = isl_set_involves_dims(get(), static_cast<enum isl_dim_type>(type), first, n);
  18852.   return manage(res);
  18853. }
  18854.  
  18855. boolean set::involves_locals() const
  18856. {
  18857.   auto res = isl_set_involves_locals(get());
  18858.   return manage(res);
  18859. }
  18860.  
  18861. boolean set::is_bounded() const
  18862. {
  18863.   auto res = isl_set_is_bounded(get());
  18864.   return manage(res);
  18865. }
  18866.  
  18867. boolean set::is_disjoint(const isl::set &set2) const
  18868. {
  18869.   auto res = isl_set_is_disjoint(get(), set2.get());
  18870.   return manage(res);
  18871. }
  18872.  
  18873. boolean set::is_disjoint(const isl::union_set &uset2) const
  18874. {
  18875.   return isl::union_set(*this).is_disjoint(uset2);
  18876. }
  18877.  
  18878. boolean set::is_disjoint(const isl::basic_set &set2) const
  18879. {
  18880.   return this->is_disjoint(isl::set(set2));
  18881. }
  18882.  
  18883. boolean set::is_disjoint(const isl::point &set2) const
  18884. {
  18885.   return this->is_disjoint(isl::set(set2));
  18886. }
  18887.  
  18888. boolean set::is_empty() const
  18889. {
  18890.   auto res = isl_set_is_empty(get());
  18891.   return manage(res);
  18892. }
  18893.  
  18894. boolean set::is_equal(const isl::set &set2) const
  18895. {
  18896.   auto res = isl_set_is_equal(get(), set2.get());
  18897.   return manage(res);
  18898. }
  18899.  
  18900. boolean set::is_equal(const isl::union_set &uset2) const
  18901. {
  18902.   return isl::union_set(*this).is_equal(uset2);
  18903. }
  18904.  
  18905. boolean set::is_equal(const isl::basic_set &set2) const
  18906. {
  18907.   return this->is_equal(isl::set(set2));
  18908. }
  18909.  
  18910. boolean set::is_equal(const isl::point &set2) const
  18911. {
  18912.   return this->is_equal(isl::set(set2));
  18913. }
  18914.  
  18915. boolean set::is_params() const
  18916. {
  18917.   auto res = isl_set_is_params(get());
  18918.   return manage(res);
  18919. }
  18920.  
  18921. boolean set::is_singleton() const
  18922. {
  18923.   auto res = isl_set_is_singleton(get());
  18924.   return manage(res);
  18925. }
  18926.  
  18927. boolean set::is_strict_subset(const isl::set &set2) const
  18928. {
  18929.   auto res = isl_set_is_strict_subset(get(), set2.get());
  18930.   return manage(res);
  18931. }
  18932.  
  18933. boolean set::is_strict_subset(const isl::union_set &uset2) const
  18934. {
  18935.   return isl::union_set(*this).is_strict_subset(uset2);
  18936. }
  18937.  
  18938. boolean set::is_strict_subset(const isl::basic_set &set2) const
  18939. {
  18940.   return this->is_strict_subset(isl::set(set2));
  18941. }
  18942.  
  18943. boolean set::is_strict_subset(const isl::point &set2) const
  18944. {
  18945.   return this->is_strict_subset(isl::set(set2));
  18946. }
  18947.  
  18948. boolean set::is_subset(const isl::set &set2) const
  18949. {
  18950.   auto res = isl_set_is_subset(get(), set2.get());
  18951.   return manage(res);
  18952. }
  18953.  
  18954. boolean set::is_subset(const isl::union_set &uset2) const
  18955. {
  18956.   return isl::union_set(*this).is_subset(uset2);
  18957. }
  18958.  
  18959. boolean set::is_subset(const isl::basic_set &set2) const
  18960. {
  18961.   return this->is_subset(isl::set(set2));
  18962. }
  18963.  
  18964. boolean set::is_subset(const isl::point &set2) const
  18965. {
  18966.   return this->is_subset(isl::set(set2));
  18967. }
  18968.  
  18969. boolean set::is_wrapping() const
  18970. {
  18971.   auto res = isl_set_is_wrapping(get());
  18972.   return manage(res);
  18973. }
  18974.  
  18975. boolean set::isa_set() const
  18976. {
  18977.   return isl::union_set(*this).isa_set();
  18978. }
  18979.  
  18980. isl::set set::lexmax() const
  18981. {
  18982.   auto res = isl_set_lexmax(copy());
  18983.   return manage(res);
  18984. }
  18985.  
  18986. isl::pw_multi_aff set::lexmax_pw_multi_aff() const
  18987. {
  18988.   auto res = isl_set_lexmax_pw_multi_aff(copy());
  18989.   return manage(res);
  18990. }
  18991.  
  18992. isl::set set::lexmin() const
  18993. {
  18994.   auto res = isl_set_lexmin(copy());
  18995.   return manage(res);
  18996. }
  18997.  
  18998. isl::pw_multi_aff set::lexmin_pw_multi_aff() const
  18999. {
  19000.   auto res = isl_set_lexmin_pw_multi_aff(copy());
  19001.   return manage(res);
  19002. }
  19003.  
  19004. isl::set set::lower_bound(isl::multi_pw_aff lower) const
  19005. {
  19006.   auto res = isl_set_lower_bound_multi_pw_aff(copy(), lower.release());
  19007.   return manage(res);
  19008. }
  19009.  
  19010. isl::set set::lower_bound(isl::multi_val lower) const
  19011. {
  19012.   auto res = isl_set_lower_bound_multi_val(copy(), lower.release());
  19013.   return manage(res);
  19014. }
  19015.  
  19016. isl::set set::lower_bound_si(isl::dim type, unsigned int pos, int value) const
  19017. {
  19018.   auto res = isl_set_lower_bound_si(copy(), static_cast<enum isl_dim_type>(type), pos, value);
  19019.   return manage(res);
  19020. }
  19021.  
  19022. isl::set set::lower_bound_val(isl::dim type, unsigned int pos, isl::val value) const
  19023. {
  19024.   auto res = isl_set_lower_bound_val(copy(), static_cast<enum isl_dim_type>(type), pos, value.release());
  19025.   return manage(res);
  19026. }
  19027.  
  19028. isl::set set::lower_bound_val(isl::dim type, unsigned int pos, long value) const
  19029. {
  19030.   return this->lower_bound_val(type, pos, isl::val(ctx(), value));
  19031. }
  19032.  
  19033. isl::multi_pw_aff set::max_multi_pw_aff() const
  19034. {
  19035.   auto res = isl_set_max_multi_pw_aff(copy());
  19036.   return manage(res);
  19037. }
  19038.  
  19039. isl::val set::max_val(const isl::aff &obj) const
  19040. {
  19041.   auto res = isl_set_max_val(get(), obj.get());
  19042.   return manage(res);
  19043. }
  19044.  
  19045. isl::multi_pw_aff set::min_multi_pw_aff() const
  19046. {
  19047.   auto res = isl_set_min_multi_pw_aff(copy());
  19048.   return manage(res);
  19049. }
  19050.  
  19051. isl::val set::min_val(const isl::aff &obj) const
  19052. {
  19053.   auto res = isl_set_min_val(get(), obj.get());
  19054.   return manage(res);
  19055. }
  19056.  
  19057. class size set::n_basic_set() const
  19058. {
  19059.   auto res = isl_set_n_basic_set(get());
  19060.   return manage(res);
  19061. }
  19062.  
  19063. isl::set set::params() const
  19064. {
  19065.   auto res = isl_set_params(copy());
  19066.   return manage(res);
  19067. }
  19068.  
  19069. isl::val set::plain_get_val_if_fixed(isl::dim type, unsigned int pos) const
  19070. {
  19071.   auto res = isl_set_plain_get_val_if_fixed(get(), static_cast<enum isl_dim_type>(type), pos);
  19072.   return manage(res);
  19073. }
  19074.  
  19075. isl::multi_val set::plain_multi_val_if_fixed() const
  19076. {
  19077.   auto res = isl_set_get_plain_multi_val_if_fixed(get());
  19078.   return manage(res);
  19079. }
  19080.  
  19081. isl::multi_val set::get_plain_multi_val_if_fixed() const
  19082. {
  19083.   return plain_multi_val_if_fixed();
  19084. }
  19085.  
  19086. isl::basic_set set::polyhedral_hull() const
  19087. {
  19088.   auto res = isl_set_polyhedral_hull(copy());
  19089.   return manage(res);
  19090. }
  19091.  
  19092. isl::set set::preimage(isl::multi_aff ma) const
  19093. {
  19094.   auto res = isl_set_preimage_multi_aff(copy(), ma.release());
  19095.   return manage(res);
  19096. }
  19097.  
  19098. isl::set set::preimage(isl::multi_pw_aff mpa) const
  19099. {
  19100.   auto res = isl_set_preimage_multi_pw_aff(copy(), mpa.release());
  19101.   return manage(res);
  19102. }
  19103.  
  19104. isl::set set::preimage(isl::pw_multi_aff pma) const
  19105. {
  19106.   auto res = isl_set_preimage_pw_multi_aff(copy(), pma.release());
  19107.   return manage(res);
  19108. }
  19109.  
  19110. isl::union_set set::preimage(const isl::union_pw_multi_aff &upma) const
  19111. {
  19112.   return isl::union_set(*this).preimage(upma);
  19113. }
  19114.  
  19115. isl::set set::product(isl::set set2) const
  19116. {
  19117.   auto res = isl_set_product(copy(), set2.release());
  19118.   return manage(res);
  19119. }
  19120.  
  19121. isl::set set::project_out(isl::dim type, unsigned int first, unsigned int n) const
  19122. {
  19123.   auto res = isl_set_project_out(copy(), static_cast<enum isl_dim_type>(type), first, n);
  19124.   return manage(res);
  19125. }
  19126.  
  19127. isl::set set::project_out_all_params() const
  19128. {
  19129.   auto res = isl_set_project_out_all_params(copy());
  19130.   return manage(res);
  19131. }
  19132.  
  19133. isl::set set::project_out_param(isl::id id) const
  19134. {
  19135.   auto res = isl_set_project_out_param_id(copy(), id.release());
  19136.   return manage(res);
  19137. }
  19138.  
  19139. isl::set set::project_out_param(const std::string &id) const
  19140. {
  19141.   return this->project_out_param(isl::id(ctx(), id));
  19142. }
  19143.  
  19144. isl::set set::project_out_param(isl::id_list list) const
  19145. {
  19146.   auto res = isl_set_project_out_param_id_list(copy(), list.release());
  19147.   return manage(res);
  19148. }
  19149.  
  19150. isl::pw_multi_aff set::pw_multi_aff_on_domain(isl::multi_val mv) const
  19151. {
  19152.   auto res = isl_set_pw_multi_aff_on_domain_multi_val(copy(), mv.release());
  19153.   return manage(res);
  19154. }
  19155.  
  19156. isl::set set::remove_dims(isl::dim type, unsigned int first, unsigned int n) const
  19157. {
  19158.   auto res = isl_set_remove_dims(copy(), static_cast<enum isl_dim_type>(type), first, n);
  19159.   return manage(res);
  19160. }
  19161.  
  19162. isl::set set::remove_divs() const
  19163. {
  19164.   auto res = isl_set_remove_divs(copy());
  19165.   return manage(res);
  19166. }
  19167.  
  19168. isl::set set::remove_redundancies() const
  19169. {
  19170.   auto res = isl_set_remove_redundancies(copy());
  19171.   return manage(res);
  19172. }
  19173.  
  19174. isl::set set::reset_tuple_id() const
  19175. {
  19176.   auto res = isl_set_reset_tuple_id(copy());
  19177.   return manage(res);
  19178. }
  19179.  
  19180. isl::basic_set set::sample() const
  19181. {
  19182.   auto res = isl_set_sample(copy());
  19183.   return manage(res);
  19184. }
  19185.  
  19186. isl::point set::sample_point() const
  19187. {
  19188.   auto res = isl_set_sample_point(copy());
  19189.   return manage(res);
  19190. }
  19191.  
  19192. isl::set set::set_dim_id(isl::dim type, unsigned int pos, isl::id id) const
  19193. {
  19194.   auto res = isl_set_set_dim_id(copy(), static_cast<enum isl_dim_type>(type), pos, id.release());
  19195.   return manage(res);
  19196. }
  19197.  
  19198. isl::set set::set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const
  19199. {
  19200.   return this->set_dim_id(type, pos, isl::id(ctx(), id));
  19201. }
  19202.  
  19203. isl::set_list set::set_list() const
  19204. {
  19205.   return isl::union_set(*this).set_list();
  19206. }
  19207.  
  19208. isl::set set::set_tuple_id(isl::id id) const
  19209. {
  19210.   auto res = isl_set_set_tuple_id(copy(), id.release());
  19211.   return manage(res);
  19212. }
  19213.  
  19214. isl::set set::set_tuple_id(const std::string &id) const
  19215. {
  19216.   return this->set_tuple_id(isl::id(ctx(), id));
  19217. }
  19218.  
  19219. isl::fixed_box set::simple_fixed_box_hull() const
  19220. {
  19221.   auto res = isl_set_get_simple_fixed_box_hull(get());
  19222.   return manage(res);
  19223. }
  19224.  
  19225. isl::fixed_box set::get_simple_fixed_box_hull() const
  19226. {
  19227.   return simple_fixed_box_hull();
  19228. }
  19229.  
  19230. isl::basic_set set::simple_hull() const
  19231. {
  19232.   auto res = isl_set_simple_hull(copy());
  19233.   return manage(res);
  19234. }
  19235.  
  19236. isl::space set::space() const
  19237. {
  19238.   auto res = isl_set_get_space(get());
  19239.   return manage(res);
  19240. }
  19241.  
  19242. isl::space set::get_space() const
  19243. {
  19244.   return space();
  19245. }
  19246.  
  19247. isl::val set::stride(int pos) const
  19248. {
  19249.   auto res = isl_set_get_stride(get(), pos);
  19250.   return manage(res);
  19251. }
  19252.  
  19253. isl::val set::get_stride(int pos) const
  19254. {
  19255.   return stride(pos);
  19256. }
  19257.  
  19258. isl::set set::subtract(isl::set set2) const
  19259. {
  19260.   auto res = isl_set_subtract(copy(), set2.release());
  19261.   return manage(res);
  19262. }
  19263.  
  19264. isl::union_set set::subtract(const isl::union_set &uset2) const
  19265. {
  19266.   return isl::union_set(*this).subtract(uset2);
  19267. }
  19268.  
  19269. isl::set set::subtract(const isl::basic_set &set2) const
  19270. {
  19271.   return this->subtract(isl::set(set2));
  19272. }
  19273.  
  19274. isl::set set::subtract(const isl::point &set2) const
  19275. {
  19276.   return this->subtract(isl::set(set2));
  19277. }
  19278.  
  19279. isl::set_list set::to_list() const
  19280. {
  19281.   auto res = isl_set_to_list(copy());
  19282.   return manage(res);
  19283. }
  19284.  
  19285. isl::union_set set::to_union_set() const
  19286. {
  19287.   auto res = isl_set_to_union_set(copy());
  19288.   return manage(res);
  19289. }
  19290.  
  19291. isl::map set::translation() const
  19292. {
  19293.   auto res = isl_set_translation(copy());
  19294.   return manage(res);
  19295. }
  19296.  
  19297. class size set::tuple_dim() const
  19298. {
  19299.   auto res = isl_set_tuple_dim(get());
  19300.   return manage(res);
  19301. }
  19302.  
  19303. isl::id set::tuple_id() const
  19304. {
  19305.   auto res = isl_set_get_tuple_id(get());
  19306.   return manage(res);
  19307. }
  19308.  
  19309. isl::id set::get_tuple_id() const
  19310. {
  19311.   return tuple_id();
  19312. }
  19313.  
  19314. std::string set::tuple_name() const
  19315. {
  19316.   auto res = isl_set_get_tuple_name(get());
  19317.   std::string tmp(res);
  19318.   return tmp;
  19319. }
  19320.  
  19321. std::string set::get_tuple_name() const
  19322. {
  19323.   return tuple_name();
  19324. }
  19325.  
  19326. isl::set set::unbind_params(isl::multi_id tuple) const
  19327. {
  19328.   auto res = isl_set_unbind_params(copy(), tuple.release());
  19329.   return manage(res);
  19330. }
  19331.  
  19332. isl::map set::unbind_params_insert_domain(isl::multi_id domain) const
  19333. {
  19334.   auto res = isl_set_unbind_params_insert_domain(copy(), domain.release());
  19335.   return manage(res);
  19336. }
  19337.  
  19338. isl::set set::unite(isl::set set2) const
  19339. {
  19340.   auto res = isl_set_union(copy(), set2.release());
  19341.   return manage(res);
  19342. }
  19343.  
  19344. isl::union_set set::unite(const isl::union_set &uset2) const
  19345. {
  19346.   return isl::union_set(*this).unite(uset2);
  19347. }
  19348.  
  19349. isl::set set::unite(const isl::basic_set &set2) const
  19350. {
  19351.   return this->unite(isl::set(set2));
  19352. }
  19353.  
  19354. isl::set set::unite(const isl::point &set2) const
  19355. {
  19356.   return this->unite(isl::set(set2));
  19357. }
  19358.  
  19359. isl::set set::universe(isl::space space)
  19360. {
  19361.   auto res = isl_set_universe(space.release());
  19362.   return manage(res);
  19363. }
  19364.  
  19365. isl::basic_set set::unshifted_simple_hull() const
  19366. {
  19367.   auto res = isl_set_unshifted_simple_hull(copy());
  19368.   return manage(res);
  19369. }
  19370.  
  19371. isl::map set::unwrap() const
  19372. {
  19373.   auto res = isl_set_unwrap(copy());
  19374.   return manage(res);
  19375. }
  19376.  
  19377. isl::set set::upper_bound(isl::multi_pw_aff upper) const
  19378. {
  19379.   auto res = isl_set_upper_bound_multi_pw_aff(copy(), upper.release());
  19380.   return manage(res);
  19381. }
  19382.  
  19383. isl::set set::upper_bound(isl::multi_val upper) const
  19384. {
  19385.   auto res = isl_set_upper_bound_multi_val(copy(), upper.release());
  19386.   return manage(res);
  19387. }
  19388.  
  19389. isl::set set::upper_bound_val(isl::dim type, unsigned int pos, isl::val value) const
  19390. {
  19391.   auto res = isl_set_upper_bound_val(copy(), static_cast<enum isl_dim_type>(type), pos, value.release());
  19392.   return manage(res);
  19393. }
  19394.  
  19395. isl::set set::upper_bound_val(isl::dim type, unsigned int pos, long value) const
  19396. {
  19397.   return this->upper_bound_val(type, pos, isl::val(ctx(), value));
  19398. }
  19399.  
  19400. inline std::ostream &operator<<(std::ostream &os, const set &obj)
  19401. {
  19402.   char *str = isl_set_to_str(obj.get());
  19403.   if (!str) {
  19404.     os.setstate(std::ios_base::badbit);
  19405.     return os;
  19406.   }
  19407.   os << str;
  19408.   free(str);
  19409.   return os;
  19410. }
  19411.  
  19412. // implementations for isl::set_list
  19413. set_list manage(__isl_take isl_set_list *ptr) {
  19414.   return set_list(ptr);
  19415. }
  19416. set_list manage_copy(__isl_keep isl_set_list *ptr) {
  19417.   ptr = isl_set_list_copy(ptr);
  19418.   return set_list(ptr);
  19419. }
  19420.  
  19421. set_list::set_list()
  19422.     : ptr(nullptr) {}
  19423.  
  19424. set_list::set_list(const set_list &obj)
  19425.     : ptr(nullptr)
  19426. {
  19427.   ptr = obj.copy();
  19428. }
  19429.  
  19430. set_list::set_list(__isl_take isl_set_list *ptr)
  19431.     : ptr(ptr) {}
  19432.  
  19433. set_list::set_list(isl::ctx ctx, int n)
  19434. {
  19435.   auto res = isl_set_list_alloc(ctx.release(), n);
  19436.   ptr = res;
  19437. }
  19438.  
  19439. set_list::set_list(isl::set el)
  19440. {
  19441.   auto res = isl_set_list_from_set(el.release());
  19442.   ptr = res;
  19443. }
  19444.  
  19445. set_list::set_list(isl::ctx ctx, const std::string &str)
  19446. {
  19447.   auto res = isl_set_list_read_from_str(ctx.release(), str.c_str());
  19448.   ptr = res;
  19449. }
  19450.  
  19451. set_list &set_list::operator=(set_list obj) {
  19452.   std::swap(this->ptr, obj.ptr);
  19453.   return *this;
  19454. }
  19455.  
  19456. set_list::~set_list() {
  19457.   if (ptr)
  19458.     isl_set_list_free(ptr);
  19459. }
  19460.  
  19461. __isl_give isl_set_list *set_list::copy() const & {
  19462.   return isl_set_list_copy(ptr);
  19463. }
  19464.  
  19465. __isl_keep isl_set_list *set_list::get() const {
  19466.   return ptr;
  19467. }
  19468.  
  19469. __isl_give isl_set_list *set_list::release() {
  19470.   isl_set_list *tmp = ptr;
  19471.   ptr = nullptr;
  19472.   return tmp;
  19473. }
  19474.  
  19475. bool set_list::is_null() const {
  19476.   return ptr == nullptr;
  19477. }
  19478.  
  19479. isl::ctx set_list::ctx() const {
  19480.   return isl::ctx(isl_set_list_get_ctx(ptr));
  19481. }
  19482.  
  19483. isl::set_list set_list::add(isl::set el) const
  19484. {
  19485.   auto res = isl_set_list_add(copy(), el.release());
  19486.   return manage(res);
  19487. }
  19488.  
  19489. isl::set set_list::at(int index) const
  19490. {
  19491.   auto res = isl_set_list_get_at(get(), index);
  19492.   return manage(res);
  19493. }
  19494.  
  19495. isl::set set_list::get_at(int index) const
  19496. {
  19497.   return at(index);
  19498. }
  19499.  
  19500. isl::set_list set_list::clear() const
  19501. {
  19502.   auto res = isl_set_list_clear(copy());
  19503.   return manage(res);
  19504. }
  19505.  
  19506. isl::set_list set_list::concat(isl::set_list list2) const
  19507. {
  19508.   auto res = isl_set_list_concat(copy(), list2.release());
  19509.   return manage(res);
  19510. }
  19511.  
  19512. isl::set_list set_list::drop(unsigned int first, unsigned int n) const
  19513. {
  19514.   auto res = isl_set_list_drop(copy(), first, n);
  19515.   return manage(res);
  19516. }
  19517.  
  19518. stat set_list::foreach(const std::function<stat(isl::set)> &fn) const
  19519. {
  19520.   struct fn_data {
  19521.     std::function<stat(isl::set)> func;
  19522.   } fn_data = { fn };
  19523.   auto fn_lambda = [](isl_set *arg_0, void *arg_1) -> isl_stat {
  19524.     auto *data = static_cast<struct fn_data *>(arg_1);
  19525.     auto ret = (data->func)(manage(arg_0));
  19526.     return ret.release();
  19527.   };
  19528.   auto res = isl_set_list_foreach(get(), fn_lambda, &fn_data);
  19529.   return manage(res);
  19530. }
  19531.  
  19532. isl::set_list set_list::insert(unsigned int pos, isl::set el) const
  19533. {
  19534.   auto res = isl_set_list_insert(copy(), pos, el.release());
  19535.   return manage(res);
  19536. }
  19537.  
  19538. class size set_list::size() const
  19539. {
  19540.   auto res = isl_set_list_size(get());
  19541.   return manage(res);
  19542. }
  19543.  
  19544. inline std::ostream &operator<<(std::ostream &os, const set_list &obj)
  19545. {
  19546.   char *str = isl_set_list_to_str(obj.get());
  19547.   if (!str) {
  19548.     os.setstate(std::ios_base::badbit);
  19549.     return os;
  19550.   }
  19551.   os << str;
  19552.   free(str);
  19553.   return os;
  19554. }
  19555.  
  19556. // implementations for isl::space
  19557. space manage(__isl_take isl_space *ptr) {
  19558.   return space(ptr);
  19559. }
  19560. space manage_copy(__isl_keep isl_space *ptr) {
  19561.   ptr = isl_space_copy(ptr);
  19562.   return space(ptr);
  19563. }
  19564.  
  19565. space::space()
  19566.     : ptr(nullptr) {}
  19567.  
  19568. space::space(const space &obj)
  19569.     : ptr(nullptr)
  19570. {
  19571.   ptr = obj.copy();
  19572. }
  19573.  
  19574. space::space(__isl_take isl_space *ptr)
  19575.     : ptr(ptr) {}
  19576.  
  19577. space::space(isl::ctx ctx, unsigned int nparam, unsigned int n_in, unsigned int n_out)
  19578. {
  19579.   auto res = isl_space_alloc(ctx.release(), nparam, n_in, n_out);
  19580.   ptr = res;
  19581. }
  19582.  
  19583. space::space(isl::ctx ctx, unsigned int nparam, unsigned int dim)
  19584. {
  19585.   auto res = isl_space_set_alloc(ctx.release(), nparam, dim);
  19586.   ptr = res;
  19587. }
  19588.  
  19589. space &space::operator=(space obj) {
  19590.   std::swap(this->ptr, obj.ptr);
  19591.   return *this;
  19592. }
  19593.  
  19594. space::~space() {
  19595.   if (ptr)
  19596.     isl_space_free(ptr);
  19597. }
  19598.  
  19599. __isl_give isl_space *space::copy() const & {
  19600.   return isl_space_copy(ptr);
  19601. }
  19602.  
  19603. __isl_keep isl_space *space::get() const {
  19604.   return ptr;
  19605. }
  19606.  
  19607. __isl_give isl_space *space::release() {
  19608.   isl_space *tmp = ptr;
  19609.   ptr = nullptr;
  19610.   return tmp;
  19611. }
  19612.  
  19613. bool space::is_null() const {
  19614.   return ptr == nullptr;
  19615. }
  19616.  
  19617. isl::ctx space::ctx() const {
  19618.   return isl::ctx(isl_space_get_ctx(ptr));
  19619. }
  19620.  
  19621. isl::space space::add_dims(isl::dim type, unsigned int n) const
  19622. {
  19623.   auto res = isl_space_add_dims(copy(), static_cast<enum isl_dim_type>(type), n);
  19624.   return manage(res);
  19625. }
  19626.  
  19627. isl::space space::add_named_tuple(isl::id tuple_id, unsigned int dim) const
  19628. {
  19629.   auto res = isl_space_add_named_tuple_id_ui(copy(), tuple_id.release(), dim);
  19630.   return manage(res);
  19631. }
  19632.  
  19633. isl::space space::add_named_tuple(const std::string &tuple_id, unsigned int dim) const
  19634. {
  19635.   return this->add_named_tuple(isl::id(ctx(), tuple_id), dim);
  19636. }
  19637.  
  19638. isl::space space::add_param(isl::id id) const
  19639. {
  19640.   auto res = isl_space_add_param_id(copy(), id.release());
  19641.   return manage(res);
  19642. }
  19643.  
  19644. isl::space space::add_param(const std::string &id) const
  19645. {
  19646.   return this->add_param(isl::id(ctx(), id));
  19647. }
  19648.  
  19649. isl::space space::add_unnamed_tuple(unsigned int dim) const
  19650. {
  19651.   auto res = isl_space_add_unnamed_tuple_ui(copy(), dim);
  19652.   return manage(res);
  19653. }
  19654.  
  19655. isl::space space::align_params(isl::space space2) const
  19656. {
  19657.   auto res = isl_space_align_params(copy(), space2.release());
  19658.   return manage(res);
  19659. }
  19660.  
  19661. isl::space space::curry() const
  19662. {
  19663.   auto res = isl_space_curry(copy());
  19664.   return manage(res);
  19665. }
  19666.  
  19667. class size space::dim(isl::dim type) const
  19668. {
  19669.   auto res = isl_space_dim(get(), static_cast<enum isl_dim_type>(type));
  19670.   return manage(res);
  19671. }
  19672.  
  19673. isl::id space::dim_id(isl::dim type, unsigned int pos) const
  19674. {
  19675.   auto res = isl_space_get_dim_id(get(), static_cast<enum isl_dim_type>(type), pos);
  19676.   return manage(res);
  19677. }
  19678.  
  19679. isl::id space::get_dim_id(isl::dim type, unsigned int pos) const
  19680. {
  19681.   return dim_id(type, pos);
  19682. }
  19683.  
  19684. isl::space space::domain() const
  19685. {
  19686.   auto res = isl_space_domain(copy());
  19687.   return manage(res);
  19688. }
  19689.  
  19690. isl::multi_aff space::domain_map_multi_aff() const
  19691. {
  19692.   auto res = isl_space_domain_map_multi_aff(copy());
  19693.   return manage(res);
  19694. }
  19695.  
  19696. isl::pw_multi_aff space::domain_map_pw_multi_aff() const
  19697. {
  19698.   auto res = isl_space_domain_map_pw_multi_aff(copy());
  19699.   return manage(res);
  19700. }
  19701.  
  19702. isl::id space::domain_tuple_id() const
  19703. {
  19704.   auto res = isl_space_get_domain_tuple_id(get());
  19705.   return manage(res);
  19706. }
  19707.  
  19708. isl::id space::get_domain_tuple_id() const
  19709. {
  19710.   return domain_tuple_id();
  19711. }
  19712.  
  19713. isl::space space::drop_dims(isl::dim type, unsigned int first, unsigned int num) const
  19714. {
  19715.   auto res = isl_space_drop_dims(copy(), static_cast<enum isl_dim_type>(type), first, num);
  19716.   return manage(res);
  19717. }
  19718.  
  19719. int space::find_dim_by_id(isl::dim type, const isl::id &id) const
  19720. {
  19721.   auto res = isl_space_find_dim_by_id(get(), static_cast<enum isl_dim_type>(type), id.get());
  19722.   return res;
  19723. }
  19724.  
  19725. int space::find_dim_by_id(isl::dim type, const std::string &id) const
  19726. {
  19727.   return this->find_dim_by_id(type, isl::id(ctx(), id));
  19728. }
  19729.  
  19730. isl::space space::flatten_domain() const
  19731. {
  19732.   auto res = isl_space_flatten_domain(copy());
  19733.   return manage(res);
  19734. }
  19735.  
  19736. isl::space space::flatten_range() const
  19737. {
  19738.   auto res = isl_space_flatten_range(copy());
  19739.   return manage(res);
  19740. }
  19741.  
  19742. boolean space::has_domain_tuple_id() const
  19743. {
  19744.   auto res = isl_space_has_domain_tuple_id(get());
  19745.   return manage(res);
  19746. }
  19747.  
  19748. boolean space::has_equal_tuples(const isl::space &space2) const
  19749. {
  19750.   auto res = isl_space_has_equal_tuples(get(), space2.get());
  19751.   return manage(res);
  19752. }
  19753.  
  19754. boolean space::has_range_tuple_id() const
  19755. {
  19756.   auto res = isl_space_has_range_tuple_id(get());
  19757.   return manage(res);
  19758. }
  19759.  
  19760. boolean space::has_tuple_id(isl::dim type) const
  19761. {
  19762.   auto res = isl_space_has_tuple_id(get(), static_cast<enum isl_dim_type>(type));
  19763.   return manage(res);
  19764. }
  19765.  
  19766. boolean space::has_tuple_name(isl::dim type) const
  19767. {
  19768.   auto res = isl_space_has_tuple_name(get(), static_cast<enum isl_dim_type>(type));
  19769.   return manage(res);
  19770. }
  19771.  
  19772. isl::multi_aff space::identity_multi_aff_on_domain() const
  19773. {
  19774.   auto res = isl_space_identity_multi_aff_on_domain(copy());
  19775.   return manage(res);
  19776. }
  19777.  
  19778. isl::multi_pw_aff space::identity_multi_pw_aff_on_domain() const
  19779. {
  19780.   auto res = isl_space_identity_multi_pw_aff_on_domain(copy());
  19781.   return manage(res);
  19782. }
  19783.  
  19784. isl::pw_multi_aff space::identity_pw_multi_aff_on_domain() const
  19785. {
  19786.   auto res = isl_space_identity_pw_multi_aff_on_domain(copy());
  19787.   return manage(res);
  19788. }
  19789.  
  19790. boolean space::is_equal(const isl::space &space2) const
  19791. {
  19792.   auto res = isl_space_is_equal(get(), space2.get());
  19793.   return manage(res);
  19794. }
  19795.  
  19796. boolean space::is_params() const
  19797. {
  19798.   auto res = isl_space_is_params(get());
  19799.   return manage(res);
  19800. }
  19801.  
  19802. boolean space::is_set() const
  19803. {
  19804.   auto res = isl_space_is_set(get());
  19805.   return manage(res);
  19806. }
  19807.  
  19808. boolean space::is_wrapping() const
  19809. {
  19810.   auto res = isl_space_is_wrapping(get());
  19811.   return manage(res);
  19812. }
  19813.  
  19814. isl::space space::map_from_domain_and_range(isl::space range) const
  19815. {
  19816.   auto res = isl_space_map_from_domain_and_range(copy(), range.release());
  19817.   return manage(res);
  19818. }
  19819.  
  19820. isl::space space::map_from_set() const
  19821. {
  19822.   auto res = isl_space_map_from_set(copy());
  19823.   return manage(res);
  19824. }
  19825.  
  19826. isl::multi_aff space::multi_aff(isl::aff_list list) const
  19827. {
  19828.   auto res = isl_space_multi_aff(copy(), list.release());
  19829.   return manage(res);
  19830. }
  19831.  
  19832. isl::multi_aff space::multi_aff_on_domain(isl::multi_val mv) const
  19833. {
  19834.   auto res = isl_space_multi_aff_on_domain_multi_val(copy(), mv.release());
  19835.   return manage(res);
  19836. }
  19837.  
  19838. isl::multi_id space::multi_id(isl::id_list list) const
  19839. {
  19840.   auto res = isl_space_multi_id(copy(), list.release());
  19841.   return manage(res);
  19842. }
  19843.  
  19844. isl::multi_pw_aff space::multi_pw_aff(isl::pw_aff_list list) const
  19845. {
  19846.   auto res = isl_space_multi_pw_aff(copy(), list.release());
  19847.   return manage(res);
  19848. }
  19849.  
  19850. isl::multi_union_pw_aff space::multi_union_pw_aff(isl::union_pw_aff_list list) const
  19851. {
  19852.   auto res = isl_space_multi_union_pw_aff(copy(), list.release());
  19853.   return manage(res);
  19854. }
  19855.  
  19856. isl::multi_val space::multi_val(isl::val_list list) const
  19857. {
  19858.   auto res = isl_space_multi_val(copy(), list.release());
  19859.   return manage(res);
  19860. }
  19861.  
  19862. isl::aff space::param_aff_on_domain(isl::id id) const
  19863. {
  19864.   auto res = isl_space_param_aff_on_domain_id(copy(), id.release());
  19865.   return manage(res);
  19866. }
  19867.  
  19868. isl::aff space::param_aff_on_domain(const std::string &id) const
  19869. {
  19870.   return this->param_aff_on_domain(isl::id(ctx(), id));
  19871. }
  19872.  
  19873. isl::space space::params() const
  19874. {
  19875.   auto res = isl_space_params(copy());
  19876.   return manage(res);
  19877. }
  19878.  
  19879. isl::space space::params_alloc(isl::ctx ctx, unsigned int nparam)
  19880. {
  19881.   auto res = isl_space_params_alloc(ctx.release(), nparam);
  19882.   return manage(res);
  19883. }
  19884.  
  19885. isl::space space::product(isl::space right) const
  19886. {
  19887.   auto res = isl_space_product(copy(), right.release());
  19888.   return manage(res);
  19889. }
  19890.  
  19891. isl::space space::range() const
  19892. {
  19893.   auto res = isl_space_range(copy());
  19894.   return manage(res);
  19895. }
  19896.  
  19897. isl::multi_aff space::range_map_multi_aff() const
  19898. {
  19899.   auto res = isl_space_range_map_multi_aff(copy());
  19900.   return manage(res);
  19901. }
  19902.  
  19903. isl::pw_multi_aff space::range_map_pw_multi_aff() const
  19904. {
  19905.   auto res = isl_space_range_map_pw_multi_aff(copy());
  19906.   return manage(res);
  19907. }
  19908.  
  19909. isl::space space::range_reverse() const
  19910. {
  19911.   auto res = isl_space_range_reverse(copy());
  19912.   return manage(res);
  19913. }
  19914.  
  19915. isl::id space::range_tuple_id() const
  19916. {
  19917.   auto res = isl_space_get_range_tuple_id(get());
  19918.   return manage(res);
  19919. }
  19920.  
  19921. isl::id space::get_range_tuple_id() const
  19922. {
  19923.   return range_tuple_id();
  19924. }
  19925.  
  19926. isl::space space::reverse() const
  19927. {
  19928.   auto res = isl_space_reverse(copy());
  19929.   return manage(res);
  19930. }
  19931.  
  19932. isl::space space::set_dim_id(isl::dim type, unsigned int pos, isl::id id) const
  19933. {
  19934.   auto res = isl_space_set_dim_id(copy(), static_cast<enum isl_dim_type>(type), pos, id.release());
  19935.   return manage(res);
  19936. }
  19937.  
  19938. isl::space space::set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const
  19939. {
  19940.   return this->set_dim_id(type, pos, isl::id(ctx(), id));
  19941. }
  19942.  
  19943. isl::space space::set_domain_tuple(isl::id id) const
  19944. {
  19945.   auto res = isl_space_set_domain_tuple_id(copy(), id.release());
  19946.   return manage(res);
  19947. }
  19948.  
  19949. isl::space space::set_domain_tuple(const std::string &id) const
  19950. {
  19951.   return this->set_domain_tuple(isl::id(ctx(), id));
  19952. }
  19953.  
  19954. isl::space space::set_from_params() const
  19955. {
  19956.   auto res = isl_space_set_from_params(copy());
  19957.   return manage(res);
  19958. }
  19959.  
  19960. isl::space space::set_range_tuple(isl::id id) const
  19961. {
  19962.   auto res = isl_space_set_range_tuple_id(copy(), id.release());
  19963.   return manage(res);
  19964. }
  19965.  
  19966. isl::space space::set_range_tuple(const std::string &id) const
  19967. {
  19968.   return this->set_range_tuple(isl::id(ctx(), id));
  19969. }
  19970.  
  19971. isl::space space::set_tuple_id(isl::dim type, isl::id id) const
  19972. {
  19973.   auto res = isl_space_set_tuple_id(copy(), static_cast<enum isl_dim_type>(type), id.release());
  19974.   return manage(res);
  19975. }
  19976.  
  19977. isl::space space::set_tuple_id(isl::dim type, const std::string &id) const
  19978. {
  19979.   return this->set_tuple_id(type, isl::id(ctx(), id));
  19980. }
  19981.  
  19982. isl::id space::tuple_id(isl::dim type) const
  19983. {
  19984.   auto res = isl_space_get_tuple_id(get(), static_cast<enum isl_dim_type>(type));
  19985.   return manage(res);
  19986. }
  19987.  
  19988. isl::id space::get_tuple_id(isl::dim type) const
  19989. {
  19990.   return tuple_id(type);
  19991. }
  19992.  
  19993. std::string space::tuple_name(isl::dim type) const
  19994. {
  19995.   auto res = isl_space_get_tuple_name(get(), static_cast<enum isl_dim_type>(type));
  19996.   std::string tmp(res);
  19997.   return tmp;
  19998. }
  19999.  
  20000. std::string space::get_tuple_name(isl::dim type) const
  20001. {
  20002.   return tuple_name(type);
  20003. }
  20004.  
  20005. isl::space space::uncurry() const
  20006. {
  20007.   auto res = isl_space_uncurry(copy());
  20008.   return manage(res);
  20009. }
  20010.  
  20011. isl::space space::unit(isl::ctx ctx)
  20012. {
  20013.   auto res = isl_space_unit(ctx.release());
  20014.   return manage(res);
  20015. }
  20016.  
  20017. isl::map space::universe_map() const
  20018. {
  20019.   auto res = isl_space_universe_map(copy());
  20020.   return manage(res);
  20021. }
  20022.  
  20023. isl::set space::universe_set() const
  20024. {
  20025.   auto res = isl_space_universe_set(copy());
  20026.   return manage(res);
  20027. }
  20028.  
  20029. isl::space space::unwrap() const
  20030. {
  20031.   auto res = isl_space_unwrap(copy());
  20032.   return manage(res);
  20033. }
  20034.  
  20035. isl::space space::wrap() const
  20036. {
  20037.   auto res = isl_space_wrap(copy());
  20038.   return manage(res);
  20039. }
  20040.  
  20041. isl::aff space::zero_aff_on_domain() const
  20042. {
  20043.   auto res = isl_space_zero_aff_on_domain(copy());
  20044.   return manage(res);
  20045. }
  20046.  
  20047. isl::multi_aff space::zero_multi_aff() const
  20048. {
  20049.   auto res = isl_space_zero_multi_aff(copy());
  20050.   return manage(res);
  20051. }
  20052.  
  20053. isl::multi_pw_aff space::zero_multi_pw_aff() const
  20054. {
  20055.   auto res = isl_space_zero_multi_pw_aff(copy());
  20056.   return manage(res);
  20057. }
  20058.  
  20059. isl::multi_union_pw_aff space::zero_multi_union_pw_aff() const
  20060. {
  20061.   auto res = isl_space_zero_multi_union_pw_aff(copy());
  20062.   return manage(res);
  20063. }
  20064.  
  20065. isl::multi_val space::zero_multi_val() const
  20066. {
  20067.   auto res = isl_space_zero_multi_val(copy());
  20068.   return manage(res);
  20069. }
  20070.  
  20071. inline std::ostream &operator<<(std::ostream &os, const space &obj)
  20072. {
  20073.   char *str = isl_space_to_str(obj.get());
  20074.   if (!str) {
  20075.     os.setstate(std::ios_base::badbit);
  20076.     return os;
  20077.   }
  20078.   os << str;
  20079.   free(str);
  20080.   return os;
  20081. }
  20082.  
  20083. // implementations for isl::union_access_info
  20084. union_access_info manage(__isl_take isl_union_access_info *ptr) {
  20085.   return union_access_info(ptr);
  20086. }
  20087. union_access_info manage_copy(__isl_keep isl_union_access_info *ptr) {
  20088.   ptr = isl_union_access_info_copy(ptr);
  20089.   return union_access_info(ptr);
  20090. }
  20091.  
  20092. union_access_info::union_access_info()
  20093.     : ptr(nullptr) {}
  20094.  
  20095. union_access_info::union_access_info(const union_access_info &obj)
  20096.     : ptr(nullptr)
  20097. {
  20098.   ptr = obj.copy();
  20099. }
  20100.  
  20101. union_access_info::union_access_info(__isl_take isl_union_access_info *ptr)
  20102.     : ptr(ptr) {}
  20103.  
  20104. union_access_info::union_access_info(isl::union_map sink)
  20105. {
  20106.   auto res = isl_union_access_info_from_sink(sink.release());
  20107.   ptr = res;
  20108. }
  20109.  
  20110. union_access_info &union_access_info::operator=(union_access_info obj) {
  20111.   std::swap(this->ptr, obj.ptr);
  20112.   return *this;
  20113. }
  20114.  
  20115. union_access_info::~union_access_info() {
  20116.   if (ptr)
  20117.     isl_union_access_info_free(ptr);
  20118. }
  20119.  
  20120. __isl_give isl_union_access_info *union_access_info::copy() const & {
  20121.   return isl_union_access_info_copy(ptr);
  20122. }
  20123.  
  20124. __isl_keep isl_union_access_info *union_access_info::get() const {
  20125.   return ptr;
  20126. }
  20127.  
  20128. __isl_give isl_union_access_info *union_access_info::release() {
  20129.   isl_union_access_info *tmp = ptr;
  20130.   ptr = nullptr;
  20131.   return tmp;
  20132. }
  20133.  
  20134. bool union_access_info::is_null() const {
  20135.   return ptr == nullptr;
  20136. }
  20137.  
  20138. isl::ctx union_access_info::ctx() const {
  20139.   return isl::ctx(isl_union_access_info_get_ctx(ptr));
  20140. }
  20141.  
  20142. isl::union_flow union_access_info::compute_flow() const
  20143. {
  20144.   auto res = isl_union_access_info_compute_flow(copy());
  20145.   return manage(res);
  20146. }
  20147.  
  20148. isl::union_access_info union_access_info::set_kill(isl::union_map kill) const
  20149. {
  20150.   auto res = isl_union_access_info_set_kill(copy(), kill.release());
  20151.   return manage(res);
  20152. }
  20153.  
  20154. isl::union_access_info union_access_info::set_may_source(isl::union_map may_source) const
  20155. {
  20156.   auto res = isl_union_access_info_set_may_source(copy(), may_source.release());
  20157.   return manage(res);
  20158. }
  20159.  
  20160. isl::union_access_info union_access_info::set_must_source(isl::union_map must_source) const
  20161. {
  20162.   auto res = isl_union_access_info_set_must_source(copy(), must_source.release());
  20163.   return manage(res);
  20164. }
  20165.  
  20166. isl::union_access_info union_access_info::set_schedule(isl::schedule schedule) const
  20167. {
  20168.   auto res = isl_union_access_info_set_schedule(copy(), schedule.release());
  20169.   return manage(res);
  20170. }
  20171.  
  20172. isl::union_access_info union_access_info::set_schedule_map(isl::union_map schedule_map) const
  20173. {
  20174.   auto res = isl_union_access_info_set_schedule_map(copy(), schedule_map.release());
  20175.   return manage(res);
  20176. }
  20177.  
  20178. inline std::ostream &operator<<(std::ostream &os, const union_access_info &obj)
  20179. {
  20180.   char *str = isl_union_access_info_to_str(obj.get());
  20181.   if (!str) {
  20182.     os.setstate(std::ios_base::badbit);
  20183.     return os;
  20184.   }
  20185.   os << str;
  20186.   free(str);
  20187.   return os;
  20188. }
  20189.  
  20190. // implementations for isl::union_flow
  20191. union_flow manage(__isl_take isl_union_flow *ptr) {
  20192.   return union_flow(ptr);
  20193. }
  20194. union_flow manage_copy(__isl_keep isl_union_flow *ptr) {
  20195.   ptr = isl_union_flow_copy(ptr);
  20196.   return union_flow(ptr);
  20197. }
  20198.  
  20199. union_flow::union_flow()
  20200.     : ptr(nullptr) {}
  20201.  
  20202. union_flow::union_flow(const union_flow &obj)
  20203.     : ptr(nullptr)
  20204. {
  20205.   ptr = obj.copy();
  20206. }
  20207.  
  20208. union_flow::union_flow(__isl_take isl_union_flow *ptr)
  20209.     : ptr(ptr) {}
  20210.  
  20211. union_flow &union_flow::operator=(union_flow obj) {
  20212.   std::swap(this->ptr, obj.ptr);
  20213.   return *this;
  20214. }
  20215.  
  20216. union_flow::~union_flow() {
  20217.   if (ptr)
  20218.     isl_union_flow_free(ptr);
  20219. }
  20220.  
  20221. __isl_give isl_union_flow *union_flow::copy() const & {
  20222.   return isl_union_flow_copy(ptr);
  20223. }
  20224.  
  20225. __isl_keep isl_union_flow *union_flow::get() const {
  20226.   return ptr;
  20227. }
  20228.  
  20229. __isl_give isl_union_flow *union_flow::release() {
  20230.   isl_union_flow *tmp = ptr;
  20231.   ptr = nullptr;
  20232.   return tmp;
  20233. }
  20234.  
  20235. bool union_flow::is_null() const {
  20236.   return ptr == nullptr;
  20237. }
  20238.  
  20239. isl::ctx union_flow::ctx() const {
  20240.   return isl::ctx(isl_union_flow_get_ctx(ptr));
  20241. }
  20242.  
  20243. isl::union_map union_flow::full_may_dependence() const
  20244. {
  20245.   auto res = isl_union_flow_get_full_may_dependence(get());
  20246.   return manage(res);
  20247. }
  20248.  
  20249. isl::union_map union_flow::get_full_may_dependence() const
  20250. {
  20251.   return full_may_dependence();
  20252. }
  20253.  
  20254. isl::union_map union_flow::full_must_dependence() const
  20255. {
  20256.   auto res = isl_union_flow_get_full_must_dependence(get());
  20257.   return manage(res);
  20258. }
  20259.  
  20260. isl::union_map union_flow::get_full_must_dependence() const
  20261. {
  20262.   return full_must_dependence();
  20263. }
  20264.  
  20265. isl::union_map union_flow::may_dependence() const
  20266. {
  20267.   auto res = isl_union_flow_get_may_dependence(get());
  20268.   return manage(res);
  20269. }
  20270.  
  20271. isl::union_map union_flow::get_may_dependence() const
  20272. {
  20273.   return may_dependence();
  20274. }
  20275.  
  20276. isl::union_map union_flow::may_no_source() const
  20277. {
  20278.   auto res = isl_union_flow_get_may_no_source(get());
  20279.   return manage(res);
  20280. }
  20281.  
  20282. isl::union_map union_flow::get_may_no_source() const
  20283. {
  20284.   return may_no_source();
  20285. }
  20286.  
  20287. isl::union_map union_flow::must_dependence() const
  20288. {
  20289.   auto res = isl_union_flow_get_must_dependence(get());
  20290.   return manage(res);
  20291. }
  20292.  
  20293. isl::union_map union_flow::get_must_dependence() const
  20294. {
  20295.   return must_dependence();
  20296. }
  20297.  
  20298. isl::union_map union_flow::must_no_source() const
  20299. {
  20300.   auto res = isl_union_flow_get_must_no_source(get());
  20301.   return manage(res);
  20302. }
  20303.  
  20304. isl::union_map union_flow::get_must_no_source() const
  20305. {
  20306.   return must_no_source();
  20307. }
  20308.  
  20309. inline std::ostream &operator<<(std::ostream &os, const union_flow &obj)
  20310. {
  20311.   char *str = isl_union_flow_to_str(obj.get());
  20312.   if (!str) {
  20313.     os.setstate(std::ios_base::badbit);
  20314.     return os;
  20315.   }
  20316.   os << str;
  20317.   free(str);
  20318.   return os;
  20319. }
  20320.  
  20321. // implementations for isl::union_map
  20322. union_map manage(__isl_take isl_union_map *ptr) {
  20323.   return union_map(ptr);
  20324. }
  20325. union_map manage_copy(__isl_keep isl_union_map *ptr) {
  20326.   ptr = isl_union_map_copy(ptr);
  20327.   return union_map(ptr);
  20328. }
  20329.  
  20330. union_map::union_map()
  20331.     : ptr(nullptr) {}
  20332.  
  20333. union_map::union_map(const union_map &obj)
  20334.     : ptr(nullptr)
  20335. {
  20336.   ptr = obj.copy();
  20337. }
  20338.  
  20339. union_map::union_map(__isl_take isl_union_map *ptr)
  20340.     : ptr(ptr) {}
  20341.  
  20342. union_map::union_map(isl::basic_map bmap)
  20343. {
  20344.   auto res = isl_union_map_from_basic_map(bmap.release());
  20345.   ptr = res;
  20346. }
  20347.  
  20348. union_map::union_map(isl::map map)
  20349. {
  20350.   auto res = isl_union_map_from_map(map.release());
  20351.   ptr = res;
  20352. }
  20353.  
  20354. union_map::union_map(isl::ctx ctx, const std::string &str)
  20355. {
  20356.   auto res = isl_union_map_read_from_str(ctx.release(), str.c_str());
  20357.   ptr = res;
  20358. }
  20359.  
  20360. union_map &union_map::operator=(union_map obj) {
  20361.   std::swap(this->ptr, obj.ptr);
  20362.   return *this;
  20363. }
  20364.  
  20365. union_map::~union_map() {
  20366.   if (ptr)
  20367.     isl_union_map_free(ptr);
  20368. }
  20369.  
  20370. __isl_give isl_union_map *union_map::copy() const & {
  20371.   return isl_union_map_copy(ptr);
  20372. }
  20373.  
  20374. __isl_keep isl_union_map *union_map::get() const {
  20375.   return ptr;
  20376. }
  20377.  
  20378. __isl_give isl_union_map *union_map::release() {
  20379.   isl_union_map *tmp = ptr;
  20380.   ptr = nullptr;
  20381.   return tmp;
  20382. }
  20383.  
  20384. bool union_map::is_null() const {
  20385.   return ptr == nullptr;
  20386. }
  20387.  
  20388. isl::ctx union_map::ctx() const {
  20389.   return isl::ctx(isl_union_map_get_ctx(ptr));
  20390. }
  20391.  
  20392. isl::union_map union_map::affine_hull() const
  20393. {
  20394.   auto res = isl_union_map_affine_hull(copy());
  20395.   return manage(res);
  20396. }
  20397.  
  20398. isl::union_map union_map::apply_domain(isl::union_map umap2) const
  20399. {
  20400.   auto res = isl_union_map_apply_domain(copy(), umap2.release());
  20401.   return manage(res);
  20402. }
  20403.  
  20404. isl::union_map union_map::apply_range(isl::union_map umap2) const
  20405. {
  20406.   auto res = isl_union_map_apply_range(copy(), umap2.release());
  20407.   return manage(res);
  20408. }
  20409.  
  20410. isl::map union_map::as_map() const
  20411. {
  20412.   auto res = isl_union_map_as_map(copy());
  20413.   return manage(res);
  20414. }
  20415.  
  20416. isl::multi_union_pw_aff union_map::as_multi_union_pw_aff() const
  20417. {
  20418.   auto res = isl_union_map_as_multi_union_pw_aff(copy());
  20419.   return manage(res);
  20420. }
  20421.  
  20422. isl::union_pw_multi_aff union_map::as_union_pw_multi_aff() const
  20423. {
  20424.   auto res = isl_union_map_as_union_pw_multi_aff(copy());
  20425.   return manage(res);
  20426. }
  20427.  
  20428. isl::union_set union_map::bind_range(isl::multi_id tuple) const
  20429. {
  20430.   auto res = isl_union_map_bind_range(copy(), tuple.release());
  20431.   return manage(res);
  20432. }
  20433.  
  20434. isl::union_map union_map::coalesce() const
  20435. {
  20436.   auto res = isl_union_map_coalesce(copy());
  20437.   return manage(res);
  20438. }
  20439.  
  20440. isl::union_map union_map::compute_divs() const
  20441. {
  20442.   auto res = isl_union_map_compute_divs(copy());
  20443.   return manage(res);
  20444. }
  20445.  
  20446. isl::union_map union_map::curry() const
  20447. {
  20448.   auto res = isl_union_map_curry(copy());
  20449.   return manage(res);
  20450. }
  20451.  
  20452. isl::union_set union_map::deltas() const
  20453. {
  20454.   auto res = isl_union_map_deltas(copy());
  20455.   return manage(res);
  20456. }
  20457.  
  20458. isl::union_map union_map::detect_equalities() const
  20459. {
  20460.   auto res = isl_union_map_detect_equalities(copy());
  20461.   return manage(res);
  20462. }
  20463.  
  20464. isl::union_set union_map::domain() const
  20465. {
  20466.   auto res = isl_union_map_domain(copy());
  20467.   return manage(res);
  20468. }
  20469.  
  20470. isl::union_map union_map::domain_factor_domain() const
  20471. {
  20472.   auto res = isl_union_map_domain_factor_domain(copy());
  20473.   return manage(res);
  20474. }
  20475.  
  20476. isl::union_map union_map::domain_factor_range() const
  20477. {
  20478.   auto res = isl_union_map_domain_factor_range(copy());
  20479.   return manage(res);
  20480. }
  20481.  
  20482. isl::union_map union_map::domain_map() const
  20483. {
  20484.   auto res = isl_union_map_domain_map(copy());
  20485.   return manage(res);
  20486. }
  20487.  
  20488. isl::union_pw_multi_aff union_map::domain_map_union_pw_multi_aff() const
  20489. {
  20490.   auto res = isl_union_map_domain_map_union_pw_multi_aff(copy());
  20491.   return manage(res);
  20492. }
  20493.  
  20494. isl::union_map union_map::domain_product(isl::union_map umap2) const
  20495. {
  20496.   auto res = isl_union_map_domain_product(copy(), umap2.release());
  20497.   return manage(res);
  20498. }
  20499.  
  20500. isl::union_map union_map::empty(isl::ctx ctx)
  20501. {
  20502.   auto res = isl_union_map_empty_ctx(ctx.release());
  20503.   return manage(res);
  20504. }
  20505.  
  20506. isl::union_map union_map::eq_at(isl::multi_union_pw_aff mupa) const
  20507. {
  20508.   auto res = isl_union_map_eq_at_multi_union_pw_aff(copy(), mupa.release());
  20509.   return manage(res);
  20510. }
  20511.  
  20512. boolean union_map::every_map(const std::function<boolean(isl::map)> &test) const
  20513. {
  20514.   struct test_data {
  20515.     std::function<boolean(isl::map)> func;
  20516.   } test_data = { test };
  20517.   auto test_lambda = [](isl_map *arg_0, void *arg_1) -> isl_bool {
  20518.     auto *data = static_cast<struct test_data *>(arg_1);
  20519.     auto ret = (data->func)(manage_copy(arg_0));
  20520.     return ret.release();
  20521.   };
  20522.   auto res = isl_union_map_every_map(get(), test_lambda, &test_data);
  20523.   return manage(res);
  20524. }
  20525.  
  20526. isl::map union_map::extract_map(isl::space space) const
  20527. {
  20528.   auto res = isl_union_map_extract_map(get(), space.release());
  20529.   return manage(res);
  20530. }
  20531.  
  20532. isl::union_map union_map::factor_domain() const
  20533. {
  20534.   auto res = isl_union_map_factor_domain(copy());
  20535.   return manage(res);
  20536. }
  20537.  
  20538. isl::union_map union_map::factor_range() const
  20539. {
  20540.   auto res = isl_union_map_factor_range(copy());
  20541.   return manage(res);
  20542. }
  20543.  
  20544. isl::union_map union_map::fixed_power(isl::val exp) const
  20545. {
  20546.   auto res = isl_union_map_fixed_power_val(copy(), exp.release());
  20547.   return manage(res);
  20548. }
  20549.  
  20550. isl::union_map union_map::fixed_power(long exp) const
  20551. {
  20552.   return this->fixed_power(isl::val(ctx(), exp));
  20553. }
  20554.  
  20555. isl::union_map union_map::flat_range_product(isl::union_map umap2) const
  20556. {
  20557.   auto res = isl_union_map_flat_range_product(copy(), umap2.release());
  20558.   return manage(res);
  20559. }
  20560.  
  20561. stat union_map::foreach_map(const std::function<stat(isl::map)> &fn) const
  20562. {
  20563.   struct fn_data {
  20564.     std::function<stat(isl::map)> func;
  20565.   } fn_data = { fn };
  20566.   auto fn_lambda = [](isl_map *arg_0, void *arg_1) -> isl_stat {
  20567.     auto *data = static_cast<struct fn_data *>(arg_1);
  20568.     auto ret = (data->func)(manage(arg_0));
  20569.     return ret.release();
  20570.   };
  20571.   auto res = isl_union_map_foreach_map(get(), fn_lambda, &fn_data);
  20572.   return manage(res);
  20573. }
  20574.  
  20575. isl::union_map union_map::from(isl::multi_union_pw_aff mupa)
  20576. {
  20577.   auto res = isl_union_map_from_multi_union_pw_aff(mupa.release());
  20578.   return manage(res);
  20579. }
  20580.  
  20581. isl::union_map union_map::from(isl::union_pw_multi_aff upma)
  20582. {
  20583.   auto res = isl_union_map_from_union_pw_multi_aff(upma.release());
  20584.   return manage(res);
  20585. }
  20586.  
  20587. isl::union_map union_map::from_domain(isl::union_set uset)
  20588. {
  20589.   auto res = isl_union_map_from_domain(uset.release());
  20590.   return manage(res);
  20591. }
  20592.  
  20593. isl::union_map union_map::from_domain_and_range(isl::union_set domain, isl::union_set range)
  20594. {
  20595.   auto res = isl_union_map_from_domain_and_range(domain.release(), range.release());
  20596.   return manage(res);
  20597. }
  20598.  
  20599. isl::union_map union_map::from_range(isl::union_set uset)
  20600. {
  20601.   auto res = isl_union_map_from_range(uset.release());
  20602.   return manage(res);
  20603. }
  20604.  
  20605. isl::union_map union_map::gist(isl::union_map context) const
  20606. {
  20607.   auto res = isl_union_map_gist(copy(), context.release());
  20608.   return manage(res);
  20609. }
  20610.  
  20611. isl::union_map union_map::gist_domain(isl::union_set uset) const
  20612. {
  20613.   auto res = isl_union_map_gist_domain(copy(), uset.release());
  20614.   return manage(res);
  20615. }
  20616.  
  20617. isl::union_map union_map::gist_params(isl::set set) const
  20618. {
  20619.   auto res = isl_union_map_gist_params(copy(), set.release());
  20620.   return manage(res);
  20621. }
  20622.  
  20623. isl::union_map union_map::gist_range(isl::union_set uset) const
  20624. {
  20625.   auto res = isl_union_map_gist_range(copy(), uset.release());
  20626.   return manage(res);
  20627. }
  20628.  
  20629. isl::union_map union_map::intersect(isl::union_map umap2) const
  20630. {
  20631.   auto res = isl_union_map_intersect(copy(), umap2.release());
  20632.   return manage(res);
  20633. }
  20634.  
  20635. isl::union_map union_map::intersect_domain(isl::space space) const
  20636. {
  20637.   auto res = isl_union_map_intersect_domain_space(copy(), space.release());
  20638.   return manage(res);
  20639. }
  20640.  
  20641. isl::union_map union_map::intersect_domain(isl::union_set uset) const
  20642. {
  20643.   auto res = isl_union_map_intersect_domain_union_set(copy(), uset.release());
  20644.   return manage(res);
  20645. }
  20646.  
  20647. isl::union_map union_map::intersect_domain_factor_domain(isl::union_map factor) const
  20648. {
  20649.   auto res = isl_union_map_intersect_domain_factor_domain(copy(), factor.release());
  20650.   return manage(res);
  20651. }
  20652.  
  20653. isl::union_map union_map::intersect_domain_factor_range(isl::union_map factor) const
  20654. {
  20655.   auto res = isl_union_map_intersect_domain_factor_range(copy(), factor.release());
  20656.   return manage(res);
  20657. }
  20658.  
  20659. isl::union_map union_map::intersect_params(isl::set set) const
  20660. {
  20661.   auto res = isl_union_map_intersect_params(copy(), set.release());
  20662.   return manage(res);
  20663. }
  20664.  
  20665. isl::union_map union_map::intersect_range(isl::space space) const
  20666. {
  20667.   auto res = isl_union_map_intersect_range_space(copy(), space.release());
  20668.   return manage(res);
  20669. }
  20670.  
  20671. isl::union_map union_map::intersect_range(isl::union_set uset) const
  20672. {
  20673.   auto res = isl_union_map_intersect_range_union_set(copy(), uset.release());
  20674.   return manage(res);
  20675. }
  20676.  
  20677. isl::union_map union_map::intersect_range_factor_domain(isl::union_map factor) const
  20678. {
  20679.   auto res = isl_union_map_intersect_range_factor_domain(copy(), factor.release());
  20680.   return manage(res);
  20681. }
  20682.  
  20683. isl::union_map union_map::intersect_range_factor_range(isl::union_map factor) const
  20684. {
  20685.   auto res = isl_union_map_intersect_range_factor_range(copy(), factor.release());
  20686.   return manage(res);
  20687. }
  20688.  
  20689. boolean union_map::is_bijective() const
  20690. {
  20691.   auto res = isl_union_map_is_bijective(get());
  20692.   return manage(res);
  20693. }
  20694.  
  20695. boolean union_map::is_disjoint(const isl::union_map &umap2) const
  20696. {
  20697.   auto res = isl_union_map_is_disjoint(get(), umap2.get());
  20698.   return manage(res);
  20699. }
  20700.  
  20701. boolean union_map::is_empty() const
  20702. {
  20703.   auto res = isl_union_map_is_empty(get());
  20704.   return manage(res);
  20705. }
  20706.  
  20707. boolean union_map::is_equal(const isl::union_map &umap2) const
  20708. {
  20709.   auto res = isl_union_map_is_equal(get(), umap2.get());
  20710.   return manage(res);
  20711. }
  20712.  
  20713. boolean union_map::is_injective() const
  20714. {
  20715.   auto res = isl_union_map_is_injective(get());
  20716.   return manage(res);
  20717. }
  20718.  
  20719. boolean union_map::is_single_valued() const
  20720. {
  20721.   auto res = isl_union_map_is_single_valued(get());
  20722.   return manage(res);
  20723. }
  20724.  
  20725. boolean union_map::is_strict_subset(const isl::union_map &umap2) const
  20726. {
  20727.   auto res = isl_union_map_is_strict_subset(get(), umap2.get());
  20728.   return manage(res);
  20729. }
  20730.  
  20731. boolean union_map::is_subset(const isl::union_map &umap2) const
  20732. {
  20733.   auto res = isl_union_map_is_subset(get(), umap2.get());
  20734.   return manage(res);
  20735. }
  20736.  
  20737. boolean union_map::isa_map() const
  20738. {
  20739.   auto res = isl_union_map_isa_map(get());
  20740.   return manage(res);
  20741. }
  20742.  
  20743. isl::union_map union_map::lexmax() const
  20744. {
  20745.   auto res = isl_union_map_lexmax(copy());
  20746.   return manage(res);
  20747. }
  20748.  
  20749. isl::union_map union_map::lexmin() const
  20750. {
  20751.   auto res = isl_union_map_lexmin(copy());
  20752.   return manage(res);
  20753. }
  20754.  
  20755. isl::map_list union_map::map_list() const
  20756. {
  20757.   auto res = isl_union_map_get_map_list(get());
  20758.   return manage(res);
  20759. }
  20760.  
  20761. isl::map_list union_map::get_map_list() const
  20762. {
  20763.   return map_list();
  20764. }
  20765.  
  20766. isl::set union_map::params() const
  20767. {
  20768.   auto res = isl_union_map_params(copy());
  20769.   return manage(res);
  20770. }
  20771.  
  20772. isl::union_map union_map::polyhedral_hull() const
  20773. {
  20774.   auto res = isl_union_map_polyhedral_hull(copy());
  20775.   return manage(res);
  20776. }
  20777.  
  20778. isl::union_map union_map::preimage_domain(isl::multi_aff ma) const
  20779. {
  20780.   auto res = isl_union_map_preimage_domain_multi_aff(copy(), ma.release());
  20781.   return manage(res);
  20782. }
  20783.  
  20784. isl::union_map union_map::preimage_domain(isl::multi_pw_aff mpa) const
  20785. {
  20786.   auto res = isl_union_map_preimage_domain_multi_pw_aff(copy(), mpa.release());
  20787.   return manage(res);
  20788. }
  20789.  
  20790. isl::union_map union_map::preimage_domain(isl::pw_multi_aff pma) const
  20791. {
  20792.   auto res = isl_union_map_preimage_domain_pw_multi_aff(copy(), pma.release());
  20793.   return manage(res);
  20794. }
  20795.  
  20796. isl::union_map union_map::preimage_domain(isl::union_pw_multi_aff upma) const
  20797. {
  20798.   auto res = isl_union_map_preimage_domain_union_pw_multi_aff(copy(), upma.release());
  20799.   return manage(res);
  20800. }
  20801.  
  20802. isl::union_map union_map::preimage_range(isl::multi_aff ma) const
  20803. {
  20804.   auto res = isl_union_map_preimage_range_multi_aff(copy(), ma.release());
  20805.   return manage(res);
  20806. }
  20807.  
  20808. isl::union_map union_map::preimage_range(isl::pw_multi_aff pma) const
  20809. {
  20810.   auto res = isl_union_map_preimage_range_pw_multi_aff(copy(), pma.release());
  20811.   return manage(res);
  20812. }
  20813.  
  20814. isl::union_map union_map::preimage_range(isl::union_pw_multi_aff upma) const
  20815. {
  20816.   auto res = isl_union_map_preimage_range_union_pw_multi_aff(copy(), upma.release());
  20817.   return manage(res);
  20818. }
  20819.  
  20820. isl::union_map union_map::product(isl::union_map umap2) const
  20821. {
  20822.   auto res = isl_union_map_product(copy(), umap2.release());
  20823.   return manage(res);
  20824. }
  20825.  
  20826. isl::union_map union_map::project_out_all_params() const
  20827. {
  20828.   auto res = isl_union_map_project_out_all_params(copy());
  20829.   return manage(res);
  20830. }
  20831.  
  20832. isl::union_set union_map::range() const
  20833. {
  20834.   auto res = isl_union_map_range(copy());
  20835.   return manage(res);
  20836. }
  20837.  
  20838. isl::union_map union_map::range_factor_domain() const
  20839. {
  20840.   auto res = isl_union_map_range_factor_domain(copy());
  20841.   return manage(res);
  20842. }
  20843.  
  20844. isl::union_map union_map::range_factor_range() const
  20845. {
  20846.   auto res = isl_union_map_range_factor_range(copy());
  20847.   return manage(res);
  20848. }
  20849.  
  20850. isl::union_map union_map::range_map() const
  20851. {
  20852.   auto res = isl_union_map_range_map(copy());
  20853.   return manage(res);
  20854. }
  20855.  
  20856. isl::union_map union_map::range_product(isl::union_map umap2) const
  20857. {
  20858.   auto res = isl_union_map_range_product(copy(), umap2.release());
  20859.   return manage(res);
  20860. }
  20861.  
  20862. isl::union_map union_map::range_reverse() const
  20863. {
  20864.   auto res = isl_union_map_range_reverse(copy());
  20865.   return manage(res);
  20866. }
  20867.  
  20868. isl::union_map union_map::reverse() const
  20869. {
  20870.   auto res = isl_union_map_reverse(copy());
  20871.   return manage(res);
  20872. }
  20873.  
  20874. isl::space union_map::space() const
  20875. {
  20876.   auto res = isl_union_map_get_space(get());
  20877.   return manage(res);
  20878. }
  20879.  
  20880. isl::space union_map::get_space() const
  20881. {
  20882.   return space();
  20883. }
  20884.  
  20885. isl::union_map union_map::subtract(isl::union_map umap2) const
  20886. {
  20887.   auto res = isl_union_map_subtract(copy(), umap2.release());
  20888.   return manage(res);
  20889. }
  20890.  
  20891. isl::union_map union_map::subtract_domain(isl::union_set dom) const
  20892. {
  20893.   auto res = isl_union_map_subtract_domain(copy(), dom.release());
  20894.   return manage(res);
  20895. }
  20896.  
  20897. isl::union_map union_map::subtract_range(isl::union_set dom) const
  20898. {
  20899.   auto res = isl_union_map_subtract_range(copy(), dom.release());
  20900.   return manage(res);
  20901. }
  20902.  
  20903. isl::union_map union_map::uncurry() const
  20904. {
  20905.   auto res = isl_union_map_uncurry(copy());
  20906.   return manage(res);
  20907. }
  20908.  
  20909. isl::union_map union_map::unite(isl::union_map umap2) const
  20910. {
  20911.   auto res = isl_union_map_union(copy(), umap2.release());
  20912.   return manage(res);
  20913. }
  20914.  
  20915. isl::union_map union_map::universe() const
  20916. {
  20917.   auto res = isl_union_map_universe(copy());
  20918.   return manage(res);
  20919. }
  20920.  
  20921. isl::union_set union_map::wrap() const
  20922. {
  20923.   auto res = isl_union_map_wrap(copy());
  20924.   return manage(res);
  20925. }
  20926.  
  20927. isl::union_map union_map::zip() const
  20928. {
  20929.   auto res = isl_union_map_zip(copy());
  20930.   return manage(res);
  20931. }
  20932.  
  20933. inline std::ostream &operator<<(std::ostream &os, const union_map &obj)
  20934. {
  20935.   char *str = isl_union_map_to_str(obj.get());
  20936.   if (!str) {
  20937.     os.setstate(std::ios_base::badbit);
  20938.     return os;
  20939.   }
  20940.   os << str;
  20941.   free(str);
  20942.   return os;
  20943. }
  20944.  
  20945. // implementations for isl::union_pw_aff
  20946. union_pw_aff manage(__isl_take isl_union_pw_aff *ptr) {
  20947.   return union_pw_aff(ptr);
  20948. }
  20949. union_pw_aff manage_copy(__isl_keep isl_union_pw_aff *ptr) {
  20950.   ptr = isl_union_pw_aff_copy(ptr);
  20951.   return union_pw_aff(ptr);
  20952. }
  20953.  
  20954. union_pw_aff::union_pw_aff()
  20955.     : ptr(nullptr) {}
  20956.  
  20957. union_pw_aff::union_pw_aff(const union_pw_aff &obj)
  20958.     : ptr(nullptr)
  20959. {
  20960.   ptr = obj.copy();
  20961. }
  20962.  
  20963. union_pw_aff::union_pw_aff(__isl_take isl_union_pw_aff *ptr)
  20964.     : ptr(ptr) {}
  20965.  
  20966. union_pw_aff::union_pw_aff(isl::aff aff)
  20967. {
  20968.   auto res = isl_union_pw_aff_from_aff(aff.release());
  20969.   ptr = res;
  20970. }
  20971.  
  20972. union_pw_aff::union_pw_aff(isl::pw_aff pa)
  20973. {
  20974.   auto res = isl_union_pw_aff_from_pw_aff(pa.release());
  20975.   ptr = res;
  20976. }
  20977.  
  20978. union_pw_aff::union_pw_aff(isl::ctx ctx, const std::string &str)
  20979. {
  20980.   auto res = isl_union_pw_aff_read_from_str(ctx.release(), str.c_str());
  20981.   ptr = res;
  20982. }
  20983.  
  20984. union_pw_aff::union_pw_aff(isl::union_set domain, isl::val v)
  20985. {
  20986.   auto res = isl_union_pw_aff_val_on_domain(domain.release(), v.release());
  20987.   ptr = res;
  20988. }
  20989.  
  20990. union_pw_aff &union_pw_aff::operator=(union_pw_aff obj) {
  20991.   std::swap(this->ptr, obj.ptr);
  20992.   return *this;
  20993. }
  20994.  
  20995. union_pw_aff::~union_pw_aff() {
  20996.   if (ptr)
  20997.     isl_union_pw_aff_free(ptr);
  20998. }
  20999.  
  21000. __isl_give isl_union_pw_aff *union_pw_aff::copy() const & {
  21001.   return isl_union_pw_aff_copy(ptr);
  21002. }
  21003.  
  21004. __isl_keep isl_union_pw_aff *union_pw_aff::get() const {
  21005.   return ptr;
  21006. }
  21007.  
  21008. __isl_give isl_union_pw_aff *union_pw_aff::release() {
  21009.   isl_union_pw_aff *tmp = ptr;
  21010.   ptr = nullptr;
  21011.   return tmp;
  21012. }
  21013.  
  21014. bool union_pw_aff::is_null() const {
  21015.   return ptr == nullptr;
  21016. }
  21017.  
  21018. isl::ctx union_pw_aff::ctx() const {
  21019.   return isl::ctx(isl_union_pw_aff_get_ctx(ptr));
  21020. }
  21021.  
  21022. isl::multi_union_pw_aff union_pw_aff::add(const isl::multi_union_pw_aff &multi2) const
  21023. {
  21024.   return isl::multi_union_pw_aff(*this).add(multi2);
  21025. }
  21026.  
  21027. isl::union_pw_aff union_pw_aff::add(isl::union_pw_aff upa2) const
  21028. {
  21029.   auto res = isl_union_pw_aff_add(copy(), upa2.release());
  21030.   return manage(res);
  21031. }
  21032.  
  21033. isl::union_pw_multi_aff union_pw_aff::add(const isl::union_pw_multi_aff &upma2) const
  21034. {
  21035.   return isl::union_pw_multi_aff(*this).add(upma2);
  21036. }
  21037.  
  21038. isl::union_pw_aff union_pw_aff::add(const isl::aff &upa2) const
  21039. {
  21040.   return this->add(isl::union_pw_aff(upa2));
  21041. }
  21042.  
  21043. isl::union_pw_aff union_pw_aff::add(const isl::pw_aff &upa2) const
  21044. {
  21045.   return this->add(isl::union_pw_aff(upa2));
  21046. }
  21047.  
  21048. isl::union_pw_multi_aff union_pw_aff::add_pw_multi_aff(const isl::pw_multi_aff &pma) const
  21049. {
  21050.   return isl::union_pw_multi_aff(*this).add_pw_multi_aff(pma);
  21051. }
  21052.  
  21053. isl::union_pw_multi_aff union_pw_aff::apply(const isl::union_pw_multi_aff &upma2) const
  21054. {
  21055.   return isl::union_pw_multi_aff(*this).apply(upma2);
  21056. }
  21057.  
  21058. isl::multi_union_pw_aff union_pw_aff::as_multi_union_pw_aff() const
  21059. {
  21060.   return isl::union_pw_multi_aff(*this).as_multi_union_pw_aff();
  21061. }
  21062.  
  21063. isl::pw_multi_aff union_pw_aff::as_pw_multi_aff() const
  21064. {
  21065.   return isl::union_pw_multi_aff(*this).as_pw_multi_aff();
  21066. }
  21067.  
  21068. isl::union_map union_pw_aff::as_union_map() const
  21069. {
  21070.   return isl::union_pw_multi_aff(*this).as_union_map();
  21071. }
  21072.  
  21073. isl::union_pw_aff union_pw_aff::at(int pos) const
  21074. {
  21075.   return isl::multi_union_pw_aff(*this).at(pos);
  21076. }
  21077.  
  21078. isl::union_set union_pw_aff::bind(const isl::multi_id &tuple) const
  21079. {
  21080.   return isl::multi_union_pw_aff(*this).bind(tuple);
  21081. }
  21082.  
  21083. isl::union_set union_pw_aff::bind(isl::id id) const
  21084. {
  21085.   auto res = isl_union_pw_aff_bind_id(copy(), id.release());
  21086.   return manage(res);
  21087. }
  21088.  
  21089. isl::union_set union_pw_aff::bind(const std::string &id) const
  21090. {
  21091.   return this->bind(isl::id(ctx(), id));
  21092. }
  21093.  
  21094. isl::union_pw_aff union_pw_aff::coalesce() const
  21095. {
  21096.   auto res = isl_union_pw_aff_coalesce(copy());
  21097.   return manage(res);
  21098. }
  21099.  
  21100. class size union_pw_aff::dim(isl::dim type) const
  21101. {
  21102.   return isl::multi_union_pw_aff(*this).dim(type);
  21103. }
  21104.  
  21105. isl::union_set union_pw_aff::domain() const
  21106. {
  21107.   auto res = isl_union_pw_aff_domain(copy());
  21108.   return manage(res);
  21109. }
  21110.  
  21111. isl::union_pw_aff union_pw_aff::empty(isl::space space)
  21112. {
  21113.   auto res = isl_union_pw_aff_empty(space.release());
  21114.   return manage(res);
  21115. }
  21116.  
  21117. isl::pw_multi_aff union_pw_aff::extract_pw_multi_aff(const isl::space &space) const
  21118. {
  21119.   return isl::union_pw_multi_aff(*this).extract_pw_multi_aff(space);
  21120. }
  21121.  
  21122. isl::multi_union_pw_aff union_pw_aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const
  21123. {
  21124.   return isl::multi_union_pw_aff(*this).flat_range_product(multi2);
  21125. }
  21126.  
  21127. isl::union_pw_multi_aff union_pw_aff::flat_range_product(const isl::union_pw_multi_aff &upma2) const
  21128. {
  21129.   return isl::union_pw_multi_aff(*this).flat_range_product(upma2);
  21130. }
  21131.  
  21132. stat union_pw_aff::foreach_pw_aff(const std::function<stat(isl::pw_aff)> &fn) const
  21133. {
  21134.   struct fn_data {
  21135.     std::function<stat(isl::pw_aff)> func;
  21136.   } fn_data = { fn };
  21137.   auto fn_lambda = [](isl_pw_aff *arg_0, void *arg_1) -> isl_stat {
  21138.     auto *data = static_cast<struct fn_data *>(arg_1);
  21139.     auto ret = (data->func)(manage(arg_0));
  21140.     return ret.release();
  21141.   };
  21142.   auto res = isl_union_pw_aff_foreach_pw_aff(get(), fn_lambda, &fn_data);
  21143.   return manage(res);
  21144. }
  21145.  
  21146. isl::union_pw_aff union_pw_aff::gist(isl::union_set context) const
  21147. {
  21148.   auto res = isl_union_pw_aff_gist(copy(), context.release());
  21149.   return manage(res);
  21150. }
  21151.  
  21152. boolean union_pw_aff::has_range_tuple_id() const
  21153. {
  21154.   return isl::multi_union_pw_aff(*this).has_range_tuple_id();
  21155. }
  21156.  
  21157. isl::union_pw_aff union_pw_aff::intersect_domain(isl::space space) const
  21158. {
  21159.   auto res = isl_union_pw_aff_intersect_domain_space(copy(), space.release());
  21160.   return manage(res);
  21161. }
  21162.  
  21163. isl::union_pw_aff union_pw_aff::intersect_domain(isl::union_set uset) const
  21164. {
  21165.   auto res = isl_union_pw_aff_intersect_domain_union_set(copy(), uset.release());
  21166.   return manage(res);
  21167. }
  21168.  
  21169. isl::union_pw_aff union_pw_aff::intersect_domain_wrapped_domain(isl::union_set uset) const
  21170. {
  21171.   auto res = isl_union_pw_aff_intersect_domain_wrapped_domain(copy(), uset.release());
  21172.   return manage(res);
  21173. }
  21174.  
  21175. isl::union_pw_aff union_pw_aff::intersect_domain_wrapped_range(isl::union_set uset) const
  21176. {
  21177.   auto res = isl_union_pw_aff_intersect_domain_wrapped_range(copy(), uset.release());
  21178.   return manage(res);
  21179. }
  21180.  
  21181. isl::union_pw_aff union_pw_aff::intersect_params(isl::set set) const
  21182. {
  21183.   auto res = isl_union_pw_aff_intersect_params(copy(), set.release());
  21184.   return manage(res);
  21185. }
  21186.  
  21187. boolean union_pw_aff::involves_locals() const
  21188. {
  21189.   return isl::union_pw_multi_aff(*this).involves_locals();
  21190. }
  21191.  
  21192. boolean union_pw_aff::involves_nan() const
  21193. {
  21194.   return isl::multi_union_pw_aff(*this).involves_nan();
  21195. }
  21196.  
  21197. boolean union_pw_aff::isa_pw_multi_aff() const
  21198. {
  21199.   return isl::union_pw_multi_aff(*this).isa_pw_multi_aff();
  21200. }
  21201.  
  21202. isl::union_pw_aff_list union_pw_aff::list() const
  21203. {
  21204.   return isl::multi_union_pw_aff(*this).list();
  21205. }
  21206.  
  21207. isl::multi_union_pw_aff union_pw_aff::neg() const
  21208. {
  21209.   return isl::multi_union_pw_aff(*this).neg();
  21210. }
  21211.  
  21212. boolean union_pw_aff::plain_is_empty() const
  21213. {
  21214.   return isl::union_pw_multi_aff(*this).plain_is_empty();
  21215. }
  21216.  
  21217. boolean union_pw_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
  21218. {
  21219.   return isl::multi_union_pw_aff(*this).plain_is_equal(multi2);
  21220. }
  21221.  
  21222. isl::union_pw_multi_aff union_pw_aff::preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const
  21223. {
  21224.   return isl::union_pw_multi_aff(*this).preimage_domain_wrapped_domain(upma2);
  21225. }
  21226.  
  21227. isl::union_pw_aff union_pw_aff::pullback(isl::union_pw_multi_aff upma) const
  21228. {
  21229.   auto res = isl_union_pw_aff_pullback_union_pw_multi_aff(copy(), upma.release());
  21230.   return manage(res);
  21231. }
  21232.  
  21233. isl::pw_multi_aff_list union_pw_aff::pw_multi_aff_list() const
  21234. {
  21235.   return isl::union_pw_multi_aff(*this).pw_multi_aff_list();
  21236. }
  21237.  
  21238. isl::union_pw_multi_aff union_pw_aff::range_factor_domain() const
  21239. {
  21240.   return isl::union_pw_multi_aff(*this).range_factor_domain();
  21241. }
  21242.  
  21243. isl::union_pw_multi_aff union_pw_aff::range_factor_range() const
  21244. {
  21245.   return isl::union_pw_multi_aff(*this).range_factor_range();
  21246. }
  21247.  
  21248. isl::multi_union_pw_aff union_pw_aff::range_product(const isl::multi_union_pw_aff &multi2) const
  21249. {
  21250.   return isl::multi_union_pw_aff(*this).range_product(multi2);
  21251. }
  21252.  
  21253. isl::union_pw_multi_aff union_pw_aff::range_product(const isl::union_pw_multi_aff &upma2) const
  21254. {
  21255.   return isl::union_pw_multi_aff(*this).range_product(upma2);
  21256. }
  21257.  
  21258. isl::id union_pw_aff::range_tuple_id() const
  21259. {
  21260.   return isl::multi_union_pw_aff(*this).range_tuple_id();
  21261. }
  21262.  
  21263. isl::multi_union_pw_aff union_pw_aff::reset_range_tuple_id() const
  21264. {
  21265.   return isl::multi_union_pw_aff(*this).reset_range_tuple_id();
  21266. }
  21267.  
  21268. isl::multi_union_pw_aff union_pw_aff::reset_tuple_id(isl::dim type) const
  21269. {
  21270.   return isl::multi_union_pw_aff(*this).reset_tuple_id(type);
  21271. }
  21272.  
  21273. isl::multi_union_pw_aff union_pw_aff::scale(const isl::multi_val &mv) const
  21274. {
  21275.   return isl::multi_union_pw_aff(*this).scale(mv);
  21276. }
  21277.  
  21278. isl::multi_union_pw_aff union_pw_aff::scale(const isl::val &v) const
  21279. {
  21280.   return isl::multi_union_pw_aff(*this).scale(v);
  21281. }
  21282.  
  21283. isl::multi_union_pw_aff union_pw_aff::scale(long v) const
  21284. {
  21285.   return this->scale(isl::val(ctx(), v));
  21286. }
  21287.  
  21288. isl::multi_union_pw_aff union_pw_aff::scale_down(const isl::multi_val &mv) const
  21289. {
  21290.   return isl::multi_union_pw_aff(*this).scale_down(mv);
  21291. }
  21292.  
  21293. isl::multi_union_pw_aff union_pw_aff::scale_down(const isl::val &v) const
  21294. {
  21295.   return isl::multi_union_pw_aff(*this).scale_down(v);
  21296. }
  21297.  
  21298. isl::multi_union_pw_aff union_pw_aff::scale_down(long v) const
  21299. {
  21300.   return this->scale_down(isl::val(ctx(), v));
  21301. }
  21302.  
  21303. isl::multi_union_pw_aff union_pw_aff::set_at(int pos, const isl::union_pw_aff &el) const
  21304. {
  21305.   return isl::multi_union_pw_aff(*this).set_at(pos, el);
  21306. }
  21307.  
  21308. isl::multi_union_pw_aff union_pw_aff::set_range_tuple(const isl::id &id) const
  21309. {
  21310.   return isl::multi_union_pw_aff(*this).set_range_tuple(id);
  21311. }
  21312.  
  21313. isl::multi_union_pw_aff union_pw_aff::set_range_tuple(const std::string &id) const
  21314. {
  21315.   return this->set_range_tuple(isl::id(ctx(), id));
  21316. }
  21317.  
  21318. isl::multi_union_pw_aff union_pw_aff::set_union_pw_aff(int pos, const isl::union_pw_aff &el) const
  21319. {
  21320.   return isl::multi_union_pw_aff(*this).set_union_pw_aff(pos, el);
  21321. }
  21322.  
  21323. class size union_pw_aff::size() const
  21324. {
  21325.   return isl::multi_union_pw_aff(*this).size();
  21326. }
  21327.  
  21328. isl::space union_pw_aff::space() const
  21329. {
  21330.   auto res = isl_union_pw_aff_get_space(get());
  21331.   return manage(res);
  21332. }
  21333.  
  21334. isl::space union_pw_aff::get_space() const
  21335. {
  21336.   return space();
  21337. }
  21338.  
  21339. isl::multi_union_pw_aff union_pw_aff::sub(const isl::multi_union_pw_aff &multi2) const
  21340. {
  21341.   return isl::multi_union_pw_aff(*this).sub(multi2);
  21342. }
  21343.  
  21344. isl::union_pw_aff union_pw_aff::sub(isl::union_pw_aff upa2) const
  21345. {
  21346.   auto res = isl_union_pw_aff_sub(copy(), upa2.release());
  21347.   return manage(res);
  21348. }
  21349.  
  21350. isl::union_pw_multi_aff union_pw_aff::sub(const isl::union_pw_multi_aff &upma2) const
  21351. {
  21352.   return isl::union_pw_multi_aff(*this).sub(upma2);
  21353. }
  21354.  
  21355. isl::union_pw_aff union_pw_aff::sub(const isl::aff &upa2) const
  21356. {
  21357.   return this->sub(isl::union_pw_aff(upa2));
  21358. }
  21359.  
  21360. isl::union_pw_aff union_pw_aff::sub(const isl::pw_aff &upa2) const
  21361. {
  21362.   return this->sub(isl::union_pw_aff(upa2));
  21363. }
  21364.  
  21365. isl::union_pw_aff union_pw_aff::subtract_domain(isl::space space) const
  21366. {
  21367.   auto res = isl_union_pw_aff_subtract_domain_space(copy(), space.release());
  21368.   return manage(res);
  21369. }
  21370.  
  21371. isl::union_pw_aff union_pw_aff::subtract_domain(isl::union_set uset) const
  21372. {
  21373.   auto res = isl_union_pw_aff_subtract_domain_union_set(copy(), uset.release());
  21374.   return manage(res);
  21375. }
  21376.  
  21377. isl::union_pw_aff_list union_pw_aff::to_list() const
  21378. {
  21379.   auto res = isl_union_pw_aff_to_list(copy());
  21380.   return manage(res);
  21381. }
  21382.  
  21383. isl::multi_union_pw_aff union_pw_aff::union_add(const isl::multi_union_pw_aff &mupa2) const
  21384. {
  21385.   return isl::multi_union_pw_aff(*this).union_add(mupa2);
  21386. }
  21387.  
  21388. isl::union_pw_aff union_pw_aff::union_add(isl::union_pw_aff upa2) const
  21389. {
  21390.   auto res = isl_union_pw_aff_union_add(copy(), upa2.release());
  21391.   return manage(res);
  21392. }
  21393.  
  21394. isl::union_pw_multi_aff union_pw_aff::union_add(const isl::union_pw_multi_aff &upma2) const
  21395. {
  21396.   return isl::union_pw_multi_aff(*this).union_add(upma2);
  21397. }
  21398.  
  21399. isl::union_pw_aff union_pw_aff::union_add(const isl::aff &upa2) const
  21400. {
  21401.   return this->union_add(isl::union_pw_aff(upa2));
  21402. }
  21403.  
  21404. isl::union_pw_aff union_pw_aff::union_add(const isl::pw_aff &upa2) const
  21405. {
  21406.   return this->union_add(isl::union_pw_aff(upa2));
  21407. }
  21408.  
  21409. inline std::ostream &operator<<(std::ostream &os, const union_pw_aff &obj)
  21410. {
  21411.   char *str = isl_union_pw_aff_to_str(obj.get());
  21412.   if (!str) {
  21413.     os.setstate(std::ios_base::badbit);
  21414.     return os;
  21415.   }
  21416.   os << str;
  21417.   free(str);
  21418.   return os;
  21419. }
  21420.  
  21421. // implementations for isl::union_pw_aff_list
  21422. union_pw_aff_list manage(__isl_take isl_union_pw_aff_list *ptr) {
  21423.   return union_pw_aff_list(ptr);
  21424. }
  21425. union_pw_aff_list manage_copy(__isl_keep isl_union_pw_aff_list *ptr) {
  21426.   ptr = isl_union_pw_aff_list_copy(ptr);
  21427.   return union_pw_aff_list(ptr);
  21428. }
  21429.  
  21430. union_pw_aff_list::union_pw_aff_list()
  21431.     : ptr(nullptr) {}
  21432.  
  21433. union_pw_aff_list::union_pw_aff_list(const union_pw_aff_list &obj)
  21434.     : ptr(nullptr)
  21435. {
  21436.   ptr = obj.copy();
  21437. }
  21438.  
  21439. union_pw_aff_list::union_pw_aff_list(__isl_take isl_union_pw_aff_list *ptr)
  21440.     : ptr(ptr) {}
  21441.  
  21442. union_pw_aff_list::union_pw_aff_list(isl::ctx ctx, int n)
  21443. {
  21444.   auto res = isl_union_pw_aff_list_alloc(ctx.release(), n);
  21445.   ptr = res;
  21446. }
  21447.  
  21448. union_pw_aff_list::union_pw_aff_list(isl::union_pw_aff el)
  21449. {
  21450.   auto res = isl_union_pw_aff_list_from_union_pw_aff(el.release());
  21451.   ptr = res;
  21452. }
  21453.  
  21454. union_pw_aff_list::union_pw_aff_list(isl::ctx ctx, const std::string &str)
  21455. {
  21456.   auto res = isl_union_pw_aff_list_read_from_str(ctx.release(), str.c_str());
  21457.   ptr = res;
  21458. }
  21459.  
  21460. union_pw_aff_list &union_pw_aff_list::operator=(union_pw_aff_list obj) {
  21461.   std::swap(this->ptr, obj.ptr);
  21462.   return *this;
  21463. }
  21464.  
  21465. union_pw_aff_list::~union_pw_aff_list() {
  21466.   if (ptr)
  21467.     isl_union_pw_aff_list_free(ptr);
  21468. }
  21469.  
  21470. __isl_give isl_union_pw_aff_list *union_pw_aff_list::copy() const & {
  21471.   return isl_union_pw_aff_list_copy(ptr);
  21472. }
  21473.  
  21474. __isl_keep isl_union_pw_aff_list *union_pw_aff_list::get() const {
  21475.   return ptr;
  21476. }
  21477.  
  21478. __isl_give isl_union_pw_aff_list *union_pw_aff_list::release() {
  21479.   isl_union_pw_aff_list *tmp = ptr;
  21480.   ptr = nullptr;
  21481.   return tmp;
  21482. }
  21483.  
  21484. bool union_pw_aff_list::is_null() const {
  21485.   return ptr == nullptr;
  21486. }
  21487.  
  21488. isl::ctx union_pw_aff_list::ctx() const {
  21489.   return isl::ctx(isl_union_pw_aff_list_get_ctx(ptr));
  21490. }
  21491.  
  21492. isl::union_pw_aff_list union_pw_aff_list::add(isl::union_pw_aff el) const
  21493. {
  21494.   auto res = isl_union_pw_aff_list_add(copy(), el.release());
  21495.   return manage(res);
  21496. }
  21497.  
  21498. isl::union_pw_aff union_pw_aff_list::at(int index) const
  21499. {
  21500.   auto res = isl_union_pw_aff_list_get_at(get(), index);
  21501.   return manage(res);
  21502. }
  21503.  
  21504. isl::union_pw_aff union_pw_aff_list::get_at(int index) const
  21505. {
  21506.   return at(index);
  21507. }
  21508.  
  21509. isl::union_pw_aff_list union_pw_aff_list::clear() const
  21510. {
  21511.   auto res = isl_union_pw_aff_list_clear(copy());
  21512.   return manage(res);
  21513. }
  21514.  
  21515. isl::union_pw_aff_list union_pw_aff_list::concat(isl::union_pw_aff_list list2) const
  21516. {
  21517.   auto res = isl_union_pw_aff_list_concat(copy(), list2.release());
  21518.   return manage(res);
  21519. }
  21520.  
  21521. isl::union_pw_aff_list union_pw_aff_list::drop(unsigned int first, unsigned int n) const
  21522. {
  21523.   auto res = isl_union_pw_aff_list_drop(copy(), first, n);
  21524.   return manage(res);
  21525. }
  21526.  
  21527. stat union_pw_aff_list::foreach(const std::function<stat(isl::union_pw_aff)> &fn) const
  21528. {
  21529.   struct fn_data {
  21530.     std::function<stat(isl::union_pw_aff)> func;
  21531.   } fn_data = { fn };
  21532.   auto fn_lambda = [](isl_union_pw_aff *arg_0, void *arg_1) -> isl_stat {
  21533.     auto *data = static_cast<struct fn_data *>(arg_1);
  21534.     auto ret = (data->func)(manage(arg_0));
  21535.     return ret.release();
  21536.   };
  21537.   auto res = isl_union_pw_aff_list_foreach(get(), fn_lambda, &fn_data);
  21538.   return manage(res);
  21539. }
  21540.  
  21541. isl::union_pw_aff_list union_pw_aff_list::insert(unsigned int pos, isl::union_pw_aff el) const
  21542. {
  21543.   auto res = isl_union_pw_aff_list_insert(copy(), pos, el.release());
  21544.   return manage(res);
  21545. }
  21546.  
  21547. class size union_pw_aff_list::size() const
  21548. {
  21549.   auto res = isl_union_pw_aff_list_size(get());
  21550.   return manage(res);
  21551. }
  21552.  
  21553. inline std::ostream &operator<<(std::ostream &os, const union_pw_aff_list &obj)
  21554. {
  21555.   char *str = isl_union_pw_aff_list_to_str(obj.get());
  21556.   if (!str) {
  21557.     os.setstate(std::ios_base::badbit);
  21558.     return os;
  21559.   }
  21560.   os << str;
  21561.   free(str);
  21562.   return os;
  21563. }
  21564.  
  21565. // implementations for isl::union_pw_multi_aff
  21566. union_pw_multi_aff manage(__isl_take isl_union_pw_multi_aff *ptr) {
  21567.   return union_pw_multi_aff(ptr);
  21568. }
  21569. union_pw_multi_aff manage_copy(__isl_keep isl_union_pw_multi_aff *ptr) {
  21570.   ptr = isl_union_pw_multi_aff_copy(ptr);
  21571.   return union_pw_multi_aff(ptr);
  21572. }
  21573.  
  21574. union_pw_multi_aff::union_pw_multi_aff()
  21575.     : ptr(nullptr) {}
  21576.  
  21577. union_pw_multi_aff::union_pw_multi_aff(const union_pw_multi_aff &obj)
  21578.     : ptr(nullptr)
  21579. {
  21580.   ptr = obj.copy();
  21581. }
  21582.  
  21583. union_pw_multi_aff::union_pw_multi_aff(__isl_take isl_union_pw_multi_aff *ptr)
  21584.     : ptr(ptr) {}
  21585.  
  21586. union_pw_multi_aff::union_pw_multi_aff(isl::union_set uset)
  21587. {
  21588.   auto res = isl_union_pw_multi_aff_from_domain(uset.release());
  21589.   ptr = res;
  21590. }
  21591.  
  21592. union_pw_multi_aff::union_pw_multi_aff(isl::multi_aff ma)
  21593. {
  21594.   auto res = isl_union_pw_multi_aff_from_multi_aff(ma.release());
  21595.   ptr = res;
  21596. }
  21597.  
  21598. union_pw_multi_aff::union_pw_multi_aff(isl::pw_multi_aff pma)
  21599. {
  21600.   auto res = isl_union_pw_multi_aff_from_pw_multi_aff(pma.release());
  21601.   ptr = res;
  21602. }
  21603.  
  21604. union_pw_multi_aff::union_pw_multi_aff(isl::union_map umap)
  21605. {
  21606.   auto res = isl_union_pw_multi_aff_from_union_map(umap.release());
  21607.   ptr = res;
  21608. }
  21609.  
  21610. union_pw_multi_aff::union_pw_multi_aff(isl::union_pw_aff upa)
  21611. {
  21612.   auto res = isl_union_pw_multi_aff_from_union_pw_aff(upa.release());
  21613.   ptr = res;
  21614. }
  21615.  
  21616. union_pw_multi_aff::union_pw_multi_aff(isl::ctx ctx, const std::string &str)
  21617. {
  21618.   auto res = isl_union_pw_multi_aff_read_from_str(ctx.release(), str.c_str());
  21619.   ptr = res;
  21620. }
  21621.  
  21622. union_pw_multi_aff &union_pw_multi_aff::operator=(union_pw_multi_aff obj) {
  21623.   std::swap(this->ptr, obj.ptr);
  21624.   return *this;
  21625. }
  21626.  
  21627. union_pw_multi_aff::~union_pw_multi_aff() {
  21628.   if (ptr)
  21629.     isl_union_pw_multi_aff_free(ptr);
  21630. }
  21631.  
  21632. __isl_give isl_union_pw_multi_aff *union_pw_multi_aff::copy() const & {
  21633.   return isl_union_pw_multi_aff_copy(ptr);
  21634. }
  21635.  
  21636. __isl_keep isl_union_pw_multi_aff *union_pw_multi_aff::get() const {
  21637.   return ptr;
  21638. }
  21639.  
  21640. __isl_give isl_union_pw_multi_aff *union_pw_multi_aff::release() {
  21641.   isl_union_pw_multi_aff *tmp = ptr;
  21642.   ptr = nullptr;
  21643.   return tmp;
  21644. }
  21645.  
  21646. bool union_pw_multi_aff::is_null() const {
  21647.   return ptr == nullptr;
  21648. }
  21649.  
  21650. isl::ctx union_pw_multi_aff::ctx() const {
  21651.   return isl::ctx(isl_union_pw_multi_aff_get_ctx(ptr));
  21652. }
  21653.  
  21654. isl::union_pw_multi_aff union_pw_multi_aff::add(isl::union_pw_multi_aff upma2) const
  21655. {
  21656.   auto res = isl_union_pw_multi_aff_add(copy(), upma2.release());
  21657.   return manage(res);
  21658. }
  21659.  
  21660. isl::union_pw_multi_aff union_pw_multi_aff::add_pw_multi_aff(isl::pw_multi_aff pma) const
  21661. {
  21662.   auto res = isl_union_pw_multi_aff_add_pw_multi_aff(copy(), pma.release());
  21663.   return manage(res);
  21664. }
  21665.  
  21666. isl::union_pw_multi_aff union_pw_multi_aff::apply(isl::union_pw_multi_aff upma2) const
  21667. {
  21668.   auto res = isl_union_pw_multi_aff_apply_union_pw_multi_aff(copy(), upma2.release());
  21669.   return manage(res);
  21670. }
  21671.  
  21672. isl::multi_union_pw_aff union_pw_multi_aff::as_multi_union_pw_aff() const
  21673. {
  21674.   auto res = isl_union_pw_multi_aff_as_multi_union_pw_aff(copy());
  21675.   return manage(res);
  21676. }
  21677.  
  21678. isl::pw_multi_aff union_pw_multi_aff::as_pw_multi_aff() const
  21679. {
  21680.   auto res = isl_union_pw_multi_aff_as_pw_multi_aff(copy());
  21681.   return manage(res);
  21682. }
  21683.  
  21684. isl::union_map union_pw_multi_aff::as_union_map() const
  21685. {
  21686.   auto res = isl_union_pw_multi_aff_as_union_map(copy());
  21687.   return manage(res);
  21688. }
  21689.  
  21690. isl::union_pw_multi_aff union_pw_multi_aff::coalesce() const
  21691. {
  21692.   auto res = isl_union_pw_multi_aff_coalesce(copy());
  21693.   return manage(res);
  21694. }
  21695.  
  21696. isl::union_set union_pw_multi_aff::domain() const
  21697. {
  21698.   auto res = isl_union_pw_multi_aff_domain(copy());
  21699.   return manage(res);
  21700. }
  21701.  
  21702. isl::union_pw_multi_aff union_pw_multi_aff::empty(isl::space space)
  21703. {
  21704.   auto res = isl_union_pw_multi_aff_empty(space.release());
  21705.   return manage(res);
  21706. }
  21707.  
  21708. isl::union_pw_multi_aff union_pw_multi_aff::empty(isl::ctx ctx)
  21709. {
  21710.   auto res = isl_union_pw_multi_aff_empty_ctx(ctx.release());
  21711.   return manage(res);
  21712. }
  21713.  
  21714. isl::pw_multi_aff union_pw_multi_aff::extract_pw_multi_aff(isl::space space) const
  21715. {
  21716.   auto res = isl_union_pw_multi_aff_extract_pw_multi_aff(get(), space.release());
  21717.   return manage(res);
  21718. }
  21719.  
  21720. isl::union_pw_multi_aff union_pw_multi_aff::flat_range_product(isl::union_pw_multi_aff upma2) const
  21721. {
  21722.   auto res = isl_union_pw_multi_aff_flat_range_product(copy(), upma2.release());
  21723.   return manage(res);
  21724. }
  21725.  
  21726. isl::union_pw_multi_aff union_pw_multi_aff::gist(isl::union_set context) const
  21727. {
  21728.   auto res = isl_union_pw_multi_aff_gist(copy(), context.release());
  21729.   return manage(res);
  21730. }
  21731.  
  21732. isl::union_pw_multi_aff union_pw_multi_aff::intersect_domain(isl::space space) const
  21733. {
  21734.   auto res = isl_union_pw_multi_aff_intersect_domain_space(copy(), space.release());
  21735.   return manage(res);
  21736. }
  21737.  
  21738. isl::union_pw_multi_aff union_pw_multi_aff::intersect_domain(isl::union_set uset) const
  21739. {
  21740.   auto res = isl_union_pw_multi_aff_intersect_domain_union_set(copy(), uset.release());
  21741.   return manage(res);
  21742. }
  21743.  
  21744. isl::union_pw_multi_aff union_pw_multi_aff::intersect_domain_wrapped_domain(isl::union_set uset) const
  21745. {
  21746.   auto res = isl_union_pw_multi_aff_intersect_domain_wrapped_domain(copy(), uset.release());
  21747.   return manage(res);
  21748. }
  21749.  
  21750. isl::union_pw_multi_aff union_pw_multi_aff::intersect_domain_wrapped_range(isl::union_set uset) const
  21751. {
  21752.   auto res = isl_union_pw_multi_aff_intersect_domain_wrapped_range(copy(), uset.release());
  21753.   return manage(res);
  21754. }
  21755.  
  21756. isl::union_pw_multi_aff union_pw_multi_aff::intersect_params(isl::set set) const
  21757. {
  21758.   auto res = isl_union_pw_multi_aff_intersect_params(copy(), set.release());
  21759.   return manage(res);
  21760. }
  21761.  
  21762. boolean union_pw_multi_aff::involves_locals() const
  21763. {
  21764.   auto res = isl_union_pw_multi_aff_involves_locals(get());
  21765.   return manage(res);
  21766. }
  21767.  
  21768. boolean union_pw_multi_aff::isa_pw_multi_aff() const
  21769. {
  21770.   auto res = isl_union_pw_multi_aff_isa_pw_multi_aff(get());
  21771.   return manage(res);
  21772. }
  21773.  
  21774. boolean union_pw_multi_aff::plain_is_empty() const
  21775. {
  21776.   auto res = isl_union_pw_multi_aff_plain_is_empty(get());
  21777.   return manage(res);
  21778. }
  21779.  
  21780. isl::union_pw_multi_aff union_pw_multi_aff::preimage_domain_wrapped_domain(isl::union_pw_multi_aff upma2) const
  21781. {
  21782.   auto res = isl_union_pw_multi_aff_preimage_domain_wrapped_domain_union_pw_multi_aff(copy(), upma2.release());
  21783.   return manage(res);
  21784. }
  21785.  
  21786. isl::union_pw_multi_aff union_pw_multi_aff::pullback(isl::union_pw_multi_aff upma2) const
  21787. {
  21788.   auto res = isl_union_pw_multi_aff_pullback_union_pw_multi_aff(copy(), upma2.release());
  21789.   return manage(res);
  21790. }
  21791.  
  21792. isl::pw_multi_aff_list union_pw_multi_aff::pw_multi_aff_list() const
  21793. {
  21794.   auto res = isl_union_pw_multi_aff_get_pw_multi_aff_list(get());
  21795.   return manage(res);
  21796. }
  21797.  
  21798. isl::pw_multi_aff_list union_pw_multi_aff::get_pw_multi_aff_list() const
  21799. {
  21800.   return pw_multi_aff_list();
  21801. }
  21802.  
  21803. isl::union_pw_multi_aff union_pw_multi_aff::range_factor_domain() const
  21804. {
  21805.   auto res = isl_union_pw_multi_aff_range_factor_domain(copy());
  21806.   return manage(res);
  21807. }
  21808.  
  21809. isl::union_pw_multi_aff union_pw_multi_aff::range_factor_range() const
  21810. {
  21811.   auto res = isl_union_pw_multi_aff_range_factor_range(copy());
  21812.   return manage(res);
  21813. }
  21814.  
  21815. isl::union_pw_multi_aff union_pw_multi_aff::range_product(isl::union_pw_multi_aff upma2) const
  21816. {
  21817.   auto res = isl_union_pw_multi_aff_range_product(copy(), upma2.release());
  21818.   return manage(res);
  21819. }
  21820.  
  21821. isl::space union_pw_multi_aff::space() const
  21822. {
  21823.   auto res = isl_union_pw_multi_aff_get_space(get());
  21824.   return manage(res);
  21825. }
  21826.  
  21827. isl::space union_pw_multi_aff::get_space() const
  21828. {
  21829.   return space();
  21830. }
  21831.  
  21832. isl::union_pw_multi_aff union_pw_multi_aff::sub(isl::union_pw_multi_aff upma2) const
  21833. {
  21834.   auto res = isl_union_pw_multi_aff_sub(copy(), upma2.release());
  21835.   return manage(res);
  21836. }
  21837.  
  21838. isl::union_pw_multi_aff union_pw_multi_aff::subtract_domain(isl::space space) const
  21839. {
  21840.   auto res = isl_union_pw_multi_aff_subtract_domain_space(copy(), space.release());
  21841.   return manage(res);
  21842. }
  21843.  
  21844. isl::union_pw_multi_aff union_pw_multi_aff::subtract_domain(isl::union_set uset) const
  21845. {
  21846.   auto res = isl_union_pw_multi_aff_subtract_domain_union_set(copy(), uset.release());
  21847.   return manage(res);
  21848. }
  21849.  
  21850. isl::union_pw_multi_aff union_pw_multi_aff::union_add(isl::union_pw_multi_aff upma2) const
  21851. {
  21852.   auto res = isl_union_pw_multi_aff_union_add(copy(), upma2.release());
  21853.   return manage(res);
  21854. }
  21855.  
  21856. inline std::ostream &operator<<(std::ostream &os, const union_pw_multi_aff &obj)
  21857. {
  21858.   char *str = isl_union_pw_multi_aff_to_str(obj.get());
  21859.   if (!str) {
  21860.     os.setstate(std::ios_base::badbit);
  21861.     return os;
  21862.   }
  21863.   os << str;
  21864.   free(str);
  21865.   return os;
  21866. }
  21867.  
  21868. // implementations for isl::union_set
  21869. union_set manage(__isl_take isl_union_set *ptr) {
  21870.   return union_set(ptr);
  21871. }
  21872. union_set manage_copy(__isl_keep isl_union_set *ptr) {
  21873.   ptr = isl_union_set_copy(ptr);
  21874.   return union_set(ptr);
  21875. }
  21876.  
  21877. union_set::union_set()
  21878.     : ptr(nullptr) {}
  21879.  
  21880. union_set::union_set(const union_set &obj)
  21881.     : ptr(nullptr)
  21882. {
  21883.   ptr = obj.copy();
  21884. }
  21885.  
  21886. union_set::union_set(__isl_take isl_union_set *ptr)
  21887.     : ptr(ptr) {}
  21888.  
  21889. union_set::union_set(isl::basic_set bset)
  21890. {
  21891.   auto res = isl_union_set_from_basic_set(bset.release());
  21892.   ptr = res;
  21893. }
  21894.  
  21895. union_set::union_set(isl::point pnt)
  21896. {
  21897.   auto res = isl_union_set_from_point(pnt.release());
  21898.   ptr = res;
  21899. }
  21900.  
  21901. union_set::union_set(isl::set set)
  21902. {
  21903.   auto res = isl_union_set_from_set(set.release());
  21904.   ptr = res;
  21905. }
  21906.  
  21907. union_set::union_set(isl::ctx ctx, const std::string &str)
  21908. {
  21909.   auto res = isl_union_set_read_from_str(ctx.release(), str.c_str());
  21910.   ptr = res;
  21911. }
  21912.  
  21913. union_set &union_set::operator=(union_set obj) {
  21914.   std::swap(this->ptr, obj.ptr);
  21915.   return *this;
  21916. }
  21917.  
  21918. union_set::~union_set() {
  21919.   if (ptr)
  21920.     isl_union_set_free(ptr);
  21921. }
  21922.  
  21923. __isl_give isl_union_set *union_set::copy() const & {
  21924.   return isl_union_set_copy(ptr);
  21925. }
  21926.  
  21927. __isl_keep isl_union_set *union_set::get() const {
  21928.   return ptr;
  21929. }
  21930.  
  21931. __isl_give isl_union_set *union_set::release() {
  21932.   isl_union_set *tmp = ptr;
  21933.   ptr = nullptr;
  21934.   return tmp;
  21935. }
  21936.  
  21937. bool union_set::is_null() const {
  21938.   return ptr == nullptr;
  21939. }
  21940.  
  21941. isl::ctx union_set::ctx() const {
  21942.   return isl::ctx(isl_union_set_get_ctx(ptr));
  21943. }
  21944.  
  21945. isl::union_set union_set::affine_hull() const
  21946. {
  21947.   auto res = isl_union_set_affine_hull(copy());
  21948.   return manage(res);
  21949. }
  21950.  
  21951. isl::union_set union_set::apply(isl::union_map umap) const
  21952. {
  21953.   auto res = isl_union_set_apply(copy(), umap.release());
  21954.   return manage(res);
  21955. }
  21956.  
  21957. isl::set union_set::as_set() const
  21958. {
  21959.   auto res = isl_union_set_as_set(copy());
  21960.   return manage(res);
  21961. }
  21962.  
  21963. isl::union_set union_set::coalesce() const
  21964. {
  21965.   auto res = isl_union_set_coalesce(copy());
  21966.   return manage(res);
  21967. }
  21968.  
  21969. isl::union_set union_set::compute_divs() const
  21970. {
  21971.   auto res = isl_union_set_compute_divs(copy());
  21972.   return manage(res);
  21973. }
  21974.  
  21975. boolean union_set::contains(const isl::space &space) const
  21976. {
  21977.   auto res = isl_union_set_contains(get(), space.get());
  21978.   return manage(res);
  21979. }
  21980.  
  21981. isl::union_set union_set::detect_equalities() const
  21982. {
  21983.   auto res = isl_union_set_detect_equalities(copy());
  21984.   return manage(res);
  21985. }
  21986.  
  21987. isl::union_set union_set::empty(isl::ctx ctx)
  21988. {
  21989.   auto res = isl_union_set_empty_ctx(ctx.release());
  21990.   return manage(res);
  21991. }
  21992.  
  21993. boolean union_set::every_set(const std::function<boolean(isl::set)> &test) const
  21994. {
  21995.   struct test_data {
  21996.     std::function<boolean(isl::set)> func;
  21997.   } test_data = { test };
  21998.   auto test_lambda = [](isl_set *arg_0, void *arg_1) -> isl_bool {
  21999.     auto *data = static_cast<struct test_data *>(arg_1);
  22000.     auto ret = (data->func)(manage_copy(arg_0));
  22001.     return ret.release();
  22002.   };
  22003.   auto res = isl_union_set_every_set(get(), test_lambda, &test_data);
  22004.   return manage(res);
  22005. }
  22006.  
  22007. isl::set union_set::extract_set(isl::space space) const
  22008. {
  22009.   auto res = isl_union_set_extract_set(get(), space.release());
  22010.   return manage(res);
  22011. }
  22012.  
  22013. stat union_set::foreach_point(const std::function<stat(isl::point)> &fn) const
  22014. {
  22015.   struct fn_data {
  22016.     std::function<stat(isl::point)> func;
  22017.   } fn_data = { fn };
  22018.   auto fn_lambda = [](isl_point *arg_0, void *arg_1) -> isl_stat {
  22019.     auto *data = static_cast<struct fn_data *>(arg_1);
  22020.     auto ret = (data->func)(manage(arg_0));
  22021.     return ret.release();
  22022.   };
  22023.   auto res = isl_union_set_foreach_point(get(), fn_lambda, &fn_data);
  22024.   return manage(res);
  22025. }
  22026.  
  22027. stat union_set::foreach_set(const std::function<stat(isl::set)> &fn) const
  22028. {
  22029.   struct fn_data {
  22030.     std::function<stat(isl::set)> func;
  22031.   } fn_data = { fn };
  22032.   auto fn_lambda = [](isl_set *arg_0, void *arg_1) -> isl_stat {
  22033.     auto *data = static_cast<struct fn_data *>(arg_1);
  22034.     auto ret = (data->func)(manage(arg_0));
  22035.     return ret.release();
  22036.   };
  22037.   auto res = isl_union_set_foreach_set(get(), fn_lambda, &fn_data);
  22038.   return manage(res);
  22039. }
  22040.  
  22041. isl::union_set union_set::gist(isl::union_set context) const
  22042. {
  22043.   auto res = isl_union_set_gist(copy(), context.release());
  22044.   return manage(res);
  22045. }
  22046.  
  22047. isl::union_set union_set::gist_params(isl::set set) const
  22048. {
  22049.   auto res = isl_union_set_gist_params(copy(), set.release());
  22050.   return manage(res);
  22051. }
  22052.  
  22053. isl::union_map union_set::identity() const
  22054. {
  22055.   auto res = isl_union_set_identity(copy());
  22056.   return manage(res);
  22057. }
  22058.  
  22059. isl::union_pw_multi_aff union_set::identity_union_pw_multi_aff() const
  22060. {
  22061.   auto res = isl_union_set_identity_union_pw_multi_aff(copy());
  22062.   return manage(res);
  22063. }
  22064.  
  22065. isl::union_set union_set::intersect(isl::union_set uset2) const
  22066. {
  22067.   auto res = isl_union_set_intersect(copy(), uset2.release());
  22068.   return manage(res);
  22069. }
  22070.  
  22071. isl::union_set union_set::intersect_params(isl::set set) const
  22072. {
  22073.   auto res = isl_union_set_intersect_params(copy(), set.release());
  22074.   return manage(res);
  22075. }
  22076.  
  22077. boolean union_set::is_disjoint(const isl::union_set &uset2) const
  22078. {
  22079.   auto res = isl_union_set_is_disjoint(get(), uset2.get());
  22080.   return manage(res);
  22081. }
  22082.  
  22083. boolean union_set::is_empty() const
  22084. {
  22085.   auto res = isl_union_set_is_empty(get());
  22086.   return manage(res);
  22087. }
  22088.  
  22089. boolean union_set::is_equal(const isl::union_set &uset2) const
  22090. {
  22091.   auto res = isl_union_set_is_equal(get(), uset2.get());
  22092.   return manage(res);
  22093. }
  22094.  
  22095. boolean union_set::is_strict_subset(const isl::union_set &uset2) const
  22096. {
  22097.   auto res = isl_union_set_is_strict_subset(get(), uset2.get());
  22098.   return manage(res);
  22099. }
  22100.  
  22101. boolean union_set::is_subset(const isl::union_set &uset2) const
  22102. {
  22103.   auto res = isl_union_set_is_subset(get(), uset2.get());
  22104.   return manage(res);
  22105. }
  22106.  
  22107. boolean union_set::isa_set() const
  22108. {
  22109.   auto res = isl_union_set_isa_set(get());
  22110.   return manage(res);
  22111. }
  22112.  
  22113. isl::union_set union_set::lexmax() const
  22114. {
  22115.   auto res = isl_union_set_lexmax(copy());
  22116.   return manage(res);
  22117. }
  22118.  
  22119. isl::union_set union_set::lexmin() const
  22120. {
  22121.   auto res = isl_union_set_lexmin(copy());
  22122.   return manage(res);
  22123. }
  22124.  
  22125. isl::set union_set::params() const
  22126. {
  22127.   auto res = isl_union_set_params(copy());
  22128.   return manage(res);
  22129. }
  22130.  
  22131. isl::union_set union_set::polyhedral_hull() const
  22132. {
  22133.   auto res = isl_union_set_polyhedral_hull(copy());
  22134.   return manage(res);
  22135. }
  22136.  
  22137. isl::union_set union_set::preimage(isl::multi_aff ma) const
  22138. {
  22139.   auto res = isl_union_set_preimage_multi_aff(copy(), ma.release());
  22140.   return manage(res);
  22141. }
  22142.  
  22143. isl::union_set union_set::preimage(isl::pw_multi_aff pma) const
  22144. {
  22145.   auto res = isl_union_set_preimage_pw_multi_aff(copy(), pma.release());
  22146.   return manage(res);
  22147. }
  22148.  
  22149. isl::union_set union_set::preimage(isl::union_pw_multi_aff upma) const
  22150. {
  22151.   auto res = isl_union_set_preimage_union_pw_multi_aff(copy(), upma.release());
  22152.   return manage(res);
  22153. }
  22154.  
  22155. isl::point union_set::sample_point() const
  22156. {
  22157.   auto res = isl_union_set_sample_point(copy());
  22158.   return manage(res);
  22159. }
  22160.  
  22161. isl::set_list union_set::set_list() const
  22162. {
  22163.   auto res = isl_union_set_get_set_list(get());
  22164.   return manage(res);
  22165. }
  22166.  
  22167. isl::set_list union_set::get_set_list() const
  22168. {
  22169.   return set_list();
  22170. }
  22171.  
  22172. isl::space union_set::space() const
  22173. {
  22174.   auto res = isl_union_set_get_space(get());
  22175.   return manage(res);
  22176. }
  22177.  
  22178. isl::space union_set::get_space() const
  22179. {
  22180.   return space();
  22181. }
  22182.  
  22183. isl::union_set union_set::subtract(isl::union_set uset2) const
  22184. {
  22185.   auto res = isl_union_set_subtract(copy(), uset2.release());
  22186.   return manage(res);
  22187. }
  22188.  
  22189. isl::union_set_list union_set::to_list() const
  22190. {
  22191.   auto res = isl_union_set_to_list(copy());
  22192.   return manage(res);
  22193. }
  22194.  
  22195. isl::union_set union_set::unite(isl::union_set uset2) const
  22196. {
  22197.   auto res = isl_union_set_union(copy(), uset2.release());
  22198.   return manage(res);
  22199. }
  22200.  
  22201. isl::union_set union_set::universe() const
  22202. {
  22203.   auto res = isl_union_set_universe(copy());
  22204.   return manage(res);
  22205. }
  22206.  
  22207. isl::union_map union_set::unwrap() const
  22208. {
  22209.   auto res = isl_union_set_unwrap(copy());
  22210.   return manage(res);
  22211. }
  22212.  
  22213. inline std::ostream &operator<<(std::ostream &os, const union_set &obj)
  22214. {
  22215.   char *str = isl_union_set_to_str(obj.get());
  22216.   if (!str) {
  22217.     os.setstate(std::ios_base::badbit);
  22218.     return os;
  22219.   }
  22220.   os << str;
  22221.   free(str);
  22222.   return os;
  22223. }
  22224.  
  22225. // implementations for isl::union_set_list
  22226. union_set_list manage(__isl_take isl_union_set_list *ptr) {
  22227.   return union_set_list(ptr);
  22228. }
  22229. union_set_list manage_copy(__isl_keep isl_union_set_list *ptr) {
  22230.   ptr = isl_union_set_list_copy(ptr);
  22231.   return union_set_list(ptr);
  22232. }
  22233.  
  22234. union_set_list::union_set_list()
  22235.     : ptr(nullptr) {}
  22236.  
  22237. union_set_list::union_set_list(const union_set_list &obj)
  22238.     : ptr(nullptr)
  22239. {
  22240.   ptr = obj.copy();
  22241. }
  22242.  
  22243. union_set_list::union_set_list(__isl_take isl_union_set_list *ptr)
  22244.     : ptr(ptr) {}
  22245.  
  22246. union_set_list::union_set_list(isl::ctx ctx, int n)
  22247. {
  22248.   auto res = isl_union_set_list_alloc(ctx.release(), n);
  22249.   ptr = res;
  22250. }
  22251.  
  22252. union_set_list::union_set_list(isl::union_set el)
  22253. {
  22254.   auto res = isl_union_set_list_from_union_set(el.release());
  22255.   ptr = res;
  22256. }
  22257.  
  22258. union_set_list::union_set_list(isl::ctx ctx, const std::string &str)
  22259. {
  22260.   auto res = isl_union_set_list_read_from_str(ctx.release(), str.c_str());
  22261.   ptr = res;
  22262. }
  22263.  
  22264. union_set_list &union_set_list::operator=(union_set_list obj) {
  22265.   std::swap(this->ptr, obj.ptr);
  22266.   return *this;
  22267. }
  22268.  
  22269. union_set_list::~union_set_list() {
  22270.   if (ptr)
  22271.     isl_union_set_list_free(ptr);
  22272. }
  22273.  
  22274. __isl_give isl_union_set_list *union_set_list::copy() const & {
  22275.   return isl_union_set_list_copy(ptr);
  22276. }
  22277.  
  22278. __isl_keep isl_union_set_list *union_set_list::get() const {
  22279.   return ptr;
  22280. }
  22281.  
  22282. __isl_give isl_union_set_list *union_set_list::release() {
  22283.   isl_union_set_list *tmp = ptr;
  22284.   ptr = nullptr;
  22285.   return tmp;
  22286. }
  22287.  
  22288. bool union_set_list::is_null() const {
  22289.   return ptr == nullptr;
  22290. }
  22291.  
  22292. isl::ctx union_set_list::ctx() const {
  22293.   return isl::ctx(isl_union_set_list_get_ctx(ptr));
  22294. }
  22295.  
  22296. isl::union_set_list union_set_list::add(isl::union_set el) const
  22297. {
  22298.   auto res = isl_union_set_list_add(copy(), el.release());
  22299.   return manage(res);
  22300. }
  22301.  
  22302. isl::union_set union_set_list::at(int index) const
  22303. {
  22304.   auto res = isl_union_set_list_get_at(get(), index);
  22305.   return manage(res);
  22306. }
  22307.  
  22308. isl::union_set union_set_list::get_at(int index) const
  22309. {
  22310.   return at(index);
  22311. }
  22312.  
  22313. isl::union_set_list union_set_list::clear() const
  22314. {
  22315.   auto res = isl_union_set_list_clear(copy());
  22316.   return manage(res);
  22317. }
  22318.  
  22319. isl::union_set_list union_set_list::concat(isl::union_set_list list2) const
  22320. {
  22321.   auto res = isl_union_set_list_concat(copy(), list2.release());
  22322.   return manage(res);
  22323. }
  22324.  
  22325. isl::union_set_list union_set_list::drop(unsigned int first, unsigned int n) const
  22326. {
  22327.   auto res = isl_union_set_list_drop(copy(), first, n);
  22328.   return manage(res);
  22329. }
  22330.  
  22331. stat union_set_list::foreach(const std::function<stat(isl::union_set)> &fn) const
  22332. {
  22333.   struct fn_data {
  22334.     std::function<stat(isl::union_set)> func;
  22335.   } fn_data = { fn };
  22336.   auto fn_lambda = [](isl_union_set *arg_0, void *arg_1) -> isl_stat {
  22337.     auto *data = static_cast<struct fn_data *>(arg_1);
  22338.     auto ret = (data->func)(manage(arg_0));
  22339.     return ret.release();
  22340.   };
  22341.   auto res = isl_union_set_list_foreach(get(), fn_lambda, &fn_data);
  22342.   return manage(res);
  22343. }
  22344.  
  22345. isl::union_set_list union_set_list::insert(unsigned int pos, isl::union_set el) const
  22346. {
  22347.   auto res = isl_union_set_list_insert(copy(), pos, el.release());
  22348.   return manage(res);
  22349. }
  22350.  
  22351. class size union_set_list::size() const
  22352. {
  22353.   auto res = isl_union_set_list_size(get());
  22354.   return manage(res);
  22355. }
  22356.  
  22357. inline std::ostream &operator<<(std::ostream &os, const union_set_list &obj)
  22358. {
  22359.   char *str = isl_union_set_list_to_str(obj.get());
  22360.   if (!str) {
  22361.     os.setstate(std::ios_base::badbit);
  22362.     return os;
  22363.   }
  22364.   os << str;
  22365.   free(str);
  22366.   return os;
  22367. }
  22368.  
  22369. // implementations for isl::val
  22370. val manage(__isl_take isl_val *ptr) {
  22371.   return val(ptr);
  22372. }
  22373. val manage_copy(__isl_keep isl_val *ptr) {
  22374.   ptr = isl_val_copy(ptr);
  22375.   return val(ptr);
  22376. }
  22377.  
  22378. val::val()
  22379.     : ptr(nullptr) {}
  22380.  
  22381. val::val(const val &obj)
  22382.     : ptr(nullptr)
  22383. {
  22384.   ptr = obj.copy();
  22385. }
  22386.  
  22387. val::val(__isl_take isl_val *ptr)
  22388.     : ptr(ptr) {}
  22389.  
  22390. val::val(isl::ctx ctx, long i)
  22391. {
  22392.   auto res = isl_val_int_from_si(ctx.release(), i);
  22393.   ptr = res;
  22394. }
  22395.  
  22396. val::val(isl::ctx ctx, const std::string &str)
  22397. {
  22398.   auto res = isl_val_read_from_str(ctx.release(), str.c_str());
  22399.   ptr = res;
  22400. }
  22401.  
  22402. val &val::operator=(val obj) {
  22403.   std::swap(this->ptr, obj.ptr);
  22404.   return *this;
  22405. }
  22406.  
  22407. val::~val() {
  22408.   if (ptr)
  22409.     isl_val_free(ptr);
  22410. }
  22411.  
  22412. __isl_give isl_val *val::copy() const & {
  22413.   return isl_val_copy(ptr);
  22414. }
  22415.  
  22416. __isl_keep isl_val *val::get() const {
  22417.   return ptr;
  22418. }
  22419.  
  22420. __isl_give isl_val *val::release() {
  22421.   isl_val *tmp = ptr;
  22422.   ptr = nullptr;
  22423.   return tmp;
  22424. }
  22425.  
  22426. bool val::is_null() const {
  22427.   return ptr == nullptr;
  22428. }
  22429.  
  22430. isl::ctx val::ctx() const {
  22431.   return isl::ctx(isl_val_get_ctx(ptr));
  22432. }
  22433.  
  22434. isl::val val::abs() const
  22435. {
  22436.   auto res = isl_val_abs(copy());
  22437.   return manage(res);
  22438. }
  22439.  
  22440. boolean val::abs_eq(const isl::val &v2) const
  22441. {
  22442.   auto res = isl_val_abs_eq(get(), v2.get());
  22443.   return manage(res);
  22444. }
  22445.  
  22446. boolean val::abs_eq(long v2) const
  22447. {
  22448.   return this->abs_eq(isl::val(ctx(), v2));
  22449. }
  22450.  
  22451. isl::val val::add(isl::val v2) const
  22452. {
  22453.   auto res = isl_val_add(copy(), v2.release());
  22454.   return manage(res);
  22455. }
  22456.  
  22457. isl::val val::add(long v2) const
  22458. {
  22459.   return this->add(isl::val(ctx(), v2));
  22460. }
  22461.  
  22462. isl::val val::ceil() const
  22463. {
  22464.   auto res = isl_val_ceil(copy());
  22465.   return manage(res);
  22466. }
  22467.  
  22468. int val::cmp_si(long i) const
  22469. {
  22470.   auto res = isl_val_cmp_si(get(), i);
  22471.   return res;
  22472. }
  22473.  
  22474. long val::den_si() const
  22475. {
  22476.   auto res = isl_val_get_den_si(get());
  22477.   return res;
  22478. }
  22479.  
  22480. long val::get_den_si() const
  22481. {
  22482.   return den_si();
  22483. }
  22484.  
  22485. isl::val val::div(isl::val v2) const
  22486. {
  22487.   auto res = isl_val_div(copy(), v2.release());
  22488.   return manage(res);
  22489. }
  22490.  
  22491. isl::val val::div(long v2) const
  22492. {
  22493.   return this->div(isl::val(ctx(), v2));
  22494. }
  22495.  
  22496. boolean val::eq(const isl::val &v2) const
  22497. {
  22498.   auto res = isl_val_eq(get(), v2.get());
  22499.   return manage(res);
  22500. }
  22501.  
  22502. boolean val::eq(long v2) const
  22503. {
  22504.   return this->eq(isl::val(ctx(), v2));
  22505. }
  22506.  
  22507. isl::val val::floor() const
  22508. {
  22509.   auto res = isl_val_floor(copy());
  22510.   return manage(res);
  22511. }
  22512.  
  22513. isl::val val::gcd(isl::val v2) const
  22514. {
  22515.   auto res = isl_val_gcd(copy(), v2.release());
  22516.   return manage(res);
  22517. }
  22518.  
  22519. isl::val val::gcd(long v2) const
  22520. {
  22521.   return this->gcd(isl::val(ctx(), v2));
  22522. }
  22523.  
  22524. boolean val::ge(const isl::val &v2) const
  22525. {
  22526.   auto res = isl_val_ge(get(), v2.get());
  22527.   return manage(res);
  22528. }
  22529.  
  22530. boolean val::ge(long v2) const
  22531. {
  22532.   return this->ge(isl::val(ctx(), v2));
  22533. }
  22534.  
  22535. boolean val::gt(const isl::val &v2) const
  22536. {
  22537.   auto res = isl_val_gt(get(), v2.get());
  22538.   return manage(res);
  22539. }
  22540.  
  22541. boolean val::gt(long v2) const
  22542. {
  22543.   return this->gt(isl::val(ctx(), v2));
  22544. }
  22545.  
  22546. isl::val val::infty(isl::ctx ctx)
  22547. {
  22548.   auto res = isl_val_infty(ctx.release());
  22549.   return manage(res);
  22550. }
  22551.  
  22552. isl::val val::int_from_ui(isl::ctx ctx, unsigned long u)
  22553. {
  22554.   auto res = isl_val_int_from_ui(ctx.release(), u);
  22555.   return manage(res);
  22556. }
  22557.  
  22558. isl::val val::inv() const
  22559. {
  22560.   auto res = isl_val_inv(copy());
  22561.   return manage(res);
  22562. }
  22563.  
  22564. boolean val::is_divisible_by(const isl::val &v2) const
  22565. {
  22566.   auto res = isl_val_is_divisible_by(get(), v2.get());
  22567.   return manage(res);
  22568. }
  22569.  
  22570. boolean val::is_divisible_by(long v2) const
  22571. {
  22572.   return this->is_divisible_by(isl::val(ctx(), v2));
  22573. }
  22574.  
  22575. boolean val::is_infty() const
  22576. {
  22577.   auto res = isl_val_is_infty(get());
  22578.   return manage(res);
  22579. }
  22580.  
  22581. boolean val::is_int() const
  22582. {
  22583.   auto res = isl_val_is_int(get());
  22584.   return manage(res);
  22585. }
  22586.  
  22587. boolean val::is_nan() const
  22588. {
  22589.   auto res = isl_val_is_nan(get());
  22590.   return manage(res);
  22591. }
  22592.  
  22593. boolean val::is_neg() const
  22594. {
  22595.   auto res = isl_val_is_neg(get());
  22596.   return manage(res);
  22597. }
  22598.  
  22599. boolean val::is_neginfty() const
  22600. {
  22601.   auto res = isl_val_is_neginfty(get());
  22602.   return manage(res);
  22603. }
  22604.  
  22605. boolean val::is_negone() const
  22606. {
  22607.   auto res = isl_val_is_negone(get());
  22608.   return manage(res);
  22609. }
  22610.  
  22611. boolean val::is_nonneg() const
  22612. {
  22613.   auto res = isl_val_is_nonneg(get());
  22614.   return manage(res);
  22615. }
  22616.  
  22617. boolean val::is_nonpos() const
  22618. {
  22619.   auto res = isl_val_is_nonpos(get());
  22620.   return manage(res);
  22621. }
  22622.  
  22623. boolean val::is_one() const
  22624. {
  22625.   auto res = isl_val_is_one(get());
  22626.   return manage(res);
  22627. }
  22628.  
  22629. boolean val::is_pos() const
  22630. {
  22631.   auto res = isl_val_is_pos(get());
  22632.   return manage(res);
  22633. }
  22634.  
  22635. boolean val::is_rat() const
  22636. {
  22637.   auto res = isl_val_is_rat(get());
  22638.   return manage(res);
  22639. }
  22640.  
  22641. boolean val::is_zero() const
  22642. {
  22643.   auto res = isl_val_is_zero(get());
  22644.   return manage(res);
  22645. }
  22646.  
  22647. boolean val::le(const isl::val &v2) const
  22648. {
  22649.   auto res = isl_val_le(get(), v2.get());
  22650.   return manage(res);
  22651. }
  22652.  
  22653. boolean val::le(long v2) const
  22654. {
  22655.   return this->le(isl::val(ctx(), v2));
  22656. }
  22657.  
  22658. boolean val::lt(const isl::val &v2) const
  22659. {
  22660.   auto res = isl_val_lt(get(), v2.get());
  22661.   return manage(res);
  22662. }
  22663.  
  22664. boolean val::lt(long v2) const
  22665. {
  22666.   return this->lt(isl::val(ctx(), v2));
  22667. }
  22668.  
  22669. isl::val val::max(isl::val v2) const
  22670. {
  22671.   auto res = isl_val_max(copy(), v2.release());
  22672.   return manage(res);
  22673. }
  22674.  
  22675. isl::val val::max(long v2) const
  22676. {
  22677.   return this->max(isl::val(ctx(), v2));
  22678. }
  22679.  
  22680. isl::val val::min(isl::val v2) const
  22681. {
  22682.   auto res = isl_val_min(copy(), v2.release());
  22683.   return manage(res);
  22684. }
  22685.  
  22686. isl::val val::min(long v2) const
  22687. {
  22688.   return this->min(isl::val(ctx(), v2));
  22689. }
  22690.  
  22691. isl::val val::mod(isl::val v2) const
  22692. {
  22693.   auto res = isl_val_mod(copy(), v2.release());
  22694.   return manage(res);
  22695. }
  22696.  
  22697. isl::val val::mod(long v2) const
  22698. {
  22699.   return this->mod(isl::val(ctx(), v2));
  22700. }
  22701.  
  22702. isl::val val::mul(isl::val v2) const
  22703. {
  22704.   auto res = isl_val_mul(copy(), v2.release());
  22705.   return manage(res);
  22706. }
  22707.  
  22708. isl::val val::mul(long v2) const
  22709. {
  22710.   return this->mul(isl::val(ctx(), v2));
  22711. }
  22712.  
  22713. isl::val val::nan(isl::ctx ctx)
  22714. {
  22715.   auto res = isl_val_nan(ctx.release());
  22716.   return manage(res);
  22717. }
  22718.  
  22719. boolean val::ne(const isl::val &v2) const
  22720. {
  22721.   auto res = isl_val_ne(get(), v2.get());
  22722.   return manage(res);
  22723. }
  22724.  
  22725. boolean val::ne(long v2) const
  22726. {
  22727.   return this->ne(isl::val(ctx(), v2));
  22728. }
  22729.  
  22730. isl::val val::neg() const
  22731. {
  22732.   auto res = isl_val_neg(copy());
  22733.   return manage(res);
  22734. }
  22735.  
  22736. isl::val val::neginfty(isl::ctx ctx)
  22737. {
  22738.   auto res = isl_val_neginfty(ctx.release());
  22739.   return manage(res);
  22740. }
  22741.  
  22742. isl::val val::negone(isl::ctx ctx)
  22743. {
  22744.   auto res = isl_val_negone(ctx.release());
  22745.   return manage(res);
  22746. }
  22747.  
  22748. long val::num_si() const
  22749. {
  22750.   auto res = isl_val_get_num_si(get());
  22751.   return res;
  22752. }
  22753.  
  22754. long val::get_num_si() const
  22755. {
  22756.   return num_si();
  22757. }
  22758.  
  22759. isl::val val::one(isl::ctx ctx)
  22760. {
  22761.   auto res = isl_val_one(ctx.release());
  22762.   return manage(res);
  22763. }
  22764.  
  22765. isl::val val::pow2() const
  22766. {
  22767.   auto res = isl_val_pow2(copy());
  22768.   return manage(res);
  22769. }
  22770.  
  22771. int val::sgn() const
  22772. {
  22773.   auto res = isl_val_sgn(get());
  22774.   return res;
  22775. }
  22776.  
  22777. isl::val val::sub(isl::val v2) const
  22778. {
  22779.   auto res = isl_val_sub(copy(), v2.release());
  22780.   return manage(res);
  22781. }
  22782.  
  22783. isl::val val::sub(long v2) const
  22784. {
  22785.   return this->sub(isl::val(ctx(), v2));
  22786. }
  22787.  
  22788. isl::val_list val::to_list() const
  22789. {
  22790.   auto res = isl_val_to_list(copy());
  22791.   return manage(res);
  22792. }
  22793.  
  22794. isl::val val::trunc() const
  22795. {
  22796.   auto res = isl_val_trunc(copy());
  22797.   return manage(res);
  22798. }
  22799.  
  22800. isl::val val::zero(isl::ctx ctx)
  22801. {
  22802.   auto res = isl_val_zero(ctx.release());
  22803.   return manage(res);
  22804. }
  22805.  
  22806. inline std::ostream &operator<<(std::ostream &os, const val &obj)
  22807. {
  22808.   char *str = isl_val_to_str(obj.get());
  22809.   if (!str) {
  22810.     os.setstate(std::ios_base::badbit);
  22811.     return os;
  22812.   }
  22813.   os << str;
  22814.   free(str);
  22815.   return os;
  22816. }
  22817.  
  22818. // implementations for isl::val_list
  22819. val_list manage(__isl_take isl_val_list *ptr) {
  22820.   return val_list(ptr);
  22821. }
  22822. val_list manage_copy(__isl_keep isl_val_list *ptr) {
  22823.   ptr = isl_val_list_copy(ptr);
  22824.   return val_list(ptr);
  22825. }
  22826.  
  22827. val_list::val_list()
  22828.     : ptr(nullptr) {}
  22829.  
  22830. val_list::val_list(const val_list &obj)
  22831.     : ptr(nullptr)
  22832. {
  22833.   ptr = obj.copy();
  22834. }
  22835.  
  22836. val_list::val_list(__isl_take isl_val_list *ptr)
  22837.     : ptr(ptr) {}
  22838.  
  22839. val_list::val_list(isl::ctx ctx, int n)
  22840. {
  22841.   auto res = isl_val_list_alloc(ctx.release(), n);
  22842.   ptr = res;
  22843. }
  22844.  
  22845. val_list::val_list(isl::val el)
  22846. {
  22847.   auto res = isl_val_list_from_val(el.release());
  22848.   ptr = res;
  22849. }
  22850.  
  22851. val_list::val_list(isl::ctx ctx, const std::string &str)
  22852. {
  22853.   auto res = isl_val_list_read_from_str(ctx.release(), str.c_str());
  22854.   ptr = res;
  22855. }
  22856.  
  22857. val_list &val_list::operator=(val_list obj) {
  22858.   std::swap(this->ptr, obj.ptr);
  22859.   return *this;
  22860. }
  22861.  
  22862. val_list::~val_list() {
  22863.   if (ptr)
  22864.     isl_val_list_free(ptr);
  22865. }
  22866.  
  22867. __isl_give isl_val_list *val_list::copy() const & {
  22868.   return isl_val_list_copy(ptr);
  22869. }
  22870.  
  22871. __isl_keep isl_val_list *val_list::get() const {
  22872.   return ptr;
  22873. }
  22874.  
  22875. __isl_give isl_val_list *val_list::release() {
  22876.   isl_val_list *tmp = ptr;
  22877.   ptr = nullptr;
  22878.   return tmp;
  22879. }
  22880.  
  22881. bool val_list::is_null() const {
  22882.   return ptr == nullptr;
  22883. }
  22884.  
  22885. isl::ctx val_list::ctx() const {
  22886.   return isl::ctx(isl_val_list_get_ctx(ptr));
  22887. }
  22888.  
  22889. isl::val_list val_list::add(isl::val el) const
  22890. {
  22891.   auto res = isl_val_list_add(copy(), el.release());
  22892.   return manage(res);
  22893. }
  22894.  
  22895. isl::val_list val_list::add(long el) const
  22896. {
  22897.   return this->add(isl::val(ctx(), el));
  22898. }
  22899.  
  22900. isl::val val_list::at(int index) const
  22901. {
  22902.   auto res = isl_val_list_get_at(get(), index);
  22903.   return manage(res);
  22904. }
  22905.  
  22906. isl::val val_list::get_at(int index) const
  22907. {
  22908.   return at(index);
  22909. }
  22910.  
  22911. isl::val_list val_list::clear() const
  22912. {
  22913.   auto res = isl_val_list_clear(copy());
  22914.   return manage(res);
  22915. }
  22916.  
  22917. isl::val_list val_list::concat(isl::val_list list2) const
  22918. {
  22919.   auto res = isl_val_list_concat(copy(), list2.release());
  22920.   return manage(res);
  22921. }
  22922.  
  22923. isl::val_list val_list::drop(unsigned int first, unsigned int n) const
  22924. {
  22925.   auto res = isl_val_list_drop(copy(), first, n);
  22926.   return manage(res);
  22927. }
  22928.  
  22929. stat val_list::foreach(const std::function<stat(isl::val)> &fn) const
  22930. {
  22931.   struct fn_data {
  22932.     std::function<stat(isl::val)> func;
  22933.   } fn_data = { fn };
  22934.   auto fn_lambda = [](isl_val *arg_0, void *arg_1) -> isl_stat {
  22935.     auto *data = static_cast<struct fn_data *>(arg_1);
  22936.     auto ret = (data->func)(manage(arg_0));
  22937.     return ret.release();
  22938.   };
  22939.   auto res = isl_val_list_foreach(get(), fn_lambda, &fn_data);
  22940.   return manage(res);
  22941. }
  22942.  
  22943. isl::val_list val_list::insert(unsigned int pos, isl::val el) const
  22944. {
  22945.   auto res = isl_val_list_insert(copy(), pos, el.release());
  22946.   return manage(res);
  22947. }
  22948.  
  22949. isl::val_list val_list::insert(unsigned int pos, long el) const
  22950. {
  22951.   return this->insert(pos, isl::val(ctx(), el));
  22952. }
  22953.  
  22954. class size val_list::size() const
  22955. {
  22956.   auto res = isl_val_list_size(get());
  22957.   return manage(res);
  22958. }
  22959.  
  22960. inline std::ostream &operator<<(std::ostream &os, const val_list &obj)
  22961. {
  22962.   char *str = isl_val_list_to_str(obj.get());
  22963.   if (!str) {
  22964.     os.setstate(std::ios_base::badbit);
  22965.     return os;
  22966.   }
  22967.   os << str;
  22968.   free(str);
  22969.   return os;
  22970. }
  22971. } // namespace isl
  22972.  
  22973. #endif /* ISL_CPP_CHECKED */
  22974.